๐[Spring] ์คํ๋ง ์ปจํ ์ด๋(Spring Container)๋?
1๏ธโฃ ์คํ๋ง ์ปจํ ์ด๋(Spring Container)๋?
- ์คํ๋ง ์ปจํ
์ด๋(Spring Container)๋ ์คํ์ผ ํ๋ ์์ํฌ์ ํต์ฌ ๊ตฌ์ฑ ์์๋ก, ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉ๋๋ ๊ฐ์ฒด๋ค์ ๊ด๋ฆฌํ๊ณ ์กฐ์ ํ๋ ์ญํ ์ ํฉ๋๋ค.
- ์ด ์ปจํ ์ด๋๋ ๊ฐ์ฒด์ ์์ฑ, ์ด๊ธฐํ, ์์กด์ฑ ์ฃผ์ , ์ค์ ๋ฐ ๋ผ์ดํ์ฌ์ดํด์ ๊ด๋ฆฌํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฃผ์ ์ปดํฌ๋ํธ๋ค์ด ์ ํ๋ ฅํ ์ ์๋๋ก ๋์ต๋๋ค.
- ์คํ๋ง ์ปจํ ์ด๋๋ ์ข ์ข IoC(Inversion of Control) ์ปจํ ์ด๋ ๋๋ DI(Dependency Injection) ์ปจํ ์ด๋ ๋ผ๊ณ ๋ ๋ถ๋ฆฝ๋๋ค.
2๏ธโฃ ์คํ๋ง ์ปจํ ์ด๋์ ์ฃผ์ ๊ธฐ๋ฅ.
-
1. ๋น(Bean) ๊ด๋ฆฌ
- ์คํ๋ง ์ปจํ
์ด๋๋ ์ ํ๋ฆฌ์ผ์ด์
์ ํ์ํ ๋ชจ๋ ๋น(Bean)์ ์ ์ํ๊ณ ์์ฑํฉ๋๋ค.
- ์ด ๋น๋ค์ XML ์ค์ ํ์ผ, ์๋ฐ ์ค์ ํด๋์ค, ๋๋ ์ ๋ ธํ ์ด์ ์ ํตํด ์ ์๋ ์ ์์ต๋๋ค.
- ๋น์ ๋ผ์ดํ์ฌ์ดํด(์์ฑ, ์ด๊ธฐํ, ์๋ฉธ)์ ๊ด๋ฆฌํ๊ณ , ์์กด์ฑ์ ์๋์ผ๋ก ์ฃผ์ ํ์ฌ ๋น ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ์ด ์ค๋๋ค.
- ์คํ๋ง ์ปจํ
์ด๋๋ ์ ํ๋ฆฌ์ผ์ด์
์ ํ์ํ ๋ชจ๋ ๋น(Bean)์ ์ ์ํ๊ณ ์์ฑํฉ๋๋ค.
-
2. ์์กด์ฑ ์ฃผ์
(Dependency Injection)
- ์คํ๋ง ์ปจํ
์ด๋๋ ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ์ ์๋์ผ๋ก ์ฃผ์
ํ์ฌ, ๊ฐ์ฒด๋ค์ด ์ง์ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ๊ด๋ฆฌํ์ง ์๋๋ก ํฉ๋๋ค.
- ์ด๋ฅผ ํตํด ์ฝ๋์ ์ ์ฐ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ๋์ ๋๋ค.
- ์์กด์ฑ ์ฃผ์ ์ ์์ฑ์ ์ฃผ์ , ์ธํฐ ์ฃผ์ , ํ๋ ์ฃผ์ ๋ฑ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ด๋ฃจ์ด์ง ์ ์์ต๋๋ค.
- ์คํ๋ง ์ปจํ
์ด๋๋ ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ์ ์๋์ผ๋ก ์ฃผ์
ํ์ฌ, ๊ฐ์ฒด๋ค์ด ์ง์ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ๊ด๋ฆฌํ์ง ์๋๋ก ํฉ๋๋ค.
-
3. ์ค์ ๊ด๋ฆฌ
- ์ปจํ
์ด๋๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ค์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- ์ด๋ ๋น์ ์ ์๋ฟ๋ง ์๋๋ผ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ค์ , ๋ฉ์์ง ์์ค, ํธ๋์ญ์ ๊ด๋ฆฌ ๋ฑ์ ๋ค์ํ ์ค์ ์ ํฌํจํฉ๋๋ค.
- ์ปจํ
์ด๋๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ค์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
-
4. ๋ผ์ดํ์ฌ์ดํด ์ธํฐํ์ด์ค ์ง์
- ์ปจํ
์ด๋๋ ๋น์ ๋ผ์ดํ์ฌ์ดํด ์ธํฐํ์ด์ค(
InitializingBean
,DisposableBean
)์ ํตํด ๋น์ ์ด๊ธฐํ ๋ฐ ์๋ช ์์ ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋๋ก ์ง์ํฉ๋๋ค. - ๋ํ
@PostConstruct
,@PreDestroy
์ ๋ ธํ ์ด์ ์ ํตํด ๋ผ์ดํ์ฌ์ดํด ์ฝ๋ฐฑ์ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
- ์ปจํ
์ด๋๋ ๋น์ ๋ผ์ดํ์ฌ์ดํด ์ธํฐํ์ด์ค(
-
5. AOP(Aspect-Oriented Programming) ์ง์
- ์คํ๋ง ์ปจํ ์ด๋๋ AOP ๊ธฐ๋ฅ์ ์ง์ํ์ฌ, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ ๊ฑธ์ณ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ก์ง(์: ๋ก๊น , ํธ๋์ญ์ ๊ด๋ฆฌ)์ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ถ๋ฆฌํ์ฌ ๋ชจ๋ํํ ์ ์๊ฒ ํฉ๋๋ค.
3๏ธโฃ ์คํ๋ง ์ปจํ ์ด๋์ ์ข ๋ฅ.
- ์คํ๋ง์๋ ๋ค์ํ ์ปจํ
์ด๋ ๊ตฌํ์ฒด๊ฐ ์์ผ๋ฉฐ, ๋ํ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ข
๋ฅ๊ฐ ์์ต๋๋ค.
-
1. BeanFactory
- ์คํ๋ง์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ปจํ
์ด๋๋ก, ๋น์ ๊ธฐ๋ณธ์ ์ธ ์์ฑ๊ณผ ์์กด์ฑ ์ฃผ์
์ ์ ๊ณตํฉ๋๋ค.
- ํ์ง๋ง BeanFactory๋ ์ง์ฐ ๋ก๋ฉ(lazy loading) ๋ฐฉ์์ผ๋ก ๋์ํ๋ฏ๋ก, ๋น์ด ์ค์ ๋ก ์์ฒญ๋ ๋ ์์ฑ๋ฉ๋๋ค.
- ์คํ๋ง์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ปจํ
์ด๋๋ก, ๋น์ ๊ธฐ๋ณธ์ ์ธ ์์ฑ๊ณผ ์์กด์ฑ ์ฃผ์
์ ์ ๊ณตํฉ๋๋ค.
-
2. ApplicationContext
- BeanFactory์ ํ์ฅํ์ผ๋ก, ๋๋ถ๋ถ์ ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋๋ ์ปจํ ์ด๋์ ๋๋ค.
-
ApplicationContext
๋ BeanFactory์ ๊ธฐ๋ฅ์ ํฌํจํ๋ฉด์๋, ๋ค์ํ ๊ธฐ๋ฅ(์: ์ด๋ฒคํธ ๋ฐํ, ๊ตญ์ ํ ๋ฉ์์ง ์ฒ๋ฆฌ, ํ๊ฒฝ ์ ๋ณด ๊ด๋ฆฌ)์ ์ถ๊ฐ๋ก ์ ๊ณตํฉ๋๋ค. -
ApplicationContext
์ ๊ตฌํ์ฒด์๋ClassPathXmlApplicationContext
,FileSystemXmlApplicationContext
,AnnotationConfigApplicationContext
๋ฑ์ด ์์ต๋๋ค.
-
1. BeanFactory
4๏ธโฃ ์คํ๋ง ์ปจํ ์ด๋์ ๋์ ๊ณผ์ .
-
1. ๋น ์ ์ ๋ก๋
- ์ปจํ ์ด๋๊ฐ ์์๋๋ฉด, XML ํ์ผ, ์๋ฐ ์ค์ ํ์ผ, ์ ๋ ธํ ์ด์ ๋ฑ์ ํตํด ๋น์ ์ ์๋ฅผ ์ฝ์ด๋ค์ ๋๋ค.
-
2. ๋น ์์ฑ ๋ฐ ์ด๊ธฐํ
- ์ปจํ
์ด๋๋ ํ์ํ ๋น๋ค์ ์์ฑํ๊ณ ์ด๊ธฐํ ์์
์ ์ํํฉ๋๋ค.
- ์ด๋ ์์กด์ฑ์ด ์๋ ๊ฒฝ์ฐ, ํ์ํ ๋น๋ค์ ๋จผ์ ์์ฑํ์ฌ ์ฃผ์ ํฉ๋๋ค.
- ์ปจํ
์ด๋๋ ํ์ํ ๋น๋ค์ ์์ฑํ๊ณ ์ด๊ธฐํ ์์
์ ์ํํฉ๋๋ค.
-
3. ์์กด์ฑ ์ฃผ์
- ๋น์ ์์ฑ ๊ณผ์ ์์ ํ์ํ ์์กด์ฑ๋ค์ด ์ฃผ์
๋ฉ๋๋ค.
- ์ด ๊ณผ์ ์์ ์์ฑ์ ์ฃผ์ , ์ธํฐ ์ฃผ์ ๋ฑ์ด ์ฌ์ฉ๋ฉ๋๋ค.
- ๋น์ ์์ฑ ๊ณผ์ ์์ ํ์ํ ์์กด์ฑ๋ค์ด ์ฃผ์
๋ฉ๋๋ค.
-
4. ๋น ์ ๊ณต
- ์ปจํ ์ด๋๋ ์์ฒญ ์ ๋น์ ์ ๊ณตํ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด ๋น์ ํตํด ๋ค์ํ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
-
5. ๋น ์๋ฉธ
- ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ข ๋ฃ๋๊ฑฐ๋ ์ปจํ ์ด๋๊ฐ ์ข ๋ฃ๋ ๋, ์ปจํ ์ด๋๋ ๋น์ ์๋ฉธ ์์ ์ ์ฒ๋ฆฌํฉ๋๋ค.
์คํ๋ง ์ปจํ ์ด๋๋ ์ด ๋ชจ๋ ๊ณผ์ ์ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ฉฐ, ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ ์ ์๊ฒ๋ฉ๋๋ค.