-
Spring Container ๐ฏ
- BeanDefinition (= interface)์ด ์๋ ๋ฐ์ดํฐ๋ค(metadata)์ ์ถ์ํ ์ญํ ์ ํด์ ์ฝ์ด๋๋ฆฐ๋ค.
- AppConfig.class (= ๊ตฌํ์ฒด)
- appConfig.xml
- appConfig.xxx
Singleton Pattern๐ฏ
- pure java๋ ์น(ํด๋ผ์ด์ธํธ)์์ ์์ฒญ์ด ์ฌ๋๋ง๋ค ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. ์ด๋ Memory waste๋ฅผ ์ด๋ํ๋ค
- ํด๊ฒฐ๋ฐฉ์ : Singleton pattern์ ์ฌ์ฉํ๋ค.
- Singleton์ ํ๋์ ๊ฐ์ฒด๋ง ์์ฑํ๊ณ ๊ณต์ ํ๋๋ก ์ค๊ณ๊ฐ ๊ฐ๋ฅํ๋ค.
Problems of Singleton Pattern
- DIP ์๋ฐ
- ํ
์คํธ์ ์ด๋ ค์
- ๋ณต์์ ์์ฑ์ ์์ฑ์ ์ด๋ ค์(๋คํ์ฑ์ ํฌ๊ฒ ๋จ์ดํธ๋ฆผ)
SpringContainer(SingletonContainer) ๐ฏ
- object๋ค์ ๋ชจ๋ singletonํ ์์ผ์ค.(์ ๋ถํฐ ๊ถ๊ธํ๋ ์์ ์๋ฐ์ฝ๋๋ณด๋ค spring์ด ๋ ์ข์ ์ด์ ๋ฅผ ์๊ฒ๋จ.)
- singleton pattern์ ๋จ์ ์ ํด๊ฒฐ
Singleton ๋ฐฉ์์ ์ฃผ์์
- ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ด ์ ์ง(stateful)ํ๊ฒ ์ค๊ณํ๋ฉด ์๋๋ค.(๋ฌด์ํ๋ก ์ค๊ณํด์ผํ๋ค.)
- ์ง์ญ๋ณ์, ํ๋ผ๋ฏธํฐ, ThreadLocal ๋ฑ์ ์ฌ์ฉํด์ผํ๋ค.
- ํ๋ ๊ณต์ ๊ฐ์ ์ค์ ํ๋ฉด ํฐ ์ฅ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
@Configuration๐ฏ
- ๋ฐ์ดํธ์ฝ๋ ์กฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก AppConfig๋ฅผ AppConfig@CGLIB ํด๋์ค(AppConfig์ ์์ํ์ผ)๋ก ์นํ(?)ํด์ค๋ค.
- ์ฑ๊ธํค ์ฑ์ง์ ๋ณด์ฅ์์ผ์ค๋ค.
- ์คํ๋ง ์ปจํ
์ด๋ ์ ์ฌ ์ ๋ฌด์ ๋ฐ๋ผ ์๋์ผ๋ก ์ ์ฌํด์ฃผ๊ณ ๋ฐํํด์ค๋ค.
- Annotation Configuration์ ์ ์ธํด์ฃผ์ง ์์ผ๋ฉด ์ฑ๊ธํค ์ฑ์ง์ด ๊นจ์ง๊ณ , AppConfig ๋ด์ ๋ฐ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ์์กด์ฑ ์ฃผ์
์ ํด์ค์ผํ๋ค
- memberRepository์ ๊ฐ์..
๊ถ๊ธํ์ ๐
- logic ์ฌ์ฉ์ ์ด์
- singleton์ด DIP๋ฅผ ์๋ฐํ๋ ์ด์
- singleton pattern์ ์์ฑํ ๊ตฌ์ฒดํด๋์ค์ ํด๋ผ์ด์ธํธ๊ฐ ์์กดํ๊ฒ ๋๋ค.
- ์ฆ, DIP๋ฅผ ์๋ฐํ๋ค.
- ๋คํ์ฑ์ด๋?
- ์ค๋ฒ๋ผ์ด๋ฉ์ ํตํ ์ค์ ๋ฐ๊พธ๊ธฐ,
- ex) ์ค๋ฒ์์น๋ผ๋ ์ธํฐํ์ด์ค์ ์บ๋ฆญํฐ๋ผ๋ ๊ตฌํ์ฒด๋ก ๋ถ๋ฆฌ, ์บ๋ฆญํฐ๋ง๋ค ๊ฐ์ง ์คํฌ๋ค์ด ๋ค๋ฆ ์ด๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ์ผ๋ก ๋ณ๊ฒฝํจ.