[Spring] Spring Container

Goghยท2023๋…„ 1์›” 2์ผ
0

Spring

๋ชฉ๋ก ๋ณด๊ธฐ
3/23

๐ŸŽฏ ๋ชฉํ‘œ :ย  Spring Container์˜ ์ดํ•ด

IoC/DI ๊ธฐ์ดˆ ๊ฐœ๋…์—์„œ IoC ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ธฐ๋ณธ์ ์ด ๋‚ด์šฉ์„ ์ •๋ฆฌ ํ–ˆ๋‹ค.

๐Ÿ“’ Spring Container

๐Ÿ“Œ ApplicationContext

Vue

  • ApplicationContext๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ํ•˜๋ฉฐ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌํ˜„๋˜์–ด์žˆ๋‹ค.
  • ๋‚ด๋ถ€์— ์กด์žฌํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ Bean ์˜ ์ƒ๋ช…์ฃผ๊ธฐ, Bean๊ฐ„์˜ ์ƒํ˜ธ ์˜์กด์„ฑ ๊ด€๋ฆฌ๋ฅผ ํ•œ๋‹ค.
  • XML, ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์˜ ์ž๋ฐ” ์„ค์ • ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค์ˆ˜ ์žˆ๋‹ค.
  • ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค
    • ์„œ๋กœ ๋‹ค๋ฅธ Bean์„ ์—ฐ๊ฒฐํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ Bean์„ ์—ฐ๊ฒฐํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
    • ๊ฐœ๋ฐœ์ž๋Š” ๋ชจ๋“ˆ๊ฐ„์˜ ์˜์กด ๋ฐ ๊ฒฐํ•ฉ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋กœ ๋ถ€ํ„ฐ ์ž์œ ๋กญ๋‹ค.
    • ๋ฉ”์†Œ๋“œ๊ฐ€ ์–ธ์ œ ์–ด๋””์„œ ํ˜ธ์ถœ๋˜์–ด์•ผํ•˜๋Š”์ง€, ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ค€๋น„ํ•ด์„œ ์ „๋‹ฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ“Œ WHY Spring Container?

  • ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด new ํ‚ค์›Œ๋“œ๋ฅผ ์จ์•ผ ํ–ˆ์—ˆ๋Š”๋ฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ด๋Ÿฌํ•œ ๊ฐ์ฒด๊ฐ€ ์•„์ฃผ ๋งŽ์ด ์กด์žฌํ•˜๊ณ  ์„œ๋กœ ์ฐธ์กฐํ•˜๊ฒŒ ๋˜์–ด์ง„๋‹ค.
  • ์œ„ ๊ฒฝ์šฐ ์ฐธ์กฐ๊ฐ€ ์‹ฌํ• ์ˆ˜๋ก ์˜์กด์„ฑ์€ ๋†’์•„์ง€๋ฉฐ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„์™€ ๋†’์€ ์บก์Šํ™”๋ฅผ ์ง€ํ–ฅํ•˜๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•ต์‹ฌ๊ณผ ๋ฒ—์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์‹ค์ œ ๊ตฌํ˜„๋œ ํด๋ž˜์Šค์— ์˜์กด์„ ์ œ๊ฑฐํ• ์ˆ˜ ์žˆ๊ณ  ์ธํ„ฐํŽ˜์ด์Šค์—๋งŒ ์˜์กดํ•˜๋„๋ก ์„ค๊ณ„ํ• ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ๊ณผ์ •

Vue

  • ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ ์ปจํ…Œ์ด๋„ˆ ๊ตฌ์„ฑ์„ ์‚ดํŽด ๋ณด๋ฉด,
  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” Configuration Metadata๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜์–ด์˜จ ์„ค์ • ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์Šคํ”„๋ง Bean์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค.
  • new AnnotationConfigApplicationContext({ConfigFileName}.class)๋กœ ์Šคํ”„๋ง์— ์žˆ๋Š” @Bean ์–ด๋…ธํ…Œ์ด์…˜์ด ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๋“ฑ๋กํ•œ๋‹ค.
  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ApplicationContext ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
    • Config.class ๋“ฑ์˜ ๊ตฌ์„ฑ ์ •๋ณด๋ฅผ ์ง€์ •ํ•˜๊ณ  ์žˆ๋Š” ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•œ๋‹ค.
    • Config ํŒŒ์ผ์— ์žˆ๋Š” ๊ตฌ์„ฑ ์ •๋ณด๋ฅผ ํ†ตํ•ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํด๋ž˜์Šค๋Š” ๊ตฌ์„ฑ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ๊ฒฐํ•ฉ๋˜์–ด ApplicationContext ์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐํ™” ๋œ ํ›„ ์™„์ „ํžˆ ๊ตฌ์„ฑ๋˜๊ณ  ์‹คํ–‰๊ฐ€๋Šฅํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋œ๋‹ค.
  • Bean์˜ ์กฐํšŒ๋ฅผ ํ• ๋•Œ ์ƒ์†๊ด€๊ณ„์— ์žˆ๋Š” ๊ฐ์ฒด์˜ ๋ถ€๋ชจํƒ€์ž…์œผ๋กœ ์กฐํšŒํ•˜๋ฉด ์ƒ์†๋ฐ›์€ ์ž์‹ ํƒ€์ž…๋„ ํ•จ๊ป˜์กฐํšŒ ๋˜๋ฉฐ, Object ํƒ€์ž…์œผ๋กœ ์กฐํšŒ ํ•˜๊ฒŒ๋˜๋ฉด ๋ชจ๋“  Bean์„ ์กฐํšŒํ•˜๊ฒŒ ๋œ๋‹ค.

๐Ÿ“Œย ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆย ์ข…๋ฅ˜

  • BeanFactory
    • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์ตœ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค๋‹ค.
    • getBean() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๋นˆ์„ ์ธ์Šคํ„ด์Šคํ™” ํ• ์ˆ˜ ์žˆ๋‹ค.
    • @Bean์ด ๋ถ™์€ ๋ฉ”์†Œ๋“œ ๋ช…์„ ๋นˆ์˜ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•ด ๋“ฑ๋กํ•œ๋‹ค.
  • ApplicationContext
    • BeanFactory์˜ ๊ธฐ๋Šฅ์„ ์ƒ์†๋ฐ›์•„ ์ œ๊ณตํ•œ๋‹ค.
    • ๋นˆ์„ ๊ด€๋ฆฌํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ BeanFactory๊ฐ€ ์ œ๊ณตํ•˜๊ณ  ๊ทธ์™ธ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
      • MessageSource : ๋ฉ”์„ธ์ง€ ๋‹ค๊ตญํ™” ์ธํ„ฐํŽ˜์ด์Šค
      • EnvironmentCapable : ๊ฐœ๋ฐœ, ์šด์˜ ๋“ฑ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋“ฑ์œผ๋กœ ๋‚˜๋ˆ  ์ฒ˜๋ฆฌํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ๋™์‹œ ํ•„์š”ํ•œ ์ •๋ณด๋“ค์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค
      • ApplicationEventPublisher : ์ด๋ฒคํŠธ ๊ด€๋ จ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค
      • ResourceLoader : ํŒŒ์ผ, ํด๋ž˜์Šค ํŒจ์Šค ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์กฐํšŒ

๐Ÿ‘‰ ์ปจํ…Œ์ด๋„ˆ ์ธ์Šคํ„ด์Šคํ™”

// Annotation
ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
profile
์ปดํ“จํ„ฐ๊ฐ€ ํ• ์ผ์€ ์ปดํ“จํ„ฐ๊ฐ€

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