๋ฐ์ํ
์ฑ๊ธํค ํจํด์ด๋?
์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์์ ๋จ ํ๋์ ์ธ์คํด์ค(๊ฐ์ฒด)๋ง ์กด์ฌํ๋๋ก ๋ณด์ฅํ๋ ํจํด
์ ํ์ํ ๊น?
- ์์ฃผ ์ฐ์ด๋ ๊ฐ์ฒด๋ฅผ ๊ณต์ ํด์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น ์ค์
- ์ฌ๋ฌ ํด๋์ค์์ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ ์ ์์
- ๊ฐ์ฒด ์์ฑ ๋น์ฉ์ด ํฐ ๊ฒฝ์ฐ ํจ๊ณผ์
์๋ฅผ๋ค์ด DB์ฐ๊ฒฐ ๊ฐ์ฒด, ์ค์ ๊ฐ์ฒด ๋ฑ์ ์ฌ๋ฌ๊ฐ ์์ ํ์๊ฐ ์๋ค.
๊ทธ๋์ ํ๋ฒ๋ง ๋ง๋ค๊ณ ๋ค๊ฐ์ด ์ฐ์ = ์ฑ๊ธํค
Spring boot์์๋ ์ด๋์ ์ฐ์ผ๊น?
→ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๋ ๋ชจ๋ Bean์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธํค์ด๋ค.
์ฝ๋๋ก ๋ณด๊ธฐ
public class MySingleton {
// 1. ์๊ธฐ ์์ ์ private static์ผ๋ก ํ๋ ๋ง๋ ๋ค
private static MySingleton instance = new MySingleton();
// 2. ์์ฑ์๋ฅผ private์ผ๋ก ๋ง๋๋ค (new ๊ธ์ง)
private MySingleton() {}
// 3. ์ ์ ๋ฉ์๋๋ก instance๋ฅผ ๊บผ๋ด ์ธ ์ ์๊ฒ ํ๋ค
public static MySingleton getInstance() {
return instance;
}
}
์ฌ์ฉ๋ฒ
MySingleton a = MySingleton.getInstance();
MySingleton b = MySingleton.getInstance();
System.out.println(a == b); // true
→ ๋ ๋ค ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฅดํค๊ณ ์์
์คํ๋ง์์ ์ด๊ฑธ ์ ์๋ง๋ค์ด๋ ๋ ๊น?
์คํ๋ง์๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ Bean์ ์ฑ๊ธํค์ผ๋ก ๋ง๋ค์ด์ ๊ด๋ฆฌํด์ค๋ค.
@Service
public class MyService {
}
@Autowired
private MyService myService1;
@Autowired
private MyService myService2;
→ ์ด ๋ ๊ฐ๋ ๊ฒฐ๊ตญ ๊ฐ์ ์ธ์คํด์ค!
์ฑ๊ธํค ์ฃผ์์
| ์ํ(state)๋ฅผ ๊ฐ์ง๋ฉด ์ ๋จ | → ์ฑ๊ธํค์ ๊ณต์ ๋๊ธฐ ๋๋ฌธ์, ๋๊ตฐ๊ฐ ๊ฐ ๋ฐ๊พธ๋ฉด ๋ค๋ฅธ ๊ณณ์์๋ ๋ฐ๋ |
| ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์ ์คํ ์จ์ผ ํจ | (์คํ๋ง์ ์ ์ฒ๋ฆฌํด์ฃผ์ง๋ง ์ง์ ๊ตฌํํ ๋ ์ฃผ์) |
์ค๋ฌด์์ ์ฑ๊ธํค์ผ๋ก ๋๋ฉด ์ข์ ๊ฐ์ฒด๋ค
- Service ํด๋์ค (@Service) : ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ ๋ด๋น. ์ํ ์์ด ์์ฒญ๋ง ์ฒ๋ฆฌํจ → ๊ณต์ ํด๋ ์์ ํจ
- Repository ํด๋์ค (@Repository) : DB ์ ๊ทผ ๊ฐ์ฒด๋ DB ์ปค๋ฅ์ ํ๋ก ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๊ฐ ๋ง๋ค๋ฉด ๋ญ๋น
- ์ค์ ๊ด๋ฆฌ ๊ฐ์ฒด (Config) : ์: AppProperties, JwtProperties ๊ฐ์ ์ค์ ์ ํ ๋ฒ๋ง ์ฝ์ด๋๋ฉด ์ถฉ๋ถํจ
- ๊ณตํต ์ ํธ์ฑ ๊ฐ์ฒด : ์ํธํ, ๋ ์ง ํฌ๋งท, ํ์ผ ๊ฒฝ๋ก ์ฒ๋ฆฌ ๋ฑ์ ๋งค๋ฒ ์๋ก ๋ง๋ค ํ์ ์์
- ์บ์ ๋งค๋์ , Redis ํด๋ผ์ด์ธํธ : ์ฐ๊ฒฐ ํ๋ ์ด์ด๋๊ณ ์ฐ๋ ๊ตฌ์กฐ → ์ฑ๊ธํค ํ์!
- ๋ก๊ฑฐ(Logger) : ๋ก๊ทธ๋ ๋งค๋ฒ ์๋ก ๋ง๋ค ํ์ ์์ด ๊ณต์ ํด์ ์จ์ผ ๋จ
๋ฐ์ํ