๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๊ฐœ๋ฐœ

BeanFactory์™€ ApplicationContext, Configuration

Bean

์Šคํ”„๋ง ๊ณต์‹ ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฑ๋ณธ์„ ํ˜•์„ฑํ•˜๊ณ  Spring IoC ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ์ฒด๋“ค์„ Bean์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์ฆ‰, Spring IoC ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๊ณ  ์ธ์Šคํ„ด์Šคํ™”๋˜๊ณ  ์กฐ๋ฆฝ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•˜๊ฒŒ๋Š” ํ˜„์žฌ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์† ์ˆ˜๋งŽ์€ ๊ฐ์ฒด๋“ค ์ค‘ ํ•˜๋‚˜๊ฐ€ Bean์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
 

Spring IoC Container

์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ๋Š” ์ œ์–ด์˜ ์—ญ์ „(Inversion of Control, IoC) ๊ฐœ๋…์„ ๊ฐ€์ง€๋ฉฐ ์ด๋Š” Bean์„ ์ธ์Šคํ„ด์Šคํ™” ํ•˜๊ณ , ๊ตฌ์„ฑํ•˜๋ฉฐ ์กฐ๋ฆฝ(assemble)ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ค‘์—์„œ๋„ IoC์˜ ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ(Specialized form of IoC)์ธ ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection, ID)์€ ์ƒ์„ฑ์ž, ํด๋ž˜์Šค ์†์„ฑ ๋ฐ Setter, factory ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ์—์„œ Bean์œผ๋กœ ๋งŒ๋“  ๊ฐ์ฒด๋“ค์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์›ํ•˜๋Š” ๊ณณ์— ์ฃผ์ž…ํ•ด์ค๋‹ˆ๋‹ค. ์ฆ‰, IoC ์ปจํ…Œ์ด๋„ˆ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์˜ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ Bean์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ Bean๋“ค๊ฐ„์˜ ์˜์กด์„ฑ ์ฃผ์ž… ๋“ฑ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
 

https://docs.spring.io/spring-framework/reference/core/beans/basics.html

 

BeanFactory

์Šคํ”„๋ง ๋นˆ ์ปจํ…Œ์ด๋„ˆ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์ƒ๋‹จ์˜ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ์˜ ๊ทผ๊ฐ„์ด ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ผ๊ณ  ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. BeanFactory๋Š” ๋นˆ ์ƒ์„ฑ, ์ƒ๋ช… ์ฃผ๊ธฐ ๊ด€๋ฆฌ, ์˜์กด์„ฑ ์ฃผ์ž… ๋“ฑ์„ ๋‹ด๋‹นํ•˜๋ฉฐ ์ธ์Šคํ„ด์Šคํ™” ํ•  Bean์— ๋Œ€ํ•œ ์ •๋ณด, ๊ตฌ์„ฑ์š”์†Œ๋ฅผ Configuration metadata๋ฅผ ์ฝ์–ด ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. Configuration metadata๋Š” ์™ธ๋ถ€ XML ํŒŒ์ผ, Groovy ์Šคํฌ๋ฆฝํŠธ ํ˜น์€ ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•œ Configuration ํด๋ž˜์Šค, @Component ํด๋ž˜์Šค๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 

ApplicationContext

org.springframework.context.ApplicationContext ์ธํ„ฐํŽ˜์ด์Šค๋Š” BeanFactory๋ฅผ ์ƒ์†ํ•˜๋ฉฐ ์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋Œ€ํ‘œํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ์ธํ„ฐํŽ˜์ด์Šค๋„ ์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ์ด๊ธฐ์— Bean๋“ค์„ ์ธ์Šคํ„ด์Šคํ™” ํ•˜๊ณ , ์„ค์ •ํ•˜๊ณ  ์กฐ๋ฆฝํ•˜๋Š” ๊ฒƒ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€๋งŒ ๋ณด๋ฉด BeanFactory์™€ ๋ฌด์Šจ ์ฐจ์ด๊ฐ€ ์žˆ๋‚˜์‹ถ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ApplicationContext๋Š” BeanFactory์˜ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ ๋งŽ์€ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ๋“ค์„ ์ถ”๊ฐ€๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์Šคํ”„๋ง ๊ณต์‹ ๋ฌธ์„œ์—์„œ๋Š” Bean Processing์— ๋Œ€ํ•œ ์™„์ „ํ•œ ์ œ์–ด๊ฐ€ ํ•„์š”์น˜ ์•Š์œผ๋ฉด ApplicationContext๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธธ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
 

  • ์Šคํ”„๋ง AOP ๊ธฐ๋Šฅ๋“ค์˜ ์†์‰ฌ์šด ํ†ตํ•ฉ
  • ๋ฉ”์‹œ์ง€ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ (๊ตญ์ œํ™”๋ฅผ ์œ„ํ•ด)
  • ์ด๋ฒคํŠธ ๋ฐœ์ƒ์ž
  • ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ WebApplicationContext์™€ ๊ฐ™์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต ํŠน์ • Context
