Home > Backend > Spring > ๐Ÿƒ[Spring] ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ(Spring Container)๋ž€?

๐Ÿƒ[Spring] ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ(Spring Container)๋ž€?
Spring Framework

๐Ÿƒ[Spring] ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ(Spring Container)๋ž€?

1๏ธโƒฃ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ(Spring Container)๋ž€?

  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ(Spring Container)๋Š” ์Šคํ”„์ผ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด๋“ค์€ ๊ด€๋ฆฌํ•˜๊ณ  ์กฐ์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ์ฒด์˜ ์ƒ์„ฑ, ์ดˆ๊ธฐํ™”, ์˜์กด์„ฑ ์ฃผ์ž…, ์„ค์ • ๋ฐ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์ž˜ ํ˜‘๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.
  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์ข…์ข… IoC(Inversion of Control) ์ปจํ…Œ์ด๋„ˆ ๋˜๋Š” DI(Dependency Injection) ์ปจํ…Œ์ด๋„ˆ ๋ผ๊ณ ๋„ ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค.

2๏ธโƒฃ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ.

  • 1. ๋นˆ(Bean) ๊ด€๋ฆฌ
    • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋นˆ(Bean)์„ ์ •์˜ํ•˜๊ณ  ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
      • ์ด ๋นˆ๋“ค์€ XML ์„ค์ • ํŒŒ์ผ, ์ž๋ฐ” ์„ค์ • ํด๋ž˜์Šค, ๋˜๋Š” ์• ๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ์ •์˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋นˆ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด(์ƒ์„ฑ, ์ดˆ๊ธฐํ™”, ์†Œ๋ฉธ)์„ ๊ด€๋ฆฌํ•˜๊ณ , ์˜์กด์„ฑ์„ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•˜์—ฌ ๋นˆ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”์–ด ์ค๋‹ˆ๋‹ค.
  • 2. ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)
    • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•˜์—ฌ, ๊ฐ์ฒด๋“ค์ด ์ง์ ‘ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
      • ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.
    • ์˜์กด์„ฑ ์ฃผ์ž…์€ ์ƒ์„ฑ์ž ์ฃผ์ž…, ์„ธํ„ฐ ์ฃผ์ž…, ํ•„๋“œ ์ฃผ์ž… ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 3. ์„ค์ • ๊ด€๋ฆฌ
    • ์ปจํ…Œ์ด๋„ˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ค์ • ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
      • ์ด๋Š” ๋นˆ์˜ ์ •์˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์„ค์ •, ๋ฉ”์‹œ์ง€ ์†Œ์Šค, ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ์„ค์ •์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  • 4. ๋ผ์ดํ”„์‚ฌ์ดํด ์ธํ„ฐํŽ˜์ด์Šค ์ง€์›
    • ์ปจํ…Œ์ด๋„ˆ๋Š” ๋นˆ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด ์ธํ„ฐํŽ˜์ด์Šค(InitializingBean, DisposableBean)์„ ํ†ตํ•ด ๋นˆ์˜ ์ดˆ๊ธฐํ™” ๋ฐ ์†Œ๋ช… ์ž‘์—…์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
    • ๋˜ํ•œ @PostConstruct, @PreDestroy ์• ๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ๋ผ์ดํ”„์‚ฌ์ดํด ์ฝœ๋ฐฑ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 5. AOP(Aspect-Oriented Programming) ์ง€์›
    • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” AOP ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์—ฌ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋ฐ˜์— ๊ฑธ์ณ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋กœ์ง(์˜ˆ: ๋กœ๊น…, ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ)์„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ชจ๋“ˆํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

3๏ธโƒฃ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์ข…๋ฅ˜.

  • ์Šคํ”„๋ง์—๋Š” ๋‹ค์–‘ํ•œ ์ปจํ…Œ์ด๋„ˆ ๊ตฌํ˜„์ฒด๊ฐ€ ์žˆ์œผ๋ฉฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ข…๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
    • 1. BeanFactory
      • ์Šคํ”„๋ง์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ปจํ…Œ์ด๋„ˆ๋กœ, ๋นˆ์˜ ๊ธฐ๋ณธ์ ์ธ ์ƒ์„ฑ๊ณผ ์˜์กด์„ฑ ์ฃผ์ž…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
        • ํ•˜์ง€๋งŒ BeanFactory๋Š” ์ง€์—ฐ ๋กœ๋”ฉ(lazy loading) ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋ฏ€๋กœ, ๋นˆ์ด ์‹ค์ œ๋กœ ์š”์ฒญ๋  ๋•Œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
    • 2. ApplicationContext
      • BeanFactory์˜ ํ™•์žฅํŒ์œผ๋กœ, ๋Œ€๋ถ€๋ถ„์˜ ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค.
      • ApplicationContext ๋Š” BeanFactory์˜ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๋ฉด์„œ๋„, ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ(์˜ˆ: ์ด๋ฒคํŠธ ๋ฐœํ–‰, ๊ตญ์ œํ™” ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ, ํ™˜๊ฒฝ ์ •๋ณด ๊ด€๋ฆฌ)์„ ์ถ”๊ฐ€๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
      • ApplicationContext ์˜ ๊ตฌํ˜„์ฒด์—๋Š” ClassPathXmlApplicationContext, FileSystemXmlApplicationContext, AnnotationConfigApplicationContext ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

4๏ธโƒฃ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ๋™์ž‘ ๊ณผ์ •.

  • 1. ๋นˆ ์ •์˜ ๋กœ๋“œ
    • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋˜๋ฉด, XML ํŒŒ์ผ, ์ž๋ฐ” ์„ค์ • ํŒŒ์ผ, ์• ๋…ธํ…Œ์ด์…˜ ๋“ฑ์„ ํ†ตํ•ด ๋นˆ์˜ ์ •์˜๋ฅผ ์ฝ์–ด๋“ค์ž…๋‹ˆ๋‹ค.
  • 2. ๋นˆ ์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐํ™”
    • ์ปจํ…Œ์ด๋„ˆ๋Š” ํ•„์š”ํ•œ ๋นˆ๋“ค์„ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐํ™” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
      • ์ด๋•Œ ์˜์กด์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ, ํ•„์š”ํ•œ ๋นˆ๋“ค์„ ๋จผ์ € ์ƒ์„ฑํ•˜์—ฌ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.
  • 3. ์˜์กด์„ฑ ์ฃผ์ž…
    • ๋นˆ์˜ ์ƒ์„ฑ ๊ณผ์ •์—์„œ ํ•„์š”ํ•œ ์˜์กด์„ฑ๋“ค์ด ์ฃผ์ž…๋ฉ๋‹ˆ๋‹ค.
      • ์ด ๊ณผ์ •์—์„œ ์ƒ์„ฑ์ž ์ฃผ์ž…, ์„ธํ„ฐ ์ฃผ์ž… ๋“ฑ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • 4. ๋นˆ ์ œ๊ณต
    • ์ปจํ…Œ์ด๋„ˆ๋Š” ์š”์ฒญ ์‹œ ๋นˆ์„ ์ œ๊ณตํ•˜๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ด ๋นˆ์„ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 5. ๋นˆ ์†Œ๋ฉธ
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ, ์ปจํ…Œ์ด๋„ˆ๋Š” ๋นˆ์˜ ์†Œ๋ฉธ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด ๋ชจ๋“  ๊ณผ์ •์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋ฉ๋‹ˆ๋‹ค.