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

Spring-study๐ŸŒฑ/Spring-Basic60

Section 5-1. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์‹ฑ๊ธ€ํ†ค ์Šคํ”„๋ง์€ ํƒœ์ƒ์ด ๊ธฐ์—…์šฉ ์˜จ๋ผ์ธ ์„œ๋น„์Šค ๊ธฐ์ˆ ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ํƒ„์ƒํ–ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‹ค. ๋ฌผ๋ก  ์›น์ด ์•„๋‹Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ๋„ ์–ผ๋งˆ๋“ ์ง€ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ณดํ†ต ์—ฌ๋Ÿฌ ๊ณ ๊ฐ์ด ๋™์‹œ์— ์š”์ฒญ์„ ํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ํ• ๋•Œ ๋งˆ๋‹ค AppConfig๋Š” ์ƒˆ๋กœ์šด ๊ฐ์ฒด(memberService)๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋˜๊ณ  ๋งŽ์€ ๊ณ ๊ฐ์ด ์„œ๋น„์Šค๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ๊ณ ๊ฐ์ด 10๋ฒˆ ์š”์ฒญํ•˜๋ฉด ๊ฐ์ฒด๊ฐ€ 10๊ฐœ ์ƒ์„ฑ๋˜๋Š” ๊ตฌ์กฐ์ด๋‹ค. ์Šคํ”„๋ง ์—†๋Š” ์ˆœ์ˆ˜ํ•œ DI ์ปจํ…Œ์ด๋„ˆ ๊ฐ์ฒด์˜ ์ฐธ์กฐ๊ฐ’์„ ๋ณด๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ ๋งˆ๋‹ค JVM๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์˜ฌ๋ผ๊ฐ„๋‹ค.(๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„) ํ•ด๋‹น ์ฝ”๋“œ์—์„œ๋Š” ์‚ฌ์‹ค ๊ฐ์ฒด๊ฐ€ 4๊ฐœ๊ฐ€ ์ƒ์„ฑ๋œ ๊ฒƒ์ด๋ผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค... 2022. 4. 7.
Section 4-8. ์Šคํ”„๋ง ๋นˆ ์„ค์ • ๋ฉ”ํƒ€ ์ •๋ณด - BeanDefinition ์Šคํ”„๋ง์€ ์–ด๋–ป๊ฒŒ ์ด๋Ÿฐ ๋‹ค์–‘ํ•œ ์„ค์ • ํ˜•์‹์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ? ๊ทธ ์ค‘์‹ฌ์—๋Š” BeanDefinition ์ด๋ผ๋Š” ์ถ”์ƒํ™”๊ฐ€ ์žˆ๋‹ค. ์‰ฝ๊ฒŒ ์ด์•ผ๊ธฐํ•ด์„œ ์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ๊ฐœ๋…์ ์œผ๋กœ ๋‚˜๋ˆˆ ๊ฒƒ์ด๋‹ค! XML์„ ์ฝ์–ด์„œ BeanDefinition์„ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค. ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์ฝ์–ด์„œ BeanDefinition์„ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์ž๋ฐ” ์ฝ”๋“œ์ธ์ง€, XML์ธ์ง€ ๋ชฐ๋ผ๋„ ๋œ๋‹ค. ์˜ค์ง BeanDefinition๋งŒ ์•Œ๋ฉด ๋œ๋‹ค. BeanDefinition ์„ ๋นˆ ์„ค์ • ๋ฉ”ํƒ€์ •๋ณด๋ผ ํ•œ๋‹ค. Java์˜ @Bean , XML์˜ ๋‹น ๊ฐ๊ฐ ํ•˜๋‚˜์”ฉ ๋ฉ”ํƒ€ ์ •๋ณด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด ๋ฉ”ํƒ€์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์Šคํ”„๋ง ๋นˆ์„ ์ƒ์„ฑํ•œ๋‹ค. ์ฆ‰, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” BeanDefinition์—๋งŒ ์˜์กดํ•œ๋‹ค. AnnotationConfigApplication.. 2022. 4. 6.
Section 4-7. ๋‹ค์–‘ํ•œ ์„ค์ • ํ˜•์‹ ์ง€์› - ์ž๋ฐ” ์ฝ”๋“œ, XML ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ๋‹ค์–‘ํ•œ ํ˜•์‹์˜ ์„ค์ • ์ •๋ณด๋ฅผ ๋ฐ›์•„๋“œ๋ฆด ์ˆ˜ ์žˆ๊ฒŒ ์œ ์—ฐํ•˜๊ฒŒ ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค. java XML Groovy ๋“ฑ๋“ฑ ์ž„์˜๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ์ƒˆ๋กœ์šด ์„ค์ • ์ •๋ณด ํ˜•์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์• ๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ ์ž๋ฐ” ์ฝ”๋“œ ์„ค์ • ์‚ฌ์šฉ ์ง€๊ธˆ๊นŒ์ง€ ํ–ˆ๋˜ ๊ฒƒ์ด๋‹ค. new AnnotationConfigApplicationContext(AppConfig.class) AnnotationConfigApplicationContext ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ž๋ฐ” ์ฝ”๋“œ๋กœ๋œ ์„ค์ • ์ •๋ณด๋ฅผ ๋„˜๊ธฐ๋ฉด ๋œ๋‹ค. XML ์„ค์ • ์‚ฌ์šฉ ์ตœ๊ทผ์—๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋ฉด์„œ XML๊ธฐ๋ฐ˜์˜ ์„ค์ •์€ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์•„์ง ๋งŽ์€ ๋ ˆ๊ฑฐ์‹œ ํ”„๋กœ์ ํŠธ ๋“ค์ด XML๋กœ ๋˜์–ด ์žˆ๊ณ , ๋˜ XML์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ ์—†์ด ๋นˆ ์„ค์ • ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ๋„ ์žˆ์œผ๋ฏ€๋กœ ํ•œ๋ฒˆ์ฏค ๋ฐฐ์›Œ๋‘.. 2022. 4. 5.
Section 4-6. BeanFactory์™€ ApplicationContext beanFactory์™€ ApplicationContext์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž. BeanFactory ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์ตœ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค๋‹ค. ์Šคํ”„๋ง ๋นˆ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ์—ญํ•  ๋‹ด๋‹นํ•œ๋‹ค. getBean()์„ ์ œ๊ณตํ•œ๋‹ค. ์•ž์„œ Bean์„ ์กฐํšŒํ•˜๊ณ  ๊บผ๋‚ด๋Š” ๋“ฑ ์ง€๊ธˆ๊นŒ์ง€ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ–ˆ๋˜ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์€ BeanFactory๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ApplicationContext BeanFactory๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์ƒ์†๋ฐ›์•„ ์ œ๊ณตํ•œ๋‹ค. ๋นˆ์„ ๊ด€๋ฆฌํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ BeanFactory๊ฐ€ ์ œ๊ณตํ•ด์ฃผ๋Š”๋ฐ ๊ทธ๋Ÿผ ๋‘˜์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ? ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ๋นˆ์€ ๊ด€๋ฆฌ ๋ฐ ์กฐํšŒ ๊ธฐ๋Šฅ๊ณผ ๋”๋ถˆ์–ด ์ˆ˜ ๋งŽ์€ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค. ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ ์‹ค์ œ๋กœ ApplicationContext์— ๋“ค์–ด๊ฐ€๋ณด๋ฉด ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์žˆ๊ณ  ์ตœ์ƒ์œ„์— BeanF.. 2022. 4. 5.
Section 4-5. ์Šคํ”„๋ง ๋นˆ ์กฐํšŒ - ์ƒ์† ๊ด€๊ณ„ ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„์ธ ์ƒ์†๊ด€๊ณ„์ผ ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ์กฐํšŒํ• ๊นŒ? ๋ถ€๋ชจ ํƒ€์ž…์œผ๋กœ ์กฐํšŒํ•˜๋ฉด, ์ž์‹ ํƒ€์ž…๋„ ํ•จ๊ป˜ ์กฐํšŒ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  ์ž๋ฐ” ๊ฐ์ฒด์˜ ์ตœ๊ณ  ๋ถ€๋ชจ์ธ Objectํƒ€์ž…์œผ๋กœ ์กฐํšŒํ•˜๋ฉด ๋ชจ๋“  ์Šคํ”„๋ง ๋นˆ์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. 1. ๋ถ€๋ชจ ํƒ€์ž…์œผ๋กœ ์กฐํšŒํ•˜๊ธฐ ์ด๋ฒˆ์—๋„ static class๋กœ ์ƒˆ๋กœ์šด TestConfig๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ๋‹ค. ๊ฐ™์€ ๋ถ€๋ชจ์ธ DiscountPolicy๋ฅผ ์ƒ์†ํ•˜๊ณ  ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, ํƒ€์ž…์œผ๋กœ ์กฐํšŒํ–ˆ์„ ๋•Œ ๋‘˜ ์ด์ƒ ์žˆ์œผ๋ฏ€๋กœ ์ค‘๋ณต ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ assertThrows๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ•ด์ฃผ์—ˆ๋‹ค. 2. ๋นˆ ์ด๋ฆ„ ์ง€์ •ํ•˜์—ฌ ๋ถ€๋ชจ ํƒ€์ž…์œผ๋กœ ์กฐํšŒํ•˜๊ธฐ 3. ํŠน์ • ํ•˜์œ„ ํƒ€์ž…์œผ๋กœ ์กฐํšŒํ•˜๊ธฐ Bean์— ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š” RateDiscountPolicy๋Š” ํ•˜๋‚˜๋ฐ–์— ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๊ตฌ์ฒด์— ์˜์กดํ•˜๊ธฐ์— ๋•Œ๋ฌธ์— ์ข‹์€ ๋ฐฉ.. 2022. 4. 5.