• [Spring] Spring Bean ์Šคํ”„๋ง ๋นˆ์ด๋ž€?

    2023. 11. 10.

    by. @leeeun

     

    ์Šคํ”„๋ง ๋นˆ(Bean)์ด๋ž€?

    • ๋นˆ์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š”, ์žฌ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์ปดํฌ๋„ŒํŠธ๋กœ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ๋œปํ•œ๋‹ค.
    • @Bean ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ๋ฉ”์„œ๋“œ๋กœ๋ถ€ํ„ฐ ๋ฐ˜ํ™˜๋œ ๊ฐ์ฒด๋ฅผ ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋กํ•œ๋‹ค.
    • ๊ธฐ์กด์˜ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ฒ˜๋Ÿผ class๋ฅผ ์ƒ์„ฑํ•˜๊ณ  New๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๊ฐ์ฒด ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹ → ์Šคํ”„๋ง์— ์˜ํ•ด ์ƒ์„ฑ๋˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ
    • IoC(์ œ์–ด์˜ ์—ญ์ „)์— ํ•ด๋‹น → ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๋ฐ ์ œ์–ด๊ถŒ์ด ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋‹Œ ์Šคํ”„๋ง์—๊ฒŒ ๋„˜์–ด๊ฐ.

     

    ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ

    • ์Šคํ”„๋ง ๋นˆ์˜ ์ƒ๋ช… ์ฃผ๊ธฐ(๊ฐ์ฒด ์ƒ์„ฑ→ ์˜์กด ์„ค์ • → ์ดˆ๊ธฐํ™” → ์‚ฌ์šฉ → ์†Œ๋ฉธ ๊ณผ์ •)๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์Šคํ”„๋ง ๋นˆ๋“ค์—๊ฒŒ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
    • ๊ฐ์ฒด๋“ค๊ฐ„์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•Œ์•„์„œ ์ƒ์„ฑํ•ด์ค€๋‹ค.

     

    ์Šคํ”„๋ง ๋นˆ์„ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก ๋ฐฉ๋ฒ•

     

    (1) ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋ฐฉ์‹

    • Component ์–ด๋…ธํ…Œ์ด์…˜(Annotation) ์ด์šฉ
    • @Component ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ๋นˆ์„ ๋“ฑ๋ก → ์Šคํ”„๋ง์ด ์–ด๋…ธํ…Œ์ด์…˜์„ ์ธ์‹ํ•˜์—ฌ ์ž์ฒด์ ์œผ๋กœ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•จ.
    • @Controller, @Service, @Repository ์–ด๋…ธํ…Œ์ด์…˜์€ @Component๋ฅผ ํฌํ•จํ•˜์—ฌ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์ž๋™ ๋“ฑ๋ก์„ ํ•ด์คŒ.

     

    ์–ด๋…ธํ…Œ์ด์…˜ ๋œป

    • @Controller
      • ์Šคํ”„๋ง MVC ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ธ์‹๋œ๋‹ค.
    • @Repository
      • ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต์œผ๋กœ ์ธ์‹ํ•˜๊ณ  ํ•ด๋‹น ๊ณ„์ธต์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋Š” ๋ชจ๋‘ DataAccessException์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
    • @Service
      • ํŠน๋ณ„ํ•œ ์ฒ˜๋ฆฌ๋Š” ํ•˜์ง€ ์•Š์œผ๋‚˜, ๊ฐœ๋ฐœ์ž๋“ค์ด ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๊ณ„์ธต์„ ์ธ์‹ํ•˜๋Š”๋ฐ ๋„์›€์„ ์ค€๋‹ค.
    • @Configuration
      • ์Šคํ”„๋ง ์„ค์ • ์ •๋ณด๋กœ ์ธ์‹ํ•˜๊ณ  ์Šคํ”„๋ง ๋นˆ์ด ์‹ฑ๊ธ€ํ†ค์„ ์œ ์ง€ํ•˜๋„๋ก ์ถ”๊ฐ€ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค. (๋ฌผ๋ก  ์Šคํ”„๋ง ๋นˆ ์Šค์ฝ”ํ”„๊ฐ€ ์‹ฑ๊ธ€ํ†ค์ด ์•„๋‹ˆ๋ผ๋ฉด ์ถ”๊ฐ€ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์Œ.)

     

    (2) Bean Configuration ํŒŒ์ผ์— ์ง์ ‘ ๋นˆ์„ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•

     

    @Configuration๊ณผ @Bean ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ์ง์ ‘ ๋นˆ์„ ๋“ฑ๋กํ•  ์ˆ˜๋„ ์žˆ์Œ.

    @Configuration → ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ์—์„œ configuration ์—ญํ• ์„ ํ•˜๋Š” class๋ฅผ ์ง€์ •

    @Bean → ํ•ด๋‹น configuration ํด๋ž˜์Šค ํ•˜์œ„์— ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๊ณ ์ž ํ•˜๋Š” ํด๋ž˜์Šค์— ๋นˆ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นˆ์œผ๋กœ ๋“ฑ๋ก

    • ApplicationContext๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋นˆ์„ ์ˆ˜๋™ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.
    • XML๋กœ ์„ค์ •ํ•˜๋Š” ๋ฐฉ์‹๋„ ์žˆ์ง€๋งŒ, ์ตœ๊ทผ์—๋Š” ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

     

     

    @Component vs @Bean

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

     

    ์Šคํ”„๋ง ์ ‘๊ทผ ๋ฐฉ๋ฒ•

    • ApplicationCotext(์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ)๋ฅผ ํ†ตํ•ด์„œ bean์— ์•ก์„ธ์Šค
    • getBean() → bean์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ ธ์˜ด

     

    ์Šคํ”„๋ง ๋นˆ ์กฐํšŒ ๋ฐฉ๋ฒ•

    • ac.getBeanDefinitionNames(); : ์Šคํ”„๋ง์— ๋“ฑ๋ก๋œ ๋ชจ๋“  ๋นˆ ์ด๋ฆ„์„ ์กฐํšŒ, ๋นˆ ๊ฐ์ฒด ์กฐํšŒ
    • ac.getBean(๋นˆ์ด๋ฆ„, ํƒ€์ž…) : ๋นˆ ์ธ์Šคํ„ด์Šค ์กฐํšŒ
    • ac.getBean(ํƒ€์ž…) : ๋นˆ ์ธ์Šคํ„ด์Šค ์กฐํšŒ(๊ฐ™์€ ํƒ€์ž…์˜ ์Šคํ”„๋ง ๋นˆ์ด ๋‘˜ ์ด์ƒ์ด๋ฉด ์˜ˆ์™ธ ๋ฐœ์ƒ)
    • ac.getBeansOfType(ํƒ€์ž…) : ํ•ด๋‹น ํƒ€์ž…์˜ ๋ชจ๋“  ๋นˆ ์กฐํšŒ

     

     

     

     

    [Spring] Spring Bean ์ด ์ •๋ฆฌ

    [Spring] ์Šคํ”„๋ง ๋นˆ(Bean)์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

    ๋Œ“๊ธ€