Spring Bean

Spring Bean์ด๋ž€?

Spring IoC ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ๋นˆ(Bean)์ด๋ผ๊ณ  ํ•œ๋‹ค

โ†’ Spring DI Container์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” POJO (Plain Old Java Object)

  • Java ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” Class๋ฅผ ์ƒ์„ฑํ•˜๊ณ  new keyword๋ฅผ ์ด์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•œ ํ›„์— ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒƒ์„,

    • Spring์—์„œ๋Š” ์ง์ ‘ new๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ, Spring์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ์ž๋ฐ” ๊ฐ์ฒด ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค

    • ์ด๋ ‡๊ฒŒ Spring์— ์˜ํ•˜์—ฌ ์ƒ์„ฑ๋˜๊ณ  ๊ด€๋ฆฌ๋˜๋Š” ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ Bean ์ด๋ผ๊ณ  ํ•œ๋‹ค

  • Spring Framework์—์„œ๋Š” Spring Bean ์„ ์–ป๊ธฐ ์œ„ํ•˜์—ฌ ApplicationContext.getBean() ์™€ ๊ฐ™์€ method๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Spring์—์„œ ์ง์ ‘ ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ์–ป์–ด์„œ ์‚ฌ์šฉํ•œ๋‹ค

Spring Bean์˜ ํŠน์ง•

  • POJO (Plain Old Java Object) ๋กœ์จ, Spring application์„ ๊ตฌ์„ฑํ•˜๋Š” ํ•ต์‹ฌ ๊ฐ์ฒด์ด๋‹ค

  • Spring IoC ์ปจํ…Œ์ด๋„ˆ (or DI ์ปจํ…Œ์ด๋„ˆ)์— ์˜ํ•ด ์ƒ์„ฑ๋˜๊ณ  ๊ด€๋ฆฌ๋œ๋‹ค

  • Spring์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Singleton ๋ฐฉ์‹์œผ๋กœ Bean์ด ์ƒ์„ฑ๋œ๋‹ค

Spring Bean์˜ ๊ตฌ์„ฑ ์š”์†Œ

  • class

    • Bean์œผ๋กœ ๋“ฑ๋กํ•  Java class

  • id

    • Bean์˜ ๊ณ ์œ  ์‹๋ณ„์ž

  • scope

    • Bean์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•

      • singleton, prototype ๋“ฑ

  • constructor-arg

    • Bean ์ƒ์„ฑ ์‹œ ์ƒ์„ฑ์ž์— ์ „๋‹ฌํ•  ํŒŒ๋ผ๋ฏธํ„ฐ

  • property

    • Bean ์ƒ์„ฑ ์‹œ setter์— ์ „๋‹ฌํ•  ์ธ์ˆ˜

Spring Bean Scope

Spring Bean Scope๋ž€?

Bean์ด ๊ด€๋ฆฌํ•˜๋Š” ๋ฒ”์œ„๋ฅผ Bean Scope๋ผ๊ณ  ํ•œ๋‹ค

  • Bean์€ default๋กœ๋Š” Singleton scope๋กœ ์ƒ์„ฑ๋œ๋‹ค

  • ํŠน์ • ํƒ€์ž…์˜ Bean์„ ํ•˜๋‚˜๋งŒ ๋งŒ๋“ค์–ด๋‘๊ณ  ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ์ธ๋ฐ,

    • ์ด๋กœ ์ธํ•ด Bean์— ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ์ฝ”๋“œ (Stateful ํ•œ ์ฝ”๋“œ)๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋™์‹œ์„ฑ ๋ฌธ์ œ ๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค

  • ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ๊ตฌํ˜„ํ•˜๋ ค๋Š” ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ ๋น„ ์‹ฑ๊ธ€ํ†ค์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ณ , ์ด๊ฒƒ์„ ๋ช…์‹œ์ ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด์„œ scope ๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค

