[Spring] IoC CONTAINER

์„ฑ์žฅ์ผ๊ธฐยท2024๋…„ 8์›” 12์ผ

[SWCAMP] SPRING

๋ชฉ๋ก ๋ณด๊ธฐ
2/6

IoC & IoC Container

IoC

๐Ÿ’ก ์ œ์–ด์˜ ์—ญ์ „(IoC, Inversion of Control)์€ ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ, ํ”„๋กœ๊ทธ๋žจ์˜ ์ œ์–ด ํ๋ฆ„ ๊ตฌ์กฐ๊ฐ€ ๋’ค๋ฐ”๋€Œ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

  • โ‡’ ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ๊ด€๋ฆฌ, ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ ์ฒ˜๋ฆฌ ๋“ฑ์„ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๊ฒƒ์ด IoC์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์ด๋‹ค.

IoC Container

๐Ÿ’ก IoC Container๋Š” IoC๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌ์ฒด์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งํ•œ๋‹ค.
IoC Container๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด์˜ ์ƒ์„ฑ, ์ดˆ๊ธฐํ™”, ์˜์กด์„ฑ ์ฒ˜๋ฆฌ ๋“ฑ์„ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • โ‡’ ๋Œ€ํ‘œ์ ์ธ IoC Container๋กœ๋Š” Spring Framework์˜ ApplicationContext๊ฐ€ ์žˆ๋‹ค.

Spring IoC Container

Bean

๐Ÿ’ก Bean์€ Spring IoC Container์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ๋งํ•œ๋‹ค.

  • โ‡’ ์Šคํ”„๋ง์€ Bean์„ ์ƒ์„ฑํ•˜๊ณ , ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ์˜์กด์„ฑ ์ฃผ์ž…ํ•˜๊ณ , ์ œ๊ฑฐํ•˜๋Š” ๋“ฑ์˜ ์ผ์„ IoC Container๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

Bean Factory

๐Ÿ’ก BeanFactory๋Š” Spring IoC Container์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ˜•ํƒœ๋กœ, Bean์˜ ์ƒ์„ฑ, ์ดˆ๊ธฐํ™”, ์—ฐ๊ฒฐ, ์ œ๊ฑฐ ๋“ฑ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•œ๋‹ค.

  • โ‡’ ์ด๋ฅผ ์œ„ํ•ด Configuration Metadata๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

Configuration Metadata

๐Ÿ’ก BeanFactory๊ฐ€ IoC๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์„ค์ • ์ •๋ณด์ด๋‹ค.

  • โ‡’ ์„ค์ • ๋ฉ”ํƒ€ ์ •๋ณด๋Š” IoC ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ ๋˜๋Š” Bean ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ตฌ์„ฑํ•  ๋•Œ ์‚ฌ์šฉ ๋œ๋‹ค.

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

Application Context

๐Ÿ’ก BeanFactory๋ฅผ ํ™•์žฅํ•œ IoC ์ปจํ…Œ์ด๋„ˆ๋กœ Bean์„ ๋“ฑ๋กํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์€ BeanFactory์™€ ๋™์ผํ•˜์ง€๋งŒ ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ๊ฐ์ข… ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€๋กœ ์ œ๊ณตํ•œ๋‹ค.

  • ListableBeanFactory : BeanFactory๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ๋‹ค.
  • ApplicationEventPublisher : ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ(Event Handling) ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  • MessageSource : ๊ตญ์ œํ™”(i18n) ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  • ResourceLoader : ๋ฆฌ์†Œ์Šค ํ•ธ๋“ค๋ง(Resource Handling) ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  • GenericXmlApplicationContext : ApplicationContext๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค. XML MetaData Configuration์„ ์ฝ์–ด ์ปจํ…Œ์ด๋„ˆ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • AnnotationConfigApplicationContext : ApplicationContext๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค. Java MetaData Configuration์„ ์ฝ์–ด ์ปจํ…Œ์ด๋„ˆ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
profile
์—”์ง€๋‹ˆ์–ด๋กœ์˜ ์„ฑ์žฅ์ผ์ง€

0๊ฐœ์˜ ๋Œ“๊ธ€