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

spring43

[Spring] ๊ฐ„๋‹จํ•œ ์‡ผํ•‘๋ชฐ ์˜ˆ์ œ ๋„๋ฉ”์ธ ์„ค๊ณ„ ํšŒ์› ๊ธฐ๋Šฅ ํšŒ์› ๋“ฑ๋ก ํšŒ์› ์กฐํšŒ ์ƒํ’ˆ ๊ธฐ๋Šฅ ์ƒํ’ˆ ๋“ฑ๋ก ์ƒํ’ˆ ์ˆ˜์ • ์ƒํ’ˆ ์กฐํšŒ ์ฃผ๋ฌธ ๊ธฐ๋Šฅ ์ƒํ’ˆ ์ฃผ๋ฌธ ์ฃผ๋ฌธ ๋‚ด์—ญ ์กฐํšŒ ์ฃผ๋ฌธ ์ทจ์†Œ ๊ธฐํƒ€ ์š”๊ตฌ์‚ฌํ•ญ ์ƒํ’ˆ์˜ ์žฌ๊ณ  ๊ด€๋ฆฌ ์ƒํ’ˆ ์ข…๋ฅ˜๋กœ๋Š” ๋„์„œ, ์Œ๋ฐ˜, ์˜ํ™” (์นดํ…Œ๊ณ ๋ฆฌ) ์ƒํ’ˆ ์ฃผ๋ฌธ์‹œ ๋ฐฐ์†ก ์ •๋ณด ์ž…๋ ฅ ๋„๋ฉ”์ธ ๋ชจ๋ธ๊ณผ ํ…Œ์ด๋ธ” ์„ค๊ณ„ ํšŒ์›, ์ฃผ๋ฌธ, ์ƒํ’ˆ์˜ ๊ด€๊ณ„ : ํšŒ์›์€ ์—ฌ๋Ÿฌ ์ƒํ’ˆ ์ฃผ๋ฌธ ๊ฐ€๋Šฅ (์ฃผ๋ฌธ ↔๏ธ ์ƒํ’ˆ ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„) ํ•˜์ง€๋งŒ ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—”ํ‹ฐํ‹ฐ์—์„œ ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์ฃผ๋ฌธ ์ƒํ’ˆ์ด๋ผ๋Š” ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์ผ๋Œ€๋‹ค, ๋‹ค๋Œ€์ผ ๊ด€๊ณ„๋กœ ํ’€์–ด๋‚ธ๋‹ค. ์ƒํ’ˆ ๋ถ„๋ฅ˜ : ๋„์„œ, ์Œ๋ฐ˜, ์˜ํ™”๋Š” ์ƒํ’ˆ์ด๋ผ๋Š” ๊ณตํ†ต ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ƒ์† ๊ตฌ์กฐ๋กœ ํ‘œํ˜„ํ•œ๋‹ค. ํšŒ์›(Member): ์ด๋ฆ„๊ณผ ์ž„๋ฒ ๋””๋“œ ํƒ€์ž…์ธ ์ฃผ์†Œ(Address), ๊ทธ๋ฆฌ๊ณ  ์ฃผ๋ฌธ(orders) ๋ฆฌ์ŠคํŠธ.. 2023. 7. 23.
Spring - ๋นˆ ์Šค์ฝ”ํ”„ ๋นˆ ์Šค์ฝ”ํ”„๋ž€ ? ์Šคํ”„๋ง ๋นˆ์ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์‹œ์ž‘๊ณผ ํ•จ๊ป˜ ์ƒ์„ฑ๋˜์–ด์„œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ๊นŒ์ง€ ์œ ์ง€๋œ๋‹ค๊ณ  ํ•™์Šตํ–ˆ๋‹ค. ์ด๋Š” ์Šคํ”„๋ง ๋นˆ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ํ†ค ์Šค์ฝ”ํ”„๋กœ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์Šค์ฝ”ํ”„๋Š” ๋นˆ์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ๋œปํ•œ๋‹ค. ์Šคํ”„๋ง์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์Šค์ฝ”ํ”„๋ฅผ ์ง€์›ํ•œ๋‹ค. ์‹ฑ๊ธ€ํ†ค :๊ธฐ๋ณธ ์Šค์ฝ”ํ”„, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์‹œ์ž‘๊ณผ ์ข…๋ฃŒ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ๊ฐ€์žฅ ๋„“์€ ๋ฒ”์œ„์˜ ์Šค์ฝ”ํ”„์ด๋‹ค. ํ”„๋กœํ† ํƒ€์ž… :์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์˜ ์ƒ์„ฑ๊ณผ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…๊นŒ์ง€๋งŒ ๊ด€์—ฌํ•˜๊ณ  ๋”๋Š” ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š” ๋งค์šฐ ์งง์€ ๋ฒ”์œ„์˜ ์Šค์ฝ”ํ”„์ด๋‹ค. ์›น ๊ด€๋ จ ์Šค์ฝ”ํ”„ : request: ์›น ์š”์ฒญ์ด ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐˆ๋•Œ ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ์Šค์ฝ”ํ”„์ด๋‹ค. session: ์›น ์„ธ์…˜์ด ์ƒ์„ฑ๋˜๊ณ  ์ข…๋ฃŒ๋  ๋•Œ ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ์Šค์ฝ”ํ”„์ด๋‹ค. application: ์›น์˜ ์„œ๋ธ”๋ฆฟ .. 2023. 7. 17.
Spring - ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ํ’€์ด๋‚˜, ๋„คํŠธ์›Œํฌ ์†Œ์ผ“์ฒ˜๋Ÿผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ์ ์— ํ•„์š”ํ•œ ์—ฐ๊ฒฐ์„ ๋ฏธ๋ฆฌ ํ•ด๋‘๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ ์‹œ์ ์— ์—ฐ๊ฒฐ์„ ๋ชจ๋‘ ์ข…๋ฃŒํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋ ค๋ฉด, ๊ฐ์ฒด์˜ ์ดˆ๊ธฐํ™”์™€ ์ข…๋ฃŒ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค. ์Šคํ”„๋ง ๋นˆ์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๊ฐ€์ง„๋‹ค. ๊ฐ์ฒด ์ƒ์„ฑ โžก๏ธ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ์Šคํ”„๋ง ๋นˆ์€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ๋‹ค ๋๋‚œ ๋‹ค์Œ์—์•ผ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ดˆ๊ธฐํ™” ์ž‘์—…์€ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ๋ชจ๋‘ ์™„๋ฃŒ๋˜๊ณ  ๋‚œ ๋‹ค์Œ์— ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ๋ชจ๋‘ ์™„๋ฃŒ๋œ ์‹œ์ ์„ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์„๊นŒ? ์Šคํ”„๋ง์€ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ์™„๋ฃŒ๋˜๋ฉด ์Šคํ”„๋ง ๋นˆ์—๊ฒŒ ์ฝœ๋ฐฑ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์ดˆ๊ธฐํ™” ์‹œ์ ์„ ์•Œ๋ ค์ฃผ๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ๋˜ํ•œ ์Šคํ”„๋ง์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ .. 2023. 7. 16.
Spring - ์ž๋™๊ณผ ์ˆ˜๋™ ์ฃผ์ž…์˜ ์˜ฌ๋ฐ”๋ฅธ ์šด์˜ ๊ธฐ์ค€ ์ž๋™ ์ฃผ์ž… ๊ธฐ๋Šฅ ๋งค์šฐ ํŽธ๋ฆฌํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์–ด๋–ค ๊ฒฝ์šฐ์— ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๊ณ , ์–ด๋–ค ๊ฒฝ์šฐ์— ์„ค์ • ์ •๋ณด๋ฅผ ํ†ตํ•ด์„œ ์ˆ˜๋™์œผ๋กœ ๋นˆ์„ ๋“ฑ๋กํ•˜๊ณ , ์˜์กด๊ด€๊ณ„๋„ ์ˆ˜๋™์œผ๋กœ ์ฃผ์ž…ํ•ด์•ผ ํ• ๊นŒ? ์Šคํ”„๋ง์€ @Component ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ @Controller , @Service , @Repository ์ฒ˜๋Ÿผ ๊ณ„์ธต์— ๋งž์ถ”์–ด ์ผ๋ฐ˜์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์„ ์ž๋™์œผ๋กœ ์Šค์บ”ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค. ๊ฑฐ๊ธฐ์— ๋”ํ•ด์„œ ์ตœ๊ทผ ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ , ์Šคํ”„๋ง ๋ถ€ํŠธ์˜ ๋‹ค์–‘ํ•œ ์Šคํ”„๋ง ๋นˆ๋“ค๋„ ์กฐ๊ฑด์ด ๋งž์œผ๋ฉด ์ž๋™์œผ๋กœ ๋“ฑ๋กํ•˜๋„๋ก ์„ค๊ณ„ํ–ˆ๋‹ค. ์„ค์ • ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ถ€๋ถ„๊ณผ ์‹ค์ œ ๋™์ž‘ํ•˜๋Š” ๋ถ€๋ถ„์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜๋ˆ„๋Š”๊ฒƒ์ด ์ด์ƒ์ ์ด์ง€๋งŒ, ๊ฐœ๋ฐœํ•˜๋Š” ์ž…์žฅ์—์„œ ์Šคํ”„๋ง ๋นˆ์„ ํ•˜๋‚˜ ๋“ฑ๋กํ• ๋•Œ @Component๋งŒ ๋„ฃ์–ด์ฃผ๋ฉด ๋.. 2023. 7. 16.
Spring - ์กฐํšŒํ•œ ๋นˆ์ด ๋ชจ๋‘ ํ•„์š”ํ• ๋•Œ๋Š” List์™€ Map ์‚ฌ์šฉ ์˜๋„์ ์œผ๋กœ ์ •๋ง ํ•ด๋‹น ํƒ€์ž…์˜ ์Šคํ”„๋ง ๋นˆ์ด ๋‹ค ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ํ• ์ธ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ• ์ธ์˜ ์ข…๋ฅ˜(rate, fix)๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด ์ž. ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜๋ฉด ์†Œ์œ„ ๋งํ•˜๋Š” ์ „๋žต ํŒจํ„ด์„ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. public class AllBeanTest { @Test void findAllBean(){ ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class); DiscountService discountService = ac.getBean(DiscountService.class); Member member = new Mem.. 2023. 7. 16.
Spring - ์กฐํšŒ ๋นˆ 2๊ฐœ ์ด์ƒ์ผ๋•Œ @Autowired ๋Š” ํƒ€์ž…(Type)์œผ๋กœ ์กฐํšŒํ•œ๋‹ค. DiscountPolicy ์˜ ํ•˜์œ„ ํƒ€์ž…์ธ FixDiscountPolicy , RateDiscountPolicy ๋‘˜๋‹ค ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์„ ์–ธ ํ•ด๋ณด์ž. ๊ทธ๋ฆฌ๊ณ  ์ด๋ ‡๊ฒŒ ์˜์กด ๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž…์„ ์‹คํ–‰ํ•˜๋ฉด NoUniqueBeanDefinitionException ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching bean but found 2: fixDiscountPolicy,rateDiscountPolicy ใ„ด ์˜ค๋ฅ˜๋ฉ”์‹œ์ง€๊ฐ€ ์นœ์ ˆํ•˜๊ฒŒ๋„ ํ•˜๋‚˜์˜ ๋นˆ์„ ๊ธฐ๋Œ€ํ–ˆ๋Š”๋ฐ fi.. 2023. 7. 14.