๐ SpringFramework ๋ฑ์ฅ๋ฐฐ๊ฒฝ
Framework VS Library
ํ๋ ์์ํฌ๋ ๊ท์ฐฎ์ ์์
์ ์ค์ด๊ธฐ ์ํด ๋ง๋ค์ด์ง
SpringFramework ๋ฑ์ฅ ๋ฐฐ๊ฒฝ 2
EJB๋? (Enterprisee JavaBeans)
- EJB๋ ๊ธฐ์
ํ๊ฒฝ์ ์์คํ
์ ๊ตฌํํ๊ธฐ ์ํ ์๋ฒ์ธก ์ปดํฌ๋ํธ ๋ชจ๋ธ์ด๋ค. ์ฆ, EJB๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์
๋ฌด ๋ก์ง์ ๊ฐ์ง๊ณ ์๋ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์
์ด๋ค.
- EJB ์ฌ์์ Java EE์ ์๋ฐ API ์ค ํ๋๋ก, ์ฃผ๋ก ์น ์์คํ
์์ JSP๋ ํ๋ฉด ๋ก์ง์ ์ฒ๋ฆฌํ๊ณ EJB๋ ์
๋ฌด ๋ก์ง์ ์ฒ๋ฆฌํ๋ ์ญํ ์ ํ๋ค.
EJB - ํ์ค์์์ ๋ฐ์์ด ์ด๋ ต๋ค.
- ์ฝ๋ ์์ ํ ๋ฐ์ํ๋ ๊ณผ์ ์์ฒด๊ฐ ๊ฑฐ์ฐฝํด ๊ธฐ๋ฅ์ ์ข์ง๋ง ๋ณต์กํ ์คํ์ผ๋ก ์ธํ ๊ฐ๋ฐ์ ํจ์จ์ฑ์ด ๋จ์ด์ง
SpringFramework ๋ฑ์ฅ ๋ฐฐ๊ฒฝ3
- ์น ์ฌ์ดํธ๊ฐ ์ ์ ์ปค์ง๋ฉด์ ์ํฐํ๋ผ์ด์ฆ๊ธ์ ์๋น์ค๊ฐ ํ์ํ๊ฒ ๋จ
- ์๋ฐ ์ง์์์๋ EJB๊ฐ ์ํฐํ๋ผ์ด์ฆ๊ธ ์๋น์ค๋ก ๊ฐ๊ด์ ๋ฐ๊ฒ ๋จ
- EJB ์คํ์ ์ ์๋ ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ์์ฑํ๋ฏ๋ก ๊ธฐ์กด์ ์์ฑ๋ POJO๋ฅผ ๋ณ๊ฒฝํด์ผ ํจ
- ์ปจํ
์ด๋์ ๋ฐฐํฌ๋ฅผ ํด์ผ ํ
์คํธ๊ฐ ๊ฐ๋ฅํด ๊ฐ๋ฐ ์๋๊ฐ ์ ํ๋จ
- ๋ฐฐ์ฐ๊ธฐ ์ด๋ ต๊ณ , ์ค์ ํด์ผ ํ ๋ถ๋ถ์ด ๋ง์
Rod Johnson์ด EJB๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ํฐํ๋ผ์ด์ฆ ์ดํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํจ( ์คํ๋ง์ ๋ชจํ )
- AOP๋ DI๊ฐ์ ์๋ก์ด ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ๋ก ์ผ๋ก ๊ฐ๋ฅ
- POJO๋ก ์ ์ธ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ด ๊ฐ๋ฅํด ์ง
SpringFramework ๋ฑ์ฅ ๋ฐฐ๊ฒฝ 4
์ ์ฐจ POJO + ๊ฒฝ๋ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์์
POJO (Plain Old Java Object) - ์๋ ์๋ฐ์ ๊ฐ์ฒด๋ฅผ ์ ์ง
- ํน์ ํ๋ ์์ํฌ๋ ๊ธฐ์ ์ ์์กด์ ์ด์ง ์์ ์๋ฐ ๊ฐ์ฒด
- ํน์ ๊ธฐ์ ์ ์ข
์์ ์ด์ง ์๊ธฐ ๋๋ฌธ์ ์์ฐ์ฑ, ์ด์์ฑ ํฅ์
- Plain : component interface๋ฅผ ์์๋ฐ์ง ์๋ ํน์ง (ํน์ framework์ ์ข
์๋์ง ์๋)
- Old : EJB ์ด์ ์ java class๋ฅผ ์๋ฏธ
๊ฒฝ๋ ํ๋ ์์ํฌ
- EJB๊ฐ ์ ๊ณตํ๋ ์๋น์ค๋ฅผ ์ ๊ณตํด ์ค ์ ์๋ ํ๋ ์์ํฌ ๋ฑ์ฅ
- Hibernate(JPA), JDO, myBatis, Spring
SpringFramework ๋ฑ์ฅ ๋ฐฐ๊ฒฝ 5
POJO + Framework
- EJB์๋ฒ์ ๊ฐ์ ๊ฑฐ์ฐฝํ ์ปจํ
์ด๋๊ฐ ํ์ ์๋ค.
- ์คํ ์์ค ํ๋ ์์ํฌ๋ผ ์ฌ์ฉ์ด ๋ฌด๋ฃ
- ๊ฐ์ข
๊ธฐ์
์ฉ ์ดํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ํ์ํ ์๋นํ ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ง์
์คํ๋ง ํ๋ ์์ํฌ
๋ ๋ชจ๋ ํ๋ซํผ์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- ์คํ๋ง์ ์น ๋ถ์ผ ๋ฟ๋ง์ด ์๋๋ผ ์ดํ๋ฆฌ์ผ์ด์
๋ฑ
๋ชจ๋ ๋ถ์ผ์ ์ ์ฉ์ด ๊ฐ๋ฅ
ํ ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
Spring Framework?
= ๊ฒฝ๋ํ ๋ ์๋ฃจ์
์ด๋ค.
- ๊ธฐ์กด์ ์๋ฐ์ ๋ฌด๊ฑฐ์ ๋ ๋ถ๋ถ์ ์ต์ํํจ
- JEE๋ฅผ ๋์ฒดํ๋ Framework์ด๋ค.
- DI(Dependency Injection) ๋ AOP(Aspect Oriented Programming)์ ๊ฐ์ ๊ธฐ๋ฅ๋ ์ง์ ํ๋ค.
๐ StringFramework์ ํน์ง
1) ๊ฒฝ๋์ ์ด๋ค.
์คํ๋ง์ ์ฌ๋ฌ ๊ฐ์ ๋ชจ๋๋ก ๊ตฌ์ฑ๋์ด ์๋ ๋ชจ๋์ ํ๋ ์์ํฌ์ด๋ค. ๊ฐ ๋ชจ๋์ ํ๋ ์ด์์ JAR ํ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ด ์ฌ์ด ๊ฐ๋ฐ๊ณผ ์คํ์ด ๊ฐ๋ฅํ๋ค. ๋ํ POJO(ํ๋ฒํ ์๋ ์๋ฐ ๊ฐ์ฒด, Plain Old Java Object) ํํ๋ก ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํด์ ๋จ์ํ๊ณ ๊ฐ๋ณ๋ค.
2) ์ ์ด์ ์ญํ(IoC, Inversion of Control)๊ณผ ์์กด์ฑ ์ฃผ์
(DI, Dependency Injection)
์คํ๋ง์ IoC
๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ฑํ๋ ๊ฐ์ฒด ๊ฐ์ ๋ฎ์ ๊ฒฐํฉ๋๋ฅผ ์ ์งํ๋ค. IoC๋ ๋ง ๊ทธ๋๋ก ๊ฐ๋ฐ์๊ฐ ์ง์ ์์ฑํ๊ฑฐ๋ ์ ์ดํ๋ ๊ฒ์ด ์๋ ์คํ๋ง์ Spring Bean
๋ชจ๋์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ ์ดํ๋ฉฐ ๊ด๋ฆฌํ๋ ํน์ง์ ์ ์ค๋ช
ํด์ค๋ค. (Bean ์ธ์คํด์ค๋ฅผ ์์ฑํด์ฃผ๋ ๊ณณ์ Bean Factory๋ผ๊ณ ๋ถ๋ฆฐ๋ค.)
public class TV {
private Speaker speaker;
public TV(Speaker speaker) {
this.speaker = speaker;
}
}
@Component
public class TV {
@Autowired
private Speaker speaker;
}
DI
๋ ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ์ ํฌ๊ฒ ์ค์ฌ์ค๋ค๋ ๊ฒ์์ ์๋ฏธ๊ฐ ์๋ค. ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ์ด ์ค์ด๋ ๋ค๋ ๊ฒ์ ๊ทธ๋งํผ ์ ์ง ๋ณด์๋ฅผ ํ ๋ ์์ด ๋ง์ด ๊ฐ๋ ๊ฒ์ ์ค์ฌ์ค๋ค๋ ์๋ฏธ์ด๊ธฐ๋ ํ๋ค.
3) ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ(AOP, Aspect Oriented Programming)
์คํ๋ง์ ๋น์ฆ๋์ค ๋ฉ์๋๋ฅผ ๊ฐ๋ฐํ ๋ ์ฌ์ฉํ๋ ๊ณตํต ๋ก์ง์ ์ธ๋ถ์ ๋
๋ฆฝ๋ ํด๋์ค๋ก ๋ถ๋ฆฌํ์ฌ, ํด๋น ๊ธฐ๋ฅ์ ํ๋ก๊ทธ๋จ ์ฝ๋์ ์ง์ ๋ช
์ํ์ง ์๊ณ ์ ์ธ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค. ์ด๋ก ์ธํด ์์ง๋๊ฐ ๋์ ๋น์ฆ๋์ค ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ์ ์์ผ๋ฉฐ, ์ ์ง ๋ณด์ ๋ํ ๋์ผ ์ ์๋ค. OOP์ ๋ฌธ์ ์ ๋ํ ๋ณด์ํ ์ ์๋ค.
4) ์ปจํ
์ด๋(Container)
์ปจํ
์ด๋๋ ํน์ ๊ฐ์ฒด์ ์์ฑ๊ณผ ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ๊ณ ๊ฐ์ฒด ์ด์ฉ์ ํ์ํ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๋ํ์ ์ผ๋ก Servlet๊ณผ Servlet Container๊ฐ ๊ทธ ์์ธ๋ฐ, Servlet ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ ๊ฒ Servlet Container๋ผ๋ ๋งฅ๋ฝ์์ ์คํ๋ง ๋ํ ์ ํ๋ฆฌ์ผ์ด์
์ ์ด์ฉ์ ํ์ํ ๊ฐ์ฒด์ ์์ฑ๊ณผ ์์กด ๊ด๊ณ๋ฅผ ๊ด๋ฆฌํ๋ค๋ ์ ์์ ์ผ์ข
์ ์ปจํ
์ด๋๋ผ๊ณ ํ ์ ์๋ค.
๐ StringFramework์ ๊ตฌ์กฐ
Spring ์ผ๊ฐํ
POJO
1. PSA (Portable Service Abstraction)
ํ๊ฒฝ์ ๋ณํ์ ๊ด๊ณ์์ด ์ผ๊ด๋ ๋ฐฉ์์ ๊ธฐ์ ๋ก์ ์ ๊ทผ ํ๊ฒฝ์ ์ ๊ณตํ๋ ์ถ์ํ ๊ตฌ์กฐ
๋ฅผ ๋งํจ
- ํน์ ํด๋์ค๊ฐ ์ถ์ํ๋ ์์ ํด๋์ค๋ฅผ ์ผ๊ด๋๊ฒ ๋ฐ๋ผ๋ณด๋ฉฐ ํ์ ํด๋์ค์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒ์ PSA์ ๊ธฐ๋ณธ ๊ฐ๋
์ด๋ค.
- ์ฆ
๊ธฐ์กด ์์ฑ๋ ์ฝ๋๋ฅผ ์์ ํ์ง ์์ผ๋ฉด์ ํ์ฅ ๊ฐ๋ฅ
, ์ด๋ ํน์ ๊ธฐ์ ์ ํนํ๋์ด ์์ง ์๋ ์ฝ๋์ด๋ค.
2. IoC/DI (Inversion of Control / Dependency Injection)
- IoC(์ ์ด์ ์ญํ)์ DI(์์กด์ฑ ์ฃผ์
)๋ ๋ค๋ฅธ ๊ฐ๋
IoC
๋ ํ๋ก๊ทธ๋จ ์ ์ด๊ถ์ ์ญ์ ์ํค๋ ๊ฐ๋
DI
๋ ํด๋น ๊ฐ๋
์ ๊ตฌํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋์์ธ ํจํด ์ค ํ๋๋ก, ์ด๋ฆ ๊ทธ๋๋ก ๊ฐ์ฒด์ ์์กด๊ด๊ณ๋ฅผ ์ธ๋ถ์์ ์ฃผ์
์ํค๋ ํจํด์ ๋งํ๋ค.
์ธ๋ถ์์ ๊ฐ์ฒด ๋ง๋ค์ด์ ์ค๊ฑธ ๋ด๊ฐ ๊ฐ์ ธ๋ค๊ฐ ์ฐ๋๊ฑฐ
- DI๋ ์ ์ฐํ๊ฒ ํ์ฅ ๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋๊ณ ๊ฐ์ฒด ๊ฐ์ ์์กด๊ด๊ณ๋ ์ธ๋ถ์์ ๋ค์ด๋๋ฏนํ๊ฒ ์ค์
3. AOP (Aspect Oriented Programming)
๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๋ฅผ ํตํด์ ์ํํธ์จ์ด์ ๋ชจ๋์ฑ์ ํฅ์
- ๊ณตํต ๋ชจ๋์ ์ฌ๋ฌ ์ฝ๋์ ์ฝ๊ฒ ์ ์ฉ๊ฐ๋ฅ
Spring Framework์ ๋์ ๊ณผ์
๐ IoC & DI & Container
IoC (Inversion of Control) - ์ ์ด์ ์ญํ
IoC -> ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์ ๊ฑฐ ์ฐ๋ ๊ฑฐ
IoC ๊ฐ๋
1
- ๊ฐํ ๊ฒฐํฉ์ ๋ฎ์ถ๊ธฐ ์ํด ์ธํฐํ์ด์ค ํธ์ถ ๋ฐฉ์ ์ฌ์ฉ
โ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถค (loosely-coupling) = ๋
๋ฆฝ์ ์ด๊ฒ ๋๋ค.
- ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ท๋ค๋ ๊ฒ์ ์์ชฝ ๋ค ๋ฐ๊ฟ์ผ ํ๋๊ฑธ ํ์ชฝ๋ง ๋ฐ๊ฟ๋ ๋๊ฒ ํ๊ฑฐ์
- ๊ตฌํ ํด๋์ค ๊ต์ฒด๊ฐ ์ฉ์ดํ์ฌ ๋ค์ํ ํํ๋ก ๋ณํ๊ฐ๋ฅ( ๋คํ์ฑ )
- ํ์ง๋ง ์ธํฐํ์ด์ค ๊ต์ฒด ์ ํธ์ถ ํด๋์ค๋ ์์ ํด์ผ ํจ( ๊ฐ์ฒด ์์ฑ๊ด๊ณ ์์กด์ฑ์ ์ฌ์ ํ ์กด์ฌ )
IoC ๊ฐ๋
2
- ๊ฐ์ฒด ๊ฐ์ ๊ฐํ ๊ฒฐํฉ์ Factory๋ฅผ ํตํด ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถค
- ํฉํ ๋ฆฌ ํธ์ถ ๋ฐฉ์
- ํฉํ ๋ฆฌ ๋ฐฉ์์ ํฉํ ๋ฆฌ๊ฐ ๊ตฌํ ํด๋์ค๋ฅผ ์์ฑํ๋ฏ๋ก ํด๋์ค๋ ํฉํ ๋ฆฌ๋ฅผ ํธ์ถ
- ์ธํฐํ์ด์ค ๋ณ๊ฒฝ ์ ํฉํ ๋ฆฌ๋ง ์์ ํ๋ฉด ๋จ. ํธ์ถ ํด๋์ค์๋ ์ํฅ์ ๋ฏธ์น์ง ์์
- ํ์ง๋ง ํด๋์ค์ ํฉํ ๋ฆฌ๋ฅผ ํธ์ถํ๋ ์์ค๊ฐ ๋ค์ด๊ฐ. ๊ทธ๊ฒ ์์ฒด๊ฐ ํฉํ ๋ฆฌ์ ์์กดํจ์ ์๋ฏธํ๋ค.
- ๊ฐ์ฒด ๊ฐ์ ๊ฐํ ๊ฒฐํฉ์ Assembler๋ฅผ ํตํด ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถค
- IoC ํธ์ถ ๋ฐฉ์
- ํฉํ ๋ฆฌ ํจํด์ ์ฅ์ ์ ๋ํ์ฌ ์ด๋ ํ ๊ฒ์๋ ์์กดํ์ง ์๋ ํํ๊ฐ ๋จ
- ์คํ์์ (Runtime)์ ํด๋์ค ๊ฐ์ ๊ด๊ณ๊ฐ ํ์ฑ์ด ๋จ
- Dependency Lookup - ๋ด๊ฐ ์์์ ์ฐพ์์ ์ธ๊ฒ
- Dependency Injection - ๋ ์ด์ฐจํผ ์ธ๊ฑฐ์ง? ๋ฏธ๋ฆฌ ๋ฃ์ด์ค๊ฒ(๋ด๊ฐ ์ฐพ์ ํ์๊ฐ ์๋ค)
Dependency Lookup
- Lookupํ Object๋ฅผ ํ์ํ ํ์
์ผ๋ก ๋งค๋ฒ ํ๋ณํ ํด์ค์ผํจ(๋ถํธ)
DI (Dependency Injection) - ์์กด์ฑ ์ฃผ์
Dependency Injection(DI) ์์กด์ฑ ์ฃผ์
๋ฐฉ๋ฒ๋ค
- Setter Injection (์ธํฐ ์ฃผ์
)
- Setter ๋ฉ์๋์ @Autowired ์ด๋
ธํ
์ด์
์ ๋ถ์ด๋ ๋ฐฉ๋ฒ์
๋๋ค.
- ์์ ์ ์ฃผ์
์ ์ฌ์ฉํ๋ฉด setXXX ๋ฉ์๋๋ฅผ public์ผ๋ก ์ด์ด๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ธ์ ์ด๋์๋ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค. (๋จ์ )
- Constructor Injection (์์ฑ์ ์ฃผ์
)
- ํด๋์ค์ ์์ฑ์๊ฐ ํ๋์ด๊ณ , ๊ทธ ์์ฑ์๋ก ์ฃผ์
๋ฐ์ ๊ฐ์ฒด๊ฐ ๋น์ผ๋ก ๋ฑ๋ก๋์ด ์๋ค๋ฉดย ย @Autowired๋ฅผ ์๋ต ํ ์ ์๋ค.
์กฐ๊ธ ๋ ์นํธํ๊ณ ๊ถ์ฅํจ.
- Method Injection
- Field-based injection
์คํ๋ง ์์กด์ฑ ์ฃผ์
์ฐธ๊ณ ์๋ฃ : https://ittrue.tistory.com/227
Dependency Injection(DI) ํน์ง
- Test๊ฐ ์ฉ์ดํด์ง๋ค.
- ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ฌ์ค๋ค.
- ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ(์ข
์์ฑ)์ ์ค์ด๊ฑฐ๋ ์์จ ์ ์๋ค.
- ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๋ฉด์ ์ ์ฐํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
- lookup ์ฝ๋ ์์จ๋ ๋จ, ์์ ์ด๋ฏธ ์์ผ๋ ๋ด๊บผ์ฒ๋ผ ์จ๋ ๋จ
- Object๊ฐ ์ปจํ
์ด๋์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ์ ํ์๊ฐ ์์
- Lookup ๊ด๋ จ๋ ์ฝ๋๋ค์ด Object ๋ด์์ ์ฌ๋ผ์ง
- Setter Injection๊ณผ Constructor Injection
DI ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- XML์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- Annotation ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- Java Config
Conatainer
- ๊ฐ์ฒด์ ์์ฑ, ์ฌ์ฉ, ์๋ฉธ์ ํด๋นํ๋ ๋ผ์ดํ์ฌ์ดํด์ ๋ด๋น
- ๋ผ์ดํ์ฌ์ดํด์ ๊ธฐ๋ณธ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ฌ์ฉ์ ํ์ํ ์ฃผ์ ๊ธฐ๋ฅ์ ์ ๊ณต
Container ๊ธฐ๋ฅ
- ๋ผ์ดํ์ฌ์ดํด ๊ด๋ฆฌ
- Dependency ๊ฐ์ฒด ์ ๊ณต
- Thread ๊ด๋ฆฌ
- ๊ธฐํ ์ ํ๋ฆฌ์ผ์ด์
์คํ์ ํ์ํ ํ๊ฒฝ
Container ํ์์ฑ
- ๋น์ฆ๋์ค ๋ก์ง ์ธ์ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ๋ค์ ๋ํด์๋ ๋
๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌ๋๋๋ก ํ๊ธฐ ์ํจ
- ์๋น์ค look up ์ด๋ Configuration์ ๋ํ ์ผ๊ด์ฑ์ ๊ฐ๊ธฐ ์ํจ
- ์๋น์ค ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๊ฐ๊ฐ Factory ๋๋ Signleton ํจํด์ ์ง์ ๊ตฌํํ์ง ์์๋ ๋จ
- ๊ธฐ๋ฅ์ ๊บผ๋ด ์ธ ์ ์๋ Factory๋ ์คํ๋ง์ด ์์์ ํด์ค๋ค.
- BeanFactory๋ฅผ ํ์ฅํด๋์๊ฒ ApplicationContext์ด๋ค.
BeanFactory
- Bean์ ๋ฑ๋ก, ์์ฑ, ์กฐํ, ๋ฐํ ๊ด๋ฆฌ
- ์ผ๋ฐ์ ์ผ๋ก BeanFactory๋ณด๋ค๋ ์ด๋ฅผ ํ์ฅํ ApplicationContext ์ฌ์ฉ
- getBean() method๊ฐ ์ ์๋์ด ์์
ApplicationContext (BeanFactory๋ฅผ ํ์ฅํจ)
- Bean์ ๋ฑ๋ก, ์์ฑ, ์กฐํ, ๋ฐํ ๊ด๋ฆฌ๊ธฐ๋ฅ์ BeanFactory์ ๊ฐ์
- Spring์ ๊ฐ์ข
๋ถ๊ฐ ์๋น์ค๋ฅผ ์ถ๊ฐ๋ก ์ ๊ณต
- Spring์ด ์ ๊ณตํ๋ ApplicationContext ๊ตฌํ ํด๋์ค๋ ์ฌ๋ฌ๊ฐ์ง ์ข
๋ฅ๊ฐ ์๋ค.