๐ฏ ๋ชฉํ :ย Spring Container์ ์ดํด
IoC/DI ๊ธฐ์ด ๊ฐ๋
์์ IoC ์ปจํ
์ด๋๋ก ๊ธฐ๋ณธ์ ์ด ๋ด์ฉ์ ์ ๋ฆฌ ํ๋ค.
๐ Spring Container
๐ ApplicationContext
- ApplicationContext๋ฅผ ์คํ๋ง ์ปจํ
์ด๋๋ผ๊ณ ํ๋ฉฐ ์ธํฐํ์ด์ค๋ก ๊ตฌํ๋์ด์๋ค.
- ๋ด๋ถ์ ์กด์ฌํ๋ ์ ํ๋ฆฌ์ผ์ด์
Bean ์ ์๋ช
์ฃผ๊ธฐ, Bean๊ฐ์ ์ํธ ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ํ๋ค.
- XML, ์ด๋
ธํ
์ด์
๊ธฐ๋ฐ์ ์๋ฐ ์ค์ ํด๋์ค๋ก ๋ง๋ค์ ์๋ค.
- ์์กด์ฑ ์ฃผ์
์ ํตํด ์ ํ๋ฆฌ์ผ์ด์
์ปดํฌ๋ํธ๋ฅผ ๊ด๋ฆฌํ๋ค
- ์๋ก ๋ค๋ฅธ Bean์ ์ฐ๊ฒฐํด ์ ํ๋ฆฌ์ผ์ด์
์ Bean์ ์ฐ๊ฒฐํ๋ ์ญํ ์ ํ๋ค.
- ๊ฐ๋ฐ์๋ ๋ชจ๋๊ฐ์ ์์กด ๋ฐ ๊ฒฐํฉ์ผ๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ก ๋ถํฐ ์์ ๋กญ๋ค.
- ๋ฉ์๋๊ฐ ์ธ์ ์ด๋์ ํธ์ถ๋์ด์ผํ๋์ง, ๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ์ํด ํ์ํ ๋งค๊ฐ๋ณ์๋ฅผ ์ค๋นํด์ ์ ๋ฌํ์ง ์๋๋ค.
๐ WHY Spring Container?
- ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด new ํค์๋๋ฅผ ์จ์ผ ํ์๋๋ฐ, ์ ํ๋ฆฌ์ผ์ด์
์์ ์ด๋ฌํ ๊ฐ์ฒด๊ฐ ์์ฃผ ๋ง์ด ์กด์ฌํ๊ณ ์๋ก ์ฐธ์กฐํ๊ฒ ๋์ด์ง๋ค.
- ์ ๊ฒฝ์ฐ ์ฐธ์กฐ๊ฐ ์ฌํ ์๋ก ์์กด์ฑ์ ๋์์ง๋ฉฐ ๋ฎ์ ๊ฒฐํฉ๋์ ๋์ ์บก์ํ๋ฅผ ์งํฅํ๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ๊ณผ ๋ฒ์ด๋๊ธฐ ๋๋ฌธ์ ์คํ๋ง ์ปจํ
์ด๋๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค.
- ์คํ๋ง ์ปจํ
์ด๋๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ค์ ๊ตฌํ๋ ํด๋์ค์ ์์กด์ ์ ๊ฑฐํ ์ ์๊ณ ์ธํฐํ์ด์ค์๋ง ์์กดํ๋๋ก ์ค๊ณํ ์ ์๋ค.
๐ ์คํ๋ง ์ปจํ
์ด๋ ์์ฑ ๊ณผ์
- ์ด๋
ธํ
์ด์
๊ธฐ๋ฐ ์ปจํ
์ด๋ ๊ตฌ์ฑ์ ์ดํด ๋ณด๋ฉด,
- ์คํ๋ง ์ปจํ
์ด๋๋ Configuration Metadata๋ฅผ ์ฌ์ฉํ๋ค.
- ํ๋ผ๋ฏธํฐ๋ก ๋์ด์จ ์ค์ ํด๋์ค ์ ๋ณด๋ฅผ ์ฌ์ฉํด์ ์คํ๋ง Bean์ผ๋ก ๋ฑ๋กํ๋ค.
- new AnnotationConfigApplicationContext({ConfigFileName}.class)๋ก ์คํ๋ง์ ์๋ @Bean ์ด๋
ธํ
์ด์
์ด ์๋ ๋ฉ์๋๋ฅผ ๋ฑ๋กํ๋ค.
- ์คํ๋ง ์ปจํ
์ด๋๋ฅผ ๋ง๋ค์ ์๋ ๋ฐฉ๋ฒ์ ApplicationContext ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด๋ค.
- Config.class ๋ฑ์ ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ์ง์ ํ๊ณ ์๋ ํ์ผ์ ๋ง๋ค์ด ์คํ๋ง ์ปจํ
์ด๋๋ฅผ ์์ฑํด์ผํ๋ค.
- Config ํ์ผ์ ์๋ ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ํตํด ์คํ๋ง ์ปจํ
์ด๋๋ ํ์ํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฒ ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์
ํด๋์ค๋ ๊ตฌ์ฑ ๋ฉํ๋ฐ์ดํฐ์ ๊ฒฐํฉ๋์ด ApplicationContext ์์ฑ ๋ฐ ์ด๊ธฐํ ๋ ํ ์์ ํ ๊ตฌ์ฑ๋๊ณ ์คํ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์
์ด ๋๋ค.
- Bean์ ์กฐํ๋ฅผ ํ ๋ ์์๊ด๊ณ์ ์๋ ๊ฐ์ฒด์ ๋ถ๋ชจํ์
์ผ๋ก ์กฐํํ๋ฉด ์์๋ฐ์ ์์ ํ์
๋ ํจ๊ป์กฐํ ๋๋ฉฐ, Object ํ์
์ผ๋ก ์กฐํ ํ๊ฒ๋๋ฉด ๋ชจ๋ Bean์ ์กฐํํ๊ฒ ๋๋ค.
๐ย ์คํ๋ง ์ปจํ
์ด๋ย ์ข
๋ฅ
- BeanFactory
- ์คํ๋ง ์ปจํ
์ด๋์ ์ต์์ ์ธํฐํ์ด์ค๋ค.
- getBean() ๋ฉ์๋๋ฅผ ํตํด ๋น์ ์ธ์คํด์คํ ํ ์ ์๋ค.
- @Bean์ด ๋ถ์ ๋ฉ์๋ ๋ช
์ ๋น์ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํด ๋ฑ๋กํ๋ค.
- ApplicationContext
- BeanFactory์ ๊ธฐ๋ฅ์ ์์๋ฐ์ ์ ๊ณตํ๋ค.
- ๋น์ ๊ด๋ฆฌํ๊ณ ๊ฒ์ํ๋ ๊ธฐ๋ฅ์ BeanFactory๊ฐ ์ ๊ณตํ๊ณ ๊ทธ์ธ ๋ถ๊ฐ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- MessageSource : ๋ฉ์ธ์ง ๋ค๊ตญํ ์ธํฐํ์ด์ค
- EnvironmentCapable : ๊ฐ๋ฐ, ์ด์ ๋ฑ ํ๊ฒฝ๋ณ์ ๋ฑ์ผ๋ก ๋๋ ์ฒ๋ฆฌํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
๊ตฌ๋์ ํ์ํ ์ ๋ณด๋ค์ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ธํฐํ์ด์ค
- ApplicationEventPublisher : ์ด๋ฒคํธ ๊ด๋ จ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค
- ResourceLoader : ํ์ผ, ํด๋์ค ํจ์ค ์ธ๋ถ ๋ฆฌ์์ค๋ฅผ ํธ๋ฆฌํ๊ฒ ์กฐํ
๐ ์ปจํ
์ด๋ ์ธ์คํด์คํ
ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);