Scope์˜ ์ข…๋ฅ˜

  • singleton scope

    • Spring framework์—์„œ ๊ธฐ๋ณธ์ด ๋˜๋Š” scope

    • Spring container์˜ ์‹œ์ž‘๋ถ€ํ„ฐ ์ข…๋ฃŒ๊นŒ์ง€ 1๊ฐœ์˜ ๊ฐ์ฒด๋กœ ์œ ์ง€๋œ๋‹ค

  • prototype scope

    @Scope("prototype") ์œผ๋กœ ์„ ์–ธํ•œ๋‹ค

    • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” Prototype Bean์˜ ์ƒ์„ฑ๊ณผ ์˜์กด ๊ด€๊ณ„ ์ฃผ์ž…๊นŒ์ง€๋งŒ ๊ด€์—ฌํ•˜๊ณ , ๋”์ด์ƒ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š” scope

    • Prototype scope๋Š” singleton๊ณผ ๋‹ฌ๋ฆฌ, ์˜์กด ๊ด€๊ณ„ ์ฃผ์ž…๊นŒ์ง€๋งŒ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— Bean์„ ๋ฐ˜ํ™˜ํ•ด ์ฃผ๋Š”๊ฑด client๊ฐ€ ์ง์ ‘ ํ•ด์•ผํ•œ๋‹ค

    • ์š”์ฒญ์ด ์˜ค๋ฉด ํ•ญ์ƒ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ดํ›„์— ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค

    • Prototype์œผ๋กœ Bean์„ ๋“ฑ๋กํ•˜๋ฉด, .getBean() ์„ ํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค

    • ์˜์กด ๊ด€๊ณ„๊นŒ์ง€๋งŒ ์ฃผ์ž…ํ•˜๊ณ  ๋ณด๋‚ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— @preDestroy ๋ฅผ ๋ณผ ์ˆ˜ ์—†๋‹ค

      • close() method๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ข…๋ฃŒํ–ˆ์„ ๋•Œ @preDestroy method๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค

    • ์ˆœ์„œ

      1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ Bean ์„ ์š”์ฒญํ•œ๋‹ค.

      2. ์Šคํ”„๋ง DI ์ปจํ…Œ์ด๋„ˆ๋Š” ์š”์ฒญ์— ๋Œ€ํ•ด ์ƒˆ๋กœ์šด Bean์„ ์ƒ์„ฑํ•œ๋‹ค.

      3. ์ƒˆ๋กœ ๋งŒ๋“  Bean์˜ ์˜์กด ๊ด€๊ณ„ ์ฃผ์ž…(DI) ์„ ํ•œ๋‹ค.

      4. @PostConstruct ์™€ ๊ฐ™์€ ์ดˆ๊ธฐํ™”์ž‘์—…์„ ์ง„ํ–‰ํ•œ๋‹ค.

      5. ์ด ์ƒ์„ฑ๋œ Bean์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ณ , ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜ํ•œ๋‹ค.

      โ†’ ์—ฌ๊ธฐ์„œ ์•Œ ์ˆ˜ ์žˆ๋Š” ์ ์€, ๊ฐ์ž ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ๋Š” ๊ฐ์ž ๋‹ค๋ฅธ ์ฐธ์กฐ๋ฅผ ๊ฐ€์ง„ ๋นˆ์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ๊ณผ @PostConstruct ๋Š” ํ˜ธ์ถœ ๋˜๊ฒ ์ง€๋งŒ @PreDestroy ๋Š” ํ˜ธ์ถœ๋˜์ง€ ์•Š์„๊ฒƒ์ด๋ž€ ์‚ฌ์‹ค์ด๋‹ค.

  • singleton scope์™€ prototype scope๊ฐ€ ์„ž์˜€์„ ๋•Œ์˜ ๋ฌธ์ œ์ 

    ์‹ฑ๊ธ€ํ†ค ๋นˆ ์•ˆ์— ์žˆ๋Š” ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์€ ์‹ฑ๊ธ€ํ†ค ๋นˆ ์˜์กด ๊ด€๊ณ„ ์ฃผ์ž… ์‹œ์ ์— ์ƒˆ๋กœ ์ƒ๊ธฐ์ง€๋งŒ, ๊ทธ ์ฐธ์กฐ๊ฐ€ ๊ณ„์† ์“ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ ์ƒ์„ฑ๋งŒ ๋˜๊ณ  ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด์™€ ํ•จ๊ป˜ ์œ ์ง€๋œ๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค

    • ์‹ฑ๊ธ€ํ†ค ๋นˆ์„ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ๋‚ด๋ถ€์˜ ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์„ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•

      • Dependency Lockup โ†’ ์˜์กด ๊ด€๊ณ„๋ฅผ ์ง์ ‘ ์ฐพ์•„์„œ ์“ฐ๊ธฐ

        • ์Šคํ”„๋ง ๋นˆ ์ปจํ…Œ์ด๋„ˆ ์ž์ฒด๋ฅผ ์˜์กด ๊ด€๊ณ„๋กœ ์ฃผ์ž… ๋ฐ›๊ณ , ํ”„๋กœํ† ํƒ€์ž… ์Šค์ฝ”ํ”„ ๋นˆ์ด ํ•„์š”ํ•  ๋•Œ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ง์ ‘ ์˜์กด ๊ด€๊ณ„ ๋นˆ์„ ์ฐพ์•„ ์“ด๋‹ค

        • ์ด๋ ‡๊ฒŒ ํ•„์š”ํ•œ ์˜์กด ๊ด€๊ณ„๋ฅผ ์ง์ ‘ ์ฐพ์•„ ์“ฐ๋Š” ๋ฐฉ๋ฒ•์„ Dependency Lockup ์ด๋ผ๊ณ  ํ•œ๋‹ค

        • ๋ฌธ์ œ์ 

          • ์ฝ”๋“œ ์ž์ฒด๊ฐ€ Spring Context ์ „์ฒด์— ์ข…์†์ ์ด๊ฒŒ ๋œ๋‹ค

          • ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค

      • ObjectProvider

        • ํ”„๋กœํ† ํƒ€์ž… ์Šค์ฝ”ํ”„ ๋นˆ์„ ์˜์กด์„ ์˜์กด๊ด€๊ณ„์— ์ฃผ์ž…ํ•˜์ง€ ์•Š๊ณ , ์•„๋ž˜์™€ ๊ฐ™์ด ํ”„๋กœํ† ํƒ€์ž… ์Šค์ฝ”ํ”„ ๋นˆ์„ ํƒ€์ž…์œผ๋กœ ๊ฐ€์ง€๋Š” ObjectProvider๋ฅผ ์˜์กด ๊ด€๊ณ„ ๋นˆ์œผ๋กœ ์ฃผ์ž…ํ•œ๋‹ค

          private ObjectProvider<PrototypeBean> prototypeBean;
        • ํ”„๋กœํ† ํƒ€์ž… ์Šค์ฝ”ํ”„ ๋นˆ์ด ํ•„์š”ํ•  ๋•Œ getObject() method๋ฅผ ํ†ตํ•ด ํ”„๋กœํ† ํƒ€์ž… ์Šค์ฝ”ํ”„ ๋นˆ์„ ์ƒˆ๋กœ ์ƒ์„ฑํ•ด ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค

  • web scope

    web ํ™˜๊ฒฝ์—์„œ๋งŒ ๋™์ž‘ํ•˜๋Š” scope

    ์Šคํ”„๋ง์—์„œ๋Š” web scope๋กœ ์„ค์ •๋œ Bean๋“ค์„ ํ•ด๋‹น scope์˜ ์ข…๋ฃŒ ์‹œ์ ๊นŒ์ง€ ๊ด€๋ฆฌํ•œ๋‹ค

    ์ข…๋ฃŒ method๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค (@PreDestroy, @PostConstruct ๋‘˜ ๋‹ค ๊ฐ€๋Šฅ)

    • request โ†’ @Scope(value = "request")

      • HTTP ์š”์ฒญ์ด ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐˆ ๋•Œ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” scope

      • ๊ฐ๊ฐ์˜ HTTP ์š”์ฒญ๋งˆ๋‹ค ๋ณ„๋„์˜ ๋นˆ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ๊ด€๋ฆฌ๋œ๋‹ค

      • web scope request๋Š” ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค ๊ฐ๊ฐ์˜ Bean์„ ์ƒ์„ฑํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค

    • session

      • HTTP Session์ด ์ƒ์„ฑ๋˜๊ณ  ์ข…๋ฃŒ๋  ๋•Œ ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” scope

    • application

      • ServletContext ์™€ ๋™์ผํ•œ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š” scope

    • websocket

      • Websocket ๊ณผ ๋™์ผํ•œ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š” scope

