๐Ÿ’ป ์ฝ”๋”ฉ ์ผ๊ธฐ : [Spring] '์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ(Spring Container)' ํŽธ

ybkยท2024๋…„ 4์›” 19์ผ

spring

๋ชฉ๋ก ๋ณด๊ธฐ
1/55
post-thumbnail

๐Ÿ”” '์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ(Spring Container)'์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž!


๐Ÿ’Ÿ ์ปจํ…Œ์ด๋„ˆ(container)

์ปจํ…Œ์ด๋„ˆ : ์ž๋ฐ”์˜ ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๋ถ€์˜ Bean ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•˜๋ฉฐ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

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

a ๋นˆ์€ com.example.A ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , b ๋นˆ์€ com.example.B ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด์„œ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด a ๋นˆ์„ ์ฃผ์ž…๋ฐ›์Šต๋‹ˆ๋‹ค.

์ด์™€ ๊ฐ™์ด XML ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ๋นˆ์„ ์ •์˜ํ•˜๊ณ  ๋นˆ ๊ฐ„์˜ ์˜์กด์„ฑ์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ A์™€ B ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.


์ˆ˜๋™์œผ๋กœ Bean ๋“ฑ๋ก :

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

์œ„์˜ ์ฝ”๋“œ์—์„œ BeanConfi ํด๋ž˜์Šค๋Š” @Configuration ์–ด๋…ธํ…Œ์ด์…˜์ด ์ ์šฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค๋Š” ์ˆ˜๋™์œผ๋กœ ๋นˆ์„ ๋“ฑ๋กํ•˜๋Š” ์„ค์ • ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. @Bean ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ๋ฉ”์„œ๋“œ๋“ค์€ ๊ฐ๊ฐ ๋นˆ์„ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” A์™€ B ํด๋ž˜์Šค์˜ ๋นˆ์„ ๋“ฑ๋กํ•˜์˜€์Šต๋‹ˆ๋‹ค.


์ž๋™์œผ๋กœ Bean ๋“ฑ๋ก :

  • @ComponentScan : ํ•ด๋‹น ํด๋ž˜์Šค ํŒจํ‚ค์ง€์™€ ํ•˜์œ„์˜ @Component, @Service, @Repository, @Controller ํด๋ž˜์Šค๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
    ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์ž๋™์œผ๋กœ ์Šค์บ”ํ•˜์—ฌ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๋Š”๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.
  1. @Component : ์ปดํฌ๋„ŒํŠธ ์Šค์บ”(Component Scanning)์„ ํ†ตํ•ด ๋นˆ(Bean)์œผ๋กœ ๋“ฑ๋กํ•  ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ์• ๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๋“ค์€ ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ์— ์˜ํ•ด ์ž๋™์œผ๋กœ ๊ฒ€์ƒ‰๋˜์–ด ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค.

  2. @Service: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋น„์Šค(Service) ๊ณ„์ธต์˜ ํด๋ž˜์Šค์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค๋“ค์€ ์ฃผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๊ณ  ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  3. @Controller: ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ(Controller) ํด๋ž˜์Šค์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค๋“ค์€ HTTP ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์ ์ ˆํ•œ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ๋ชจ๋ธ์„ ์กฐ์ž‘ํ•˜์—ฌ ๋ทฐ(View)์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

  4. @Repository: ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ฐ์ฒด(DAO, Data Access Object)๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค๋“ค์€ ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ๋‹ค๋ฅธ ์˜๊ตฌ ์ €์žฅ์†Œ์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

@Controller
public class Controller01 {
    
}


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


๐Ÿ’Ÿ ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฅ˜

  1. BeanFactory:
  • ์Šคํ”„๋ง์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค.
  • Bean ๊ฐ์ฒด์˜ ์ƒ์„ฑ, ์ดˆ๊ธฐํ™”, ๊ด€๋ฆฌ, ์ƒ๋ช…์ฃผ๊ธฐ(์ƒ์„ฑ~์†Œ๋ฉธ)๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

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

profile
๊ฐœ๋ฐœ์ž ์ค€๋น„์ƒ~

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