BackEnd๐Ÿงต

TIL - ์˜์กด๊ด€๊ณ„ ์ž๋™์ฃผ์ž…, ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ

hae02y 2023. 7. 15. 01:37
๋ฐ˜์‘ํ˜•

Lombok

lombok์—์„œ @RequiredArgConstructor > ์ž๋™์œผ๋กœ ํ•„๋“œ์— final์ด ๋ถ™์€ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑ์ž๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

ํ˜„์—…์—์„œ๋„ ๊ฑฐ์˜ ๋กฌ๋ณต์„ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

 

์กฐํšŒ bean์ด 2๊ฐœ ์ด์ƒ์ผ๋•Œ

@Autowired ๋งค์นญ ์ˆœ์„œ

Autowired๋Š” ์ฒ˜์Œ์— ํƒ€์ž…๋งค์นญ์„ ์‹œ๋„

๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ ๋นˆ์ด ์žˆ์œผ๋ฉด ์ด๋ฆ„, ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„์œผ๋กœ ๋นˆ์ด๋ฆ„์„ ์ถ”๊ฐ€ ๋งค์นญํ•œ๋‹ค.

 

@Quilifier ์‚ฌ์šฉ

์ถ”๊ฐ€ ๊ตฌ๋ถ„์ž๋ฅผ ๋ถ™์—ฌ์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๋Š”๊ฒƒ์€ ์•„๋‹˜.

@Quilifier ๋ผ๋ฆฌ ๋งค์นญ๋œ๋‹ค, ๋นˆ์ด๋ฆ„์„ ๋งค์นญ์‹œํ‚จ๋‹ค.

 

@Primary ์‚ฌ์šฉ

@Primary๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•ด์„œ ๋‹ค๋ฅธ๊ฒƒ๋“ค์„ ๋ฌด์‹œํ•˜๊ณ  ์ตœ์ƒ์œ„๋กœ ์˜์กด๊ด€๊ณ„๊ฐ€ ์ฃผ์ž…๋œ๋‹ค.

 

๋ฉ”์ธ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ์—๋Š” @Primary๋ฅผ ์ง€์ •ํ•ด์„œ ์กฐํšŒํ•˜๊ณ , ์„œ๋ธŒ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ์—๋Š” @Qualifier๋ฅผ ์ง€์ •ํ•ด์„œ ๋ช…์‹œ์ ์œผ๋กœ ํš๋“ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€๊ฐ€๋Šฅํ•˜๋‹ค.

 

์• ๋„ˆํ…Œ์ด์…˜์„ ๋งŒ๋“ค๋•Œ, ์• ๋„ˆํ…Œ์ด์…˜์—๋Š” ์ƒ์†์ด๋ผ๋Š” ๊ฐœ๋…์ด์—†๋‹ค. ์ฆ‰ ๋‚ด๊ฐ€ ์ปค์Šคํ…€์œผ๋กœ @Quilifier์„ ๋ณต์‚ฌํ•˜๊ณ  ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด์„œ ์• ๋„ˆํ…Œ์ด์…˜์„ ๋งŒ๋“ค์—ˆ์„๋•Œ  @Quilifier์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ• ์ˆ˜์žˆ๋Š”๊ฒƒ์€ ์Šคํ”„๋ง์˜ ๊ธฐ๋Šฅ์ด์ง€ ์ž๋ฐ” ์ž์ฒด์˜ ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋‹ค.

 

 

์Šคํ”„๋ง๋นˆ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด

๊ฐ์ฒด ์ƒ์„ฑ -> ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ์ˆœ์œผ๋กœ ์ผ์–ด๋‚œ๋‹ค.

์Šคํ”„๋ง๋นˆ์€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ๋‹ค ๋๋‚œ ๋‹ค์Œ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ• ์ˆ˜์žˆ๋Š” ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋œ๋‹ค.

 

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ > ์Šคํ”„๋ง ๋นˆ ์ƒ์„ฑ > ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… > ์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ > ์‚ฌ์šฉ > ์†Œ๋ฉธ์ „ ์ฝœ๋ฐฑ > ์Šคํ”„๋ง ์ข…๋ฃŒ

 

์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ : ๋นˆ์ด ์ƒ์„ฑ๋˜๊ณ  ๋นˆ์˜ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ์™„๋ฃŒ๋œ ํ›„ ํ˜ธ์ถœ

์†Œ๋ฉธ์ „ ์ฝœ๋ฐฑ : ๋นˆ์ด ์†Œ๋ฉธ๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ

 

๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์ดˆ๊ธฐํ™”๋ฅผ ๋ถ„๋ฆฌ ํ•ด์•ผํ•œ๋‹ค.

 

๋นˆ๋“ฑ๋ก, ์ดˆ๊ธฐํ™” / ์†Œ๋ฉธ

implements InitializingBean, DisposableBean

๋‹จ์ 

์Šคํ”„๋ง ์ „์šฉ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค๋ณด๋‹ˆ, ์Šคํ”„๋ง์— ์˜์กด์ ์œผ๋กœ ์„ค๊ณ„๋œ๋‹ค

์ดˆ๊ธฐํ™”, ์†Œ๋ฉธ ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ• ์ˆ˜์—†๋‹ค

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

>>> ์ง€๊ธˆ์€ ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€์•Š๋Š”๋‹ค. (์ฐพ์•„๋ณด๋ฉด 2003๋…„๋„์— ๋‚˜์˜จ๊ธฐ์ˆ )

 

@Bean(initMethod = "init",destroyMethod = "close")

2๋ฒˆ์งธ ๋ฐฉ๋ฒ•์ด๋‹ค. ๋” ์†์‰ฝ๊ฒŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๊ณ , ๋ฉ”์„œ๋“œ๋ช…์„ ๋ณ€๊ฒฝํ• ์ˆ˜์žˆ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

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

 

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

    @PostConstruct
    public void init() {
        connect();
        call("์ดˆ๊ธฐํ™” ์—ฐ๊ฒฐ ๋ฉ”์„ธ์ง€");
    }

    @PreDestroy
    public void close() {
        disconnect();
    }

๋งˆ์ง€๋ง‰ ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด๋Ÿฌํ•œ ์• ๋„ˆํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ด์„œ ๋นˆ๋“ฑ๋ก ์ดˆ๊ธฐํ™”, ์†Œ๋ฉธ ์ฝœ๋ฐฑ์„ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด ๊ฐ€์žฅ ๊ถŒ์žฅ๋œ๋‹ค.

import๋ถ€๋ถ„์„ ๋ณด๋ฉด ์•Œ์ˆ˜์žˆ๋“ฏ์ด ์Šคํ”„๋ง์— ์˜์กด๋˜์ง€์•Š๊ณ  ์ž๋ฐ” ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

์Šคํ”„๋ง์ด ์•„๋‹Œ ๋‹ค๋ฅธ์ปจํ…Œ์ด๋„ˆ์—์„œ๋„ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ณ  ์ปดํฌ๋„ŒํŠธ์Šค์บ”์—์„œ๋„ ์ž˜๋™์ž‘ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ..! ์™ธ๋ถ€๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” ์ ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค. ์ด๋•Œ๋Š” 2๋ฒˆ์งธ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

๋ฐ˜์‘ํ˜•