๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Spring-study๐ŸŒฑ/Spring-Basic60

Section 8-2. ์ธํ„ฐํŽ˜์ด์Šค InitializingBean, DisposableBean ์ธํ„ฐํŽ˜์ด์Šค InitializingBean, DisposableBean ์•ž์„œ ๋งŒ๋“  NetworkClient ํด๋ž˜์Šค์— InitializingBean๊ณผ DisposableBean์„ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„ํ•ด๋ณด์ž. InitializingBean์˜ ๊ตฌํ˜„๋ฉ”์„œ๋“œ afterPropertiesSet์€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ๋๋‚˜๋ฉด ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค. DisposableBean์˜ ๊ตฌํ˜„๋ฉ”์„œ๋“œ destroy๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ close๋  ๋•Œ ์Šคํ”„๋ง ๋นˆ๋“ค์ด ํ•˜๋‚˜์”ฉ ์†Œ๋ฉธ๋˜๋ฉด์„œ ํ˜ธ์ถœ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. ์ƒ์„ฑ์ž ํ˜ธ์ถœ์‹œ์—๋Š” url์ด ์กด์žฌํ•˜์ง€ ์•Š๊ณ  ์Šคํ”„๋ง ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ๋๋‚˜๋ฉด ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ(afterPropertiesSet)์™€ ์†Œ๋ฉธ ๋ฉ”์„œ๋“œ(destroy)๊ฐ€ ํ˜ธ์ถœ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ดˆ๊ธฐํ™”, .. 2022. 4. 29.
Section 8-1. ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ ์‹œ์ž‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ํ’€์ด๋‚˜, ๋„คํŠธ์›Œํฌ ์†Œ์ผ“์ฒ˜๋Ÿผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ์ ์— ํ•„์š”ํ•œ ์—ฐ๊ฒฐ์„ ๋ฏธ๋ฆฌ ํ•ด๋‘๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ ์‹œ์ ์— ์—ฐ๊ฒฐ์„ ๋ชจ๋‘ ์ข…๋ฃŒํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋ ค๋ฉด, ๊ฐ์ฒด์˜ ์ดˆ๊ธฐํ™”์™€ ์ข…๋ฃŒ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค. ์ด๋ฒˆ์‹œ๊ฐ„์—๋Š” ์Šคํ”„๋ง์„ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ์ดˆ๊ธฐํ™” ์ž‘์—…๊ณผ ์ข…๋ฃŒ ์ž‘์—…์„ ์–ด๋–ป๊ฒŒ ์ง„ํ–‰ํ•˜๋Š”์ง€ ์˜ˆ์ œ๋กœ ์•Œ์•„๋ณด์ž ๊ฐ์ฒด์˜ ์ดˆ๊ธฐํ™”์™€ ์ข…๋ฃŒ ์ž‘์—… ์˜ˆ์ œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์— ๋ฏธ๋ฆฌ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ์‹ค์ œ๋กœ ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ , ๋‹จ์ˆœํžˆ ๋ฌธ์ž๋งŒ ์ถœ๋ ฅํ•˜๋„๋ก ํ–ˆ๋‹ค. ์ด NetworkClient ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ์ ์—connect() ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์—ฐ๊ฒฐ์„ ๋งบ์–ด๋‘์–ด์•ผ ํ•˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ข…๋ฃŒ๋˜๋ฉด disConnect() ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์—ฐ๊ฒฐ์„ ๋Š์–ด์•ผ ํ•œ๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์—ฌ๊ธฐ์„œ๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ข…๋ฃŒ(c.. 2022. 4. 29.
Section 7-9. ์ž๋™, ์ˆ˜๋™์˜ ์˜ฌ๋ฐ”๋ฅธ ์‹ค๋ฌด ์šด์˜ ๊ธฐ์ค€ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์„ ํ•˜๋Š”๋ฐ ์žˆ์–ด ์ž๋™์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€์ง€ ์ˆ˜๋™์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€์ง€ ์˜ฌ๋ฐ”๋ฅธ ๊ธฐ์ค€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ํŽธ๋ฆฌํ•œ ์ž๋™ ๊ธฐ๋Šฅ์„ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜์ž ๊ทธ๋Ÿฌ๋ฉด ์–ด๋–ค ๊ฒฝ์šฐ์— ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๊ณ , ์–ด๋–ค ๊ฒฝ์šฐ์— ์„ค์ • ์ •๋ณด(AppConfig)๋ฅผ ํ†ตํ•ด์„œ ์ˆ˜๋™์œผ๋กœ ๋นˆ์„ ๋“ฑ๋กํ•˜๊ณ  ์˜์กด๊ด€๊ณ„๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ฃผ์ž…ํ•ด์•ผ ํ• ๊นŒ? ๊ฒฐ๋ก ๋ถ€ํ„ฐ ์–˜๊ธฐํ•˜๋ฉด, ์Šคํ”„๋ง์ด ๋‚˜์˜ค๊ณ  ์‹œ๊ฐ„์ด ๊ฐˆ ์ˆ˜๋ก ์ ์  ์ž๋™์„ ์„ ํ˜ธํ•˜๋Š” ์ถ”์„ธ์ด๋‹ค. ์Šคํ”„๋ง์€ @Component ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ @Controller, @Service, @Repository ์ฒ˜๋Ÿผ ๊ณ„์ธต์— ๋งž์ถ”์–ด ์ผ๋ฐ˜์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์„ ์ž๋™์œผ๋กœ ์Šค์บ”ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค. ์ถ”๊ฐ€๋กœ ์ตœ๊ทผ ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ , ์Šคํ”„๋ง ๋ถ€ํŠธ์˜ ๋‹ค์–‘ํ•œ ์Šคํ”„๋ง ๋นˆ๋“ค๋„ ์กฐ๊ฑด์ด ๋งž์œผ๋ฉด.. 2022. 4. 28.
Section 7-8. ์กฐํšŒํ•œ ๋นˆ์ด ๋ชจ๋‘ ํ•„์š”ํ•  ๋•Œ, List, Map ์˜๋„์ ์œผ๋กœ ์ •๋ง ํ•ด๋‹น ํƒ€์ž…์˜ ์Šคํ”„๋ง ๋นˆ์ด ๋‹ค ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ํ• ์ธ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ• ์ธ์˜ ์ข…๋ฅ˜(rate, fix)๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜๋ฉด ์†Œ์œ„ ๋งํ•˜๋Š” ์ „๋žต ํŒจํ„ด์„ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„์™€ ๊ฐ™์ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค. ์ „์— ๋งŒ๋“ค์–ด๋†“์•˜๋˜ AutoAppConfig๋ฅผ ํ†ตํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ์ง„ํ–‰ํ•˜์—ฌ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค.(@Component๊ฐ€ ๋ถ™์€ ํด๋ž˜์Šค ๋ชจ๋‘ ๋“ฑ๋ก) ์šฐ๋ฆฌ๊ฐ€ static์œผ๋กœ ๋งŒ๋“  ์ƒ์„ฑ์ž DiscountService๋˜ํ•œ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก์‹œํ‚ค๋Š”๋ฐ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์‹œ List์™€ Mapํ˜•ํƒœ๋กœ RateDiscountPolicy์™€ FixDiscountPolicy๋ฅผ ์ฃผ์ž…ํ•  ๊ฒƒ์ด๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ ์‹œํ‚ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด Map๊ณผ Lis.. 2022. 4. 28.
Section 7-7. ์• ๋…ธํ…Œ์ด์…˜ ์ง์ ‘ ๋งŒ๋“ค๊ธฐ @Qualifier("mainDiscountPolicy") ์ด๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์— ์ปดํŒŒ์ผ์‹œ ํƒ€์ž… ์ฒดํฌ๊ฐ€ ์•ˆ๋œ๋‹ค. ์ปดํŒŒ์ผ ์ค‘์— ์˜ค๋ฅ˜๋ฅผ ์žก์„ ์ˆ˜๊ฐ€ ์—†๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.("mainnDiscountPolicy"๋ผ๊ณ  ์˜คํƒ€๋ฅผ ๋‚ด๋„ ์ปดํŒŒ์ผ์€ ๋˜๊ณ  ๊ทธ ์ดํ›„์— Exception์ด ๋ฐœ์ƒํ•œ๋‹ค.) ์ด๋ฅผ ์• ๋…ธํ…Œ์ด์…˜์„ ์ง์ ‘ ๋งŒ๋“ค์–ด์„œ ํ•ด๊ฒฐํ•ด๋ณด์ž "mainDiscountPolicy"๋ฅผ Qualifier๋กœ ๊ฐ€์ง€๋Š” @MainDiscountPolicy๋ผ๋Š” ์• ๋…ธํ…Œ์ด์…˜์„ ์ƒ์„ฑํ•˜์˜€๋‹ค. ์ด์ œ ์šฐ๋ฆฌ๋Š” @MainDiscountPolicy๋ฅผ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๋ฐ ์œ„์™€๊ฐ™์ด ์˜คํƒ€๋ฅผ ๋ฐœ์ƒํ•˜๋ฉด ์ปดํŒŒ์ผ ์ „์— ์˜ค๋ฅ˜๋ฅผ ์žก์•„๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค. ์ด์ œ OrderServiceImpl์˜ ์ƒ์„ฑ์ž ์ฃผ์ž…์— ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ์• ๋…ธํ…Œ์ด์…˜์„ ๋„ฃ์–ด์ฃผ๋ฉด ์Šคํ”„๋ง์ด ์–ด๋–ค ํƒ€์ž…์˜.. 2022. 4. 28.