https://docs.spring.io/spring-framework/reference/core/beans/beanfactory.html#context-introduction-ctx-vs-beanfactory

 

Configuration Metadata

์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ๋Š” Configuration Metadata์˜ ํ˜•์‹๊ณผ ์™„์ „ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต์‹ ๋ฌธ์„œ๋Š” ์˜ค๋Š˜๋‚  ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด Java-based configuration์„ ์„ ํƒํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
 

  • Annotation-based Configuration
  • Java-based Configuration

 

Annotation-based Configuration

ํ•ด๋‹น ๊ธฐ๋Šฅ์€ Spring 2.5์— ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ ํ•„์š”ํ•œ XML ๊ตฌ์„ฑ์˜ ์–‘์„ ์ค„์ผ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋นˆ์˜ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ XML์— ์ž‘์„ฑํ•˜๋Š” ๋Œ€์‹ ์— ๊ด€๋ จ ํด๋ž˜์Šค๋‚˜ ๋ฉ”์†Œ๋“œ, ํ•„๋“œ์— ๋Œ€ํ•ด์„œ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•˜์—ฌ ๋นˆ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ Component ํด๋ž˜์Šค์— ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ ๊ฒƒ์ด ํŠน์ง•์ž…๋‹ˆ๋‹ค. ๋Œ€์‹  Spring์˜ Bean auto scan๊ณผ ๊ฐ™์€ ์š”์†Œ๋“ค์€ ์—ฌ์ „ํžˆ XML ํŒŒ์ผ์— ์ž‘์„ฑํ•ด์„œ ์•Œ๋ ค์ค˜์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 
์ด๋Ÿฌํ•œ, xml ํŒŒ์ผ์„ ์ž‘์„ฑ ํ›„ <context:component-scan base-package="ํŒจํ‚ค์ง€ ๊ฒฝ๋กœ" /> ์™€ ๊ฐ™์€ ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด Bean์œผ๋กœ ๋“ฑ๋กํ•˜๊ณ ์ž ํ•˜๋Š” ํด๋ž˜์Šค์— @Component ์–ด๋…ธํ…Œ์ด์…˜๋งŒ ๋ถ™์—ฌ๋„ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๊ฐ์ฒด๋กœ ์ƒ์„ฑํ•ด Bean์œผ๋กœ ๋“ฑ๋กํ•ด์ฃผ์—ˆ๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ์ด๋ฅผ ์™„์ „ํžˆ ๋Œ€์ฒดํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ Java-based Configuration์ž…๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ์˜ˆ์ „์— ๊น€์˜ํ•œ์”จ ๊ฐ•์˜์—์„œ ํ•œ๋ฒˆ ๋“ค์—ˆ๋˜ ๊ฒƒ ๊ฐ™์€๋ฐ ์ž˜ ๊ธฐ์–ต์€ ์•ˆ๋‚˜๋„ค์š”.
 

Java-based Configuration

์ž๋ฐ” ๊ธฐ๋ฐ˜ Configuration์€ ์Šคํ”„๋ง 3.0์— ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ @Configuration ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด Spring IoC ์ปจํ…Œ์ด๋„ˆ์— ํด๋ž˜์Šค๊ฐ€ Bean์œผ๋กœ ๋“ฑ๋ก๋˜์–ด์•ผ ํ•จ์„ ์ง์ ‘ ์ •์˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ @ComponentScan๊ณผ ๊ฐ™์€ ์–ด๋…ธํ…Œ์ด์…˜๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.