Spring Bean Lifecycle

Bean Lifecycle

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” Bean ๊ฐ์ฒด์˜ lifecycle์„ ๊ด€๋ฆฌํ•ด ์ฃผ๋ฉฐ, ์•„๋ž˜์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง„๋‹ค

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

  2. Bean ๊ฐ์ฒด ์ƒ์„ฑ

  3. ์˜์กด ์„ค์ •

  4. ์ดˆ๊ธฐํ™” (์ฝœ๋ฐฑ)

  5. ๋นˆ ์‚ฌ์šฉ

  6. ๋นˆ ์†Œ๋ฉธ (์†Œ๋ฉธ ์ „ ์ฝœ๋ฐฑ)

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

Spring container๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” Bean์˜ ๋ผ์ดํ”„์‚ฌ์ดํด ์ˆœ์„œ

โ†’ ๊ฐ์ฒด ์ƒ์„ฑ - ์˜์กด ์„ค์ • - ์ดˆ๊ธฐํ™” - ์†Œ๋ฉธ

  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ดˆ๊ธฐํ™” ๋  ๋•Œ, Bean ๊ฐ์ฒด๋ฅผ ์„ค์ • ์ •๋ณด์— ๋”ฐ๋ผ ์ƒ์„ฑํ•˜๊ณ , ์˜์กด ๊ด€๊ณ„ ๋ฅผ ์„ค์ •ํ•œ๋‹ค

  • ์˜์กด ์„ค์ •์ด ์™„๋ฃŒ๋˜๋ฉด, Bean ๊ฐ์ฒด๊ฐ€ ์ง€์ •ํ•œ method๋ฅผ ํ˜ธ์ถœํ•ด ์ดˆ๊ธฐํ™” ํ•œ๋‹ค

  • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋  ์‹œ Bean ๊ฐ์ฒด๊ฐ€ ์ง€์ •ํ•œ method๋ฅผ ํ˜ธ์ถœํ•ด Bean ๊ฐ์ฒด์˜ ์†Œ๋ฉธ ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค

Bean Lifecycle callback

  • Bean Lifecycle callback์ด๋ž€?

    ์Šคํ”„๋ง์€ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ์™„๋ฃŒ๋˜๋ฉด, Bean์—๊ฒŒ callback method๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐํ™” ์‹œ์  ์„ ์•Œ๋ ค์ฃผ๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

    ๋˜ํ•œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ ๋˜๊ธฐ ์ง์ „์— ์†Œ๋ฉธ callback ์„ ์ค€๋‹ค

    • ์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ

      • Bean์ด ์ƒ์„ฑ๋˜๊ณ , Bean์˜ ์˜์กด ๊ด€๊ณ„ ์ฃผ์ž…์ด ์™„๋ฃŒ๋œ ํ›„ ํ˜ธ์ถœ๋œ๋‹ค

    • ์†Œ๋ฉธ ์ „ ์ฝœ๋ฐฑ

      • Bean์ด ์†Œ๋ฉธ๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋œ๋‹ค

      • singleton bean์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ, singleton bean๋„ ๊ฐ™์ด ์ข…๋ฃŒ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋˜๊ธฐ ์ง์ „์— ์†Œ๋ฉธ ์ „ ์ฝœ๋ฐฑ ์ด ์ผ์–ด๋‚œ๋‹ค

  • ์ฝœ๋ฐฑ ์ข…๋ฅ˜

    • ์ธํ„ฐํŽ˜์ด์Šค(InitializingBean, DisposableBean)

      • โ†’ ์ž˜ ์•ˆ์“ด๋‹ค

    • ์„ค์ • ์ •๋ณด์— ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ, ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ ์ง€์ •

      • ๋นˆ ๋“ฑ๋ก ์„ค์ • ์ •๋ณด์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ดˆ๊ธฐํ™”, ์†Œ๋ฉธ ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

        @Bean(initMethod="init", destroyMethod="close")
      • ์žฅ์ 

        • method ์ด๋ฆ„์„ ์ž์œ ๋กญ๊ฒŒ ์„ค์ • ๊ฐ€๋Šฅ

        • Bean์ด ์Šคํ”„๋ง ์ฝ”๋“œ์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค

        • ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ์„ค์ • ์ •๋ณด ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๋ฅผ ๊ณ ์น  ์ˆ˜ ์—†๋Š” ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—๋„ ์ดˆ๊ธฐํ™”, ์ข…๋ฃŒ method๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

    • @PostConstruct, @PreDestroy ์• ๋…ธํ…Œ์ด์…˜ ์ง€์› โ†’ ์ œ์ผ ๋งŽ์ด ์‚ฌ์šฉ

      • ์žฅ์ 

        • ๊ฐ€์žฅ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ดˆ๊ธฐํ™”์™€ ์ข…๋ฃŒ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

          • ์ตœ์‹  ์Šคํ”„๋ง์—์„œ ๊ฐ€์žฅ ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

          • ์• ๋…ธํ…Œ์ด์…˜ ํ•˜๋‚˜๋งŒ ๋ถ™์ด๋ฉด ๋˜๋ฏ€๋กœ ๋งค์šฐ ํŽธ๋ฆฌํ•˜๋‹ค. (์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ํ•˜๊ณ  ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•  ํ•„์š”์—†๋‹ค.)

        • ์Šคํ”„๋ง์— ์ข…์†์ ์ธ ๊ธฐ์ˆ ์ด ์•„๋‹Œ ์ž๋ฐ” ํ‘œ์ค€์ด๋‹ค.

          • javax.annotation.PostConstruct

          • ๋”ฐ๋ผ์„œ ์Šคํ”„๋ง์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์—์„œ๋„ ๋™์ž‘ํ•œ๋‹ค.

        • ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž˜ ์–ด์šธ๋ฆฐ๋‹ค. (@Bean ์„ค์ •์ด ์•„๋‹ˆ๋‹ˆ๊นŒ!)

      • ๋‹จ์ 

        • ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” ์ ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค

          • ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ดˆ๊ธฐํ™”, ์ข…๋ฃŒํ•ด์•ผํ•œ๋‹ค๋ฉด @Bean์˜ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜์ž!

Last updated