Spring์ ๋ํด ์ฒ์ ๊ณต๋ถํ๋ ์ฌ๋์ด ์ ๋ฆฌ๋ฅผ ๋ชฉ์ ์ผ๋ก ์์ฑํ ๊ธ์ ๋๋ค. ์ค๊ฐ๋ ๋ฑ ์๋ชป๋ ๋ถ๋ถ์ด ์์ ๊ฒฝ์ฐ ๋๊ธ๋ก ๊ฐ๊ฐ์์ด ์ง์ ํด์ฃผ์ธ์! ํ์ธํ๋ ๋๋ก ์ ํํ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐํด ๋น ๋ฅด๊ฒ ์์ ํ ์ ์๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ฐ์
์ด๋ฒ Spring Boot ์คํฐ๋๋ ๋ฐฐ๋ฌ์ ๋ฏผ์กฑ์ ๊น์ํ๋๊ป์ ์ธํ๋ฐ์ ์ฌ๋ ค์ฃผ์๋ ์๋ฐ ์คํ๋ง ์์ ์ ๋ณต ์๋ฆฌ์ฆ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์งํํ๋ค. ๊ทธ ์๋ฆฌ์ฆ์ ๊ฐ์ฅ ์ฒซ ๊ฐ์์ธ ์คํ๋ง ์ ๋ฌธ - ์ฝ๋๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ, ์น MVC, DB ์ ๊ทผ ๊ธฐ์ ์ ๋๋ด๊ณ , ๋ค์ ๊ฐ์์ธ ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ์ ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค.
์ด๋ฒ ํฌ์คํธ์์๋ Spring ์ปจํ ์ด๋์ Spring ๋น์ ๋ํ ๊ฒ์ ๊ฐ๋จํ ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ๋ค.
Spring ์ปจํ ์ด๋
ApplicationContext
์คํ๋ง์์๋ ApplicationContext
๋ผ๋ ๊ฒ์ Spring ์ปจํ
์ด๋๋ผ๊ณ ํ๋ค. ์ด์ธ์๋ BeanFactory
๊ฐ ์๊ธด ํ์ง๋ง, ์ด์ ๋ํด์๋ ํ์ ํ๋๋ก ํ๊ฒ ๋ค.
์ด์ ํฌ์คํธ๋ฅผ ๋ณด๋ฉด, ์ฐ๋ฆฌ๋ DriveConfig
๋ฅผ ์ฌ์ฉํด์ ์ง์ ๊ฐ์ฒด๋ฅผ ์์ฑ(new
)ํ๊ณ ๊ด๋ฆฌํ์ง๋ง, ์ด์ ๋ถํฐ๋ Spring ์ปจํ
์ด๋๋ฅผ ์ฌ์ฉํด์ ๊ด๋ฆฌํ ๊ฒ์ด๋ค. Spring ์ปจํ
์ด๋๋ @Configuration
์ด๋
ธํ
์ด์
์ด ๋ถ์ ํด๋์ค๋ฅผ ์ค์ ์ ๋ณด๋ก ์ฌ์ฉํ๋๋ฐ, ์ด ํด๋์ค์์ @Bean
์ด ๋ถ์ ๋ฉ์๋๋ฅผ ๋ชจ๋ ํธ์ถํด์ ํด๋น ๋ฉ์๋์์ ๋ฐํ๋ ๊ฐ์ฒด๋ฅผ Spring ์ปจํ
์ด๋์ ๋ฑ๋กํ๋ค. ์ด๋ ๊ฒ Spring ์ปจํ
์ด๋์ ๋ฑ๋ก๋ ๊ฐ์ฒด๋ฅผ Spring ๋น์ด๋ผ๊ณ ํ๋ค. ์ด๋ ๊ฒ ๋ฑ๋ก๋ Spring ๋น์๋ ๊ฐ์ ์ด๋ฆ์ด ์๋๋ฐ, ๊ธฐ๋ณธ์ ์ผ๋ก @Bean
์ด ๋ถ์ ๋ฉ์๋ ๋ช
์ ๋น ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ๋ค.
์ง์ Config
ํ์ผ์ ์์ฑํ์ฌ DI ์ปจํ
์ด๋๋ก ์ฌ์ฉํ ๋์๋ ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํ ๋, ์ฐ๋ฆฌ๊ฐ Config
๋ฅผ ํ์ฉํ์ฌ ์ง์ ๊ฐ์ฒด๋ฅผ ๋นผ๋ค ์ผ์ด์ผ ํ๋๋ฐ, Spring ์ปจํ
์ด๋๋ฅผ ์ฌ์ฉํ๋ฉด Spring ์ปจํ
์ด๋๋ฅผ ํตํด์ ํ์ํ Spring ๋น(๊ฐ์ฒด)๋ฅผ ์ฐพ์์ผ ํ๋ค. ์ด๋ฐ ์ํฉ์์๋ applicationContext.getBean()
๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ ํ์ํ ๋น์ ์ฐพ์์ฌ ์ ์๋ค.
์ฆ, ๊ธฐ์กด์๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ์๋ฐ ์ฝ๋๋ฅผ ์์ฑํด์ ํ์ํ ๊ฐ์ฒด๋ฅผ ์ฐพ์์์ผ ํ์ง๋ง, ์ด์ ๋ ์คํ๋ง ํ๋ ์์ํฌ์ ๊ด๋ฆฌ์ ๊ถํ์ ์์ํ๊ณ , ํ์ํ ๊ฐ์ฒด๋ฅผ ์คํ๋ง์ผ๋ก๋ถํฐ ์์ฒญํ์ฌ ์ฌ์ฉํ๋ ํํ๋ก ๋ฐ๋์๋ค. ์ผํ ๋ณด๊ธฐ์๋ ์ด๋ฐ ๋ณํ๋ ์ฝ๋๋ฅผ ์กฐ๊ธ ๋ ๋ณต์กํ๊ฒ ๋ง๋๋ ๋๋์ ์ฃผ๊ธฐ๋ ํ๋ค. ํ์ง๋ง ์คํ๋ง์ด ๋น์ ๊ด๋ฆฌํด์ฃผ๋ฉด ์ฑ๋ฅ์ ์ธ ๋ถ๋ถ์ด๋, ์ฑ๊ธํค์ผ๋ก์ ๊ด๋ฆฌ ๋ฑ ์๋ง์ ๋ถ๋ถ์ ์ฅ์ ์ด ์๊ธฐ ๋๋ฌธ์ Spring ์ปจํ ์ด๋๋ฅผ ๋์ ํ๋ ๊ฒ์ด ํฐ ์ด๋์ด ๋๋ค.
์ปจํ ์ด๋ ์์ฑ ๊ณผ์
ApplicationContext
๋ฅผ ์์ฑํ ๋์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ์ ๋ฌํด ์ฃผ์ด์ผ ํ๋๋ฐ, ์ด ๊ตฌ์ฑ ์ ๋ณด์ ํํ์๋ ์๋ฐ ์ฝ๋์ XML ํ์ผ ๋ ๊ฐ์ง ํํ๊ฐ ์๋ค. ์ต๊ทผ์๋ XML ๋ฐฉ์์ ์ ์ฐ์ง ์๊ธฐ๋ ํ๊ณ , ๋ XML ๋ฐฉ์์ ์ฝ๋๊ฐ ๋๋ฌด ์์๋ณด๊ธฐ ์ด๋ ค์ธ ์ ๋๋ก ๋ณต์กํ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์ ์ผ๋จ ์๋ฐ ์ฝ๋๋ฅผ ํตํด์ ์ค์ ํ๋ ๊ฒฝ์ฐ๋ฅผ ์์ ํ์ฌ ๊ธ์ ์จ๋ณด๋๋ก ํ๊ฒ ๋ค.
์๋ฅผ ๋ค์ด, ์ค์ ์ ๋ณด์ ์ด๋ฆ์ AppConfig
์ด๊ณ , ๋ด๋ถ์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ๋ค๊ณ ๊ฐ์ ํ์.
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
@Bean
public DiscountPolicy discountPolicy() {
return new RateDiscountPolicy();
}
}
๊ฐ์์์ ๋ค๋ฃฌ ๊ฐ๋จํ ์ฃผ๋ฌธ ๊ด๋ฆฌ ์์ ์ AppConfig
์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ํ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ด Spring ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋ค๊ณ ๊ฐ์ ํ์.
public class SampleApplication {
ApplicationContext ac = new AnnotationConfigApplitacionContext(AppConfig.class);
}
๊ทธ๋ฌ๋ฉด ๋ค์์ ๊ณผ์ ์ ๊ฑฐ์ณ์ Spring ์ปจํ ์ด๋๊ฐ ์์ฑ๋๋ค.
1. Spring ์ปจํ ์ด๋ ์์ฑ
์ผ๋จ, Spring ์ปจํ
์ด๋๋ฅผ ์์ฑํ๋ค. Spring ์ปจํ
์ด๋ ๋ด๋ถ์๋ Spring ๋น ์ ์ฅ์๊ฐ ์๋๋ฐ, ๋ง์น Map
์ ํํ๋ก ๋น ์ด๋ฆ๊ณผ ๋น ๊ฐ์ฒด๋ฅผ ๋งคํ๋์ด ์๋ ํํ์ด๋ค.
2. Spring ๋น ๋ฑ๋ก
์ด์ , ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ํ์ฉํ์ฌ ์ด ๋น ์ ์ฅ์๋ฅผ ์ฑ์ฐ๊ฒ ๋๋ค.
์ด ๋, ์ฐธ๊ณ ๋ก ๋น ์ด๋ฆ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฉ์๋์ ์ด๋ฆ์ด ๋์ง๋ง, @Bean(name="mainMemberService")
์ ๊ฐ์ด ์ง์ ์ค์ ํด์ค ์๋ ์๋ค. ์ด ๋ ์ฃผ์ํด์ค์ผ ํ ์ ์, ๋น์ ์ด๋ฆ์ ํญ์ ๋ค๋ฅธ ์ด๋ฆ์ ๋ถ์ฌํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ๋น์ ์ด๋ฆ์ด ๊ฒน์น๋ฉด ๊ธฐ์กด์ ๋ฑ๋ก๋ ๋น์ ๋ฎ์ด์จ๋ฒ๋ฆฌ๊ฑฐ๋, ์๋๋ฉด ์ต๊ทผ Spring Boot์ ๊ฒฝ์ฐ ์์ ๋น๋๊ฐ ๋์ง ์๋๋ค.
3. Spring ๋น ์์กด ๊ด๊ณ ์ค์
Spring ๋น ๋ฑ๋ก์ด ๋๋๋ฉด, ๊ฐ๋ น ์๋ ๊ทธ๋ฆผ์ฒ๋ผ Spring ์ปจํ ์ด๋์ ๋น๋ค์ด ๋ฑ๋ก๋์ด ์์ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ๋ฉ์ถ์ง ์๊ณ , Spring ๋น ์ฌ์ด์ ์์กด ๊ด๊ณ๋ฅผ ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ํตํด ํ์ธํ๊ณ ํ์ํ ์์กด ๊ด๊ณ๋ฅผ ์ฃผ์ ํด์ค๋ค.
๋จ์ํ ์๋ฐ ์ฝ๋๋ฅผ ํธ์ถํ๋ ๊ฒ ๊ฐ์ง๋ง, ์ฌ์ค ์กฐ๊ธ ๋ ๋ณต์กํ ๋ฐฉ์์ ํตํด์ ์ด๋ค์ง๋ค. ์ด๋ ํ์ ์ฑ๊ธํค ์ปจํ ์ด๋๋ฅผ ํ์ตํ๋ฉด์ ์ ๋ฆฌํ ์๊ฐ์ด๋ค.
์๋ฐํ๊ฒ๋
์ฌ์ค ์๋ฐํ๊ฒ๋ ์ด๋ ๊ฒ ๋จ๊ณ๋ณ๋ก ๋ฑ ๋ฑ ์์ ์ด ์ด๋ฃจ์ด์ง๋ ๊ฒ์ด ์๋๋ค. ์๋ฐ ์ฝ๋๋ฅผ ํตํด์ ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ์ค์ ํ๋ฉด, ์์ฑ์๋ฅผ ํธ์ถํ๋ฉด์ ์์กด ๊ด๊ณ๋ ๋ฐ๋ก๋ฐ๋ก ์ค์ ํ๊ฒ ๋๋ค. ํ์ง๋ง ๊ฐ๋ ์ ์ธ ์ดํด๋ฅผ ๋๊ธฐ ์ํด ๊ฐ์์์๋ ์์ ๊ฐ์ด ๋จ๊ณ์ ์ผ๋ก ์ค๋ช ํ์ ๊ฒ ๊ฐ๋ค. ์ถํ ์์กด ๊ด๊ณ ์๋ ์ค์ ํํธ์์ ์ด ๋ด์ฉ์ ๋ค์ ๋ค๋ฃจ๋ฉด์ ์กฐ๊ธ ๋ ์์ธํ๊ฒ ์ ๋ฆฌํ๋ค.
BeanFactory, ApplicationContext
์์์ Spring ์ปจํ
์ด๋์๋ ApplicationContext
๋ฟ ์๋๋ผ, BeanFactory
๋ ์๋ค๊ณ ํ๋ค. ์ด ๋์ ๊ด๊ณ์ ๋ํด์ ์์๋ณด์.
์ฌ์ค ๋ณ๋ค๋ฅธ ๋ถ๋ถ์ด ์๋ ๊ฒ์ ์๋๊ณ , ApplicationContext
๊ฐ BeanFactory
๋ฅผ ์์ํ์ฌ ๊ธฐ๋ฅ์ ๋ ํ์ฅํ ์ธํฐํ์ด์ค์ด๋ค. ๊ฐ๋จํ ์ ๋ฆฌํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
BeanFactory
- Spring ์ปจํ ์ด๋์ ์ต์์ ์ธํฐํ์ด์ค
- Spring ๋น์ ์กฐํํ๊ณ ๊ด๋ฆฌํ๋ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ ๋ชจ๋ ์ฌ๊ธฐ ๋ช ์๋์ด ์์
- ์๋ฅผ ๋ค์ด
getBean()
์ ๊ณต
ApplicationContext
BeanFactory
๋ฅผ ์์๋ฐ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ธBeanFactory
์ ๊ธฐ๋ฅ์ ๋ชจ๋ ์ ๊ณต- ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ธฐ ์ํ ๋น ๊ด๋ฆฌ ์ด์ธ์ ์๋ง์ ๋ถ๊ฐ ๊ธฐ๋ฅ๋ค์ ์ ๊ณต
ApplicationContext๊ฐ ์ ๊ณตํ๋ ๋ถ๊ฐ ๊ธฐ๋ฅ
- ๋ฉ์์ง ์์ค๋ฅผ ํ์ฉํ ๊ตญ์ ํ : ์ฌ์ฉ์ ๋ณ๋ก ๋ค๋ฅธ ์ธ์ด๋ฅผ ์ง์ํด์ผ ํ ๋ ํ์ํ ๊ธฐ๋ฅ
- ํ๊ฒฝ ๋ณ์ : ๋ก์ปฌ, ๊ฐ๋ฐ, ์ด์์ ๊ตฌ๋ถํ์ฌ ์ฒ๋ฆฌํ ๋ ํ์ํ ๊ธฐ๋ฅ
- ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฒคํธ : ์ด๋ฒคํธ ๋ฐ์, ๊ตฌ๋ ๋ชจ๋ธ์ ํธ๋ฆฌํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ
- ํธ๋ฆฌํ ๋ฆฌ์์ค ์กฐํ : ํ์ผ, ํด๋์คํจ์ค ๋ฑ์ ๋ฆฌ์์ค๋ฅผ ํธ๋ฆฌํ๊ฒ ์กฐํํ ์ ์๋ ๊ธฐ๋ฅ
๋ฐ๋ผ์
๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ทนํ์ผ๋ก ๋ถ์กฑํ ์๋ฒ(??? : RAM์ 640KB๋ฉด ์ถฉ๋ถํฉ๋๋ค.)๊ฐ ์๋๋ผ๋ฉด ๊ทธ๋ฅ ApplicationContext
๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ๊ตณ์ด ์ ๊ณต๋๋ ์๋ง์ ๋ถ๊ฐ ๊ธฐ๋ฅ๋ค์ ๋ง๋คํ ์ด์ ๊ฐ ์๋ค.
๋ค์์
์ด์, Spring ์ปจํ ์ด๋์ Spring ๋น์ ๋ํ ๋ด์ฉ๋ค์์ ์ค์ํ๋ค๊ณ ๋๋ ๋ถ๋ถ๋ค์ ๊ฐ๋ตํ ์ ๋ฆฌํด ๋ณด์๋ค. Spring ์ปจํ ์ด๋์ Spring ๋น์ ๋ํด ๊ต์ฅํ ๊น๊ณ , ๋ง์ ๋ด์ฉ๋ค์ด ์๊ธฐ ๋๋ฌธ์ ํด๋น ๋ด์ฉ๋ค์ ์ด๋์ ๋์ ๊ฐ๊ด, ๊ฐ์์ ํด๋นํ๋ ๋ด์ฉ์ด๋ผ๊ณ ์๊ฐํ๋ค. ์ด๋ฒ ๊ฐ์๊ฐ ๋ค ๋๋ ๋ ์ฆ์๊น์ง ์ด ๋ด์ฉ์ ๋ผ๋ก ์ผ์ ๋ ๋ง์ ์ด์ ๋ถ์ฌ๋๊ฐ์ง ์์๊น ์์๋๋ค.
๋ค์ ํฌ์คํธ์์๋ ์ฑ๊ธํค ์ปจํ ์ด๋์ ๋ํ ๋ด์ฉ์ ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ๋ค.
๋.