๐Ÿ๏ธ Spring/๊ธฐ๋ณธ

๋นˆ ์Šค์ฝ”ํ”„ ๋นˆ ์Šค์ฝ”ํ”„๋Š” ๋นˆ์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค. ์Šคํ”„๋ง์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์Šค์ฝ”ํ”„๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์‹ฑ๊ธ€ํ†ค(singleton) : ๊ธฐ๋ณธ ์Šค์ฝ”ํ”„, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์‹œ์ž‘๊ณผ ์ข…๋ฃŒ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ๊ฐ€์žฅ ๋„’์€ ๋ฒ”์œ„์˜ ์Šค์ฝ”ํ”„์ž…๋‹ˆ๋‹ค. ํ”„๋กœํ† ํƒ€์ž…(prototype) : ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์˜ ์ƒ์„ฑ๊ณผ, ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…๊นŒ์ง€๋งŒ ๊ด€์—ฌํ•˜๊ณ  ๋”๋Š” ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š” ๋งค์šฐ ์งฆ์€ ๋ฒ”์œ„์˜ ์Šค์ฝ”ํ”„์ž…๋‹ˆ๋‹ค. (์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ๊นŒ์ง€๋งŒ ๋ถˆ๋Ÿฌ์ฃผ๊ณ  ๋”๋Š” ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ธฐ์— ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ๋Š” ํ˜ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.) ์›น ๊ด€๋ จ ์Šค์ฝ”ํ”„ : request : ์›น ์š”์ฒญ์ด ๋“ค์–ด์˜ค๊ณ  ๋‚˜์„œ ๋‚˜๊ฐˆ๋•Œ ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ์Šค์ฝ”ํ”„์ž…๋‹ˆ๋‹ค. session : ์›น ์„ธ์…˜์ด ์ƒ์„ฑ๋˜๊ณ  ์ข…๋ฃŒ๋  ๋•Œ ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ์Šค์ฝ”ํ”„์ž…๋‹ˆ๋‹ค. application : ์›น์˜ ์„œ๋ธ”๋ฆฟ ์ปจํ…์ŠคํŠธ์™€ ๊ฐ™์€ ๋ฒ”์œ„๋กœ..
์Šคํ”„๋ง ๋นˆ์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ ๋นˆ์ด ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์†Œ๋ฉธ๋˜๋Š” ๊ฒฝ์šฐ ํŠน์ •ํ•œ ์ž‘์—…์„ ํ•˜๊ณ ์‹ถ์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์˜ˆ์‹œ๋กœ๋Š” ๋นˆ์ด ์ƒ์„ฑ๋  ๋•Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ํ’€์„ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์œ„ํ•ด ์Šคํ”„๋ง ๋นˆ์˜ ์ดˆ๊ธฐํ™” ์ž‘์—…๊ณผ ์ข…๋ฃŒ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ์€ ์Šคํ”„๋ง ๋นˆ์ด ์ƒ์„ฑ๋œ ํ›„ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ์™„๋ฃŒ๋˜๊ฑฐ๋‚˜ ์ฃฝ๊ธฐ ์ง์ „์— ์Šคํ”„๋ง ๋นˆ ์•ˆ์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์Šคํ”„๋ง ๋นˆ์˜ ์ด๋ฒคํŠธ์‚ฌ์ดํด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ $\to$ ๋นˆ ์ƒ์„ฑ $\to$ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… $\to$ ์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ $\to$ ์‚ฌ์šฉ $\to$ ์†Œ๋ฉธ์ „ ์ฝœ๋ฐฑ $\to$ ์Šคํ”„๋ง ์ข…๋ฃŒ ์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ : ๋นˆ์ด ์ƒ์„ฑ๋˜๊ณ  ๋นˆ์˜ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ์™„๋ฃŒ๋œ ํ›„ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์†Œ๋ฉธ์ „ ์ฝœ๋ฐฑ ..
@Autowired ์‚ฌ์šฉ ์‹œ ์กฐํšŒ๋œ ๋นˆ์ด 2๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ @Autowired๋ฅผ ํ†ตํ•œ ์˜์กด๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž… ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์—, ๋™์ผํ•œ ํƒ€์ž…์˜ ๋นˆ์ด 2๊ฐœ ์ด์ƒ์ด๋ผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‘๊ฐœ์˜ ๋นˆ๋“ค ์ค‘ ์–ด๋– ํ•œ ๋นˆ์„ ์ฃผ์ž…ํ•ด์•ผ ํ•  ์ง€ ๊ฒฐ์ •ํ•˜์ง€ ๋ชปํ•ด์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ธ๋ฐ, ๊ฐ„๋‹จํ•˜๊ฒŒ๋Š” ๊ตฌ์ฒด ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๊ตฌ์ฒด ํด๋ž˜์Šค์— ํ•ด๋‹นํ•˜๋Š” ํ•„๋“œ๋ช…(ํ˜น์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ช…)์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” DIP๋ฅผ ์œ„๋ฐ˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ @Qualifier์™€ @Primary์™€, ์–ด๋…ธํ…Œ์ด์…˜์„ ์ง์ ‘ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ, ํ•˜๋‚˜ํ•˜๋‚˜ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. @Primary ์‚ฌ์šฉ @Primary๋Š” ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋ฐฉ๋ฒ•์€ ๋˜๊ฒŒ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. @Componet @Prim..
ํŠน์ • ํƒ€์ž…์˜ ๋นˆ์ด ์—ฌ๋Ÿฌ๊ฐœ ๋“ฑ๋ก๋˜์–ด ์žˆ์„ ๋•Œ, ๋“ฑ๋กํ•œ ๋ชจ๋“  ๋นˆ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ๋“ฑ๊ธ‰์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์„œ๋น„์Šค๊ฐ€ ์ ์šฉ๋˜์–ด์•ผ ํ•˜๊ฑฐ๋‚˜, ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋“ค ์ค‘ ํ•˜๋‚˜๋ฅผ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ๋“ฑ์˜ ๊ฒฝ์šฐ๊ฐ€ ๊ทธ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿด ๋•Œ List๋‚˜ Map, Set์„ ์‚ฌ์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋“ฑ๋กํ•œ ๋นˆ ๋ชจ๋‘ ์กฐํšŒ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž. public class DiscountService { private final Map policyMap; private final List policiList; private final Set policieSet; @Autowired public DiscountService( Map policyMap, List policiList, Set policieSet ){ ..
@Qualifier์˜ ๋ฌธ์ œ์  @Qualifier("mainDiscountPolicy") ์ฒ˜๋Ÿผ, ๋ฌธ์ž๋ฅผ ์ง์ ‘ ์ ์–ด์ฃผ๋Š” ๋ฐฉ์‹์€ ์ปดํŒŒ์ผ ์‹œ์ ์— ์ฒดํฌ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋…ธํ…Œ์ด์…˜์„ ์ง์ ‘ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋…ธํ…Œ์ด์…˜ ์ง์ ‘ ๋งŒ๋“ค๊ธฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์–ด๋…ธํ…Œ์ด์…˜ ์† @Qualifier๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง์ ‘ ์–ด๋…ธํ…Œ์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER,ElementType.TYPE, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Qualifier("mainDiscountPolicy") pu..
@Autowired @Autowired๋ž€ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์ž๋™์œผ๋กœ ์˜์กด ๊ด€๊ณ„๋ฅผ ์—ฐ๊ฒฐ(์ฃผ์ž…) ์‹œ์ผœ์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ž…๋‹ˆ๋‹ค. @ComponentScan์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์˜์กด๊ด€๊ณ„์— ๋Œ€ํ•œ ์„ค์ •์„ ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฐ์ฒด์˜ "ํƒ€์ž…"์— ํ•ด๋‹นํ•˜๋Š” ๋นˆ์„ ์ฐพ์•„์„œ ์ž๋™์œผ๋กœ ์ฃผ์ž…์‹œ์ผœ์ค๋‹ˆ๋‹ค. ์˜์กด๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž… ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ์ž ์ฃผ์ž… ์ˆ˜์ •์ž ์ฃผ์ž… (Setter ์ฃผ์ž…) ํ•„๋“œ ์ฃผ์ž… ์ƒ์„ฑ์ž ์ฃผ์ž… ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด์„œ ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…๋ฐ›๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ํŠน์ง• ์ƒ์„ฑ์ž ํ˜ธ์ถœ์‹œ์ ์— ๋‹จ 1ํšŒ๋งŒ ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ์ด ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค. ๋ถˆ๋ณ€, ํ•„์ˆ˜ ์˜์กด๊ด€๊ณ„์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. @Component public class OrderServiceImpl implements OrderService { private..
@ComponentScan @ComponentScan์€ @Component ๋ฐ @Service, @Repository, @Controller, @Configuration๋“ฑ๊ณผ ๊ฐ™์ด @Component๊ฐ€ ๋ถ™์–ด์žˆ๋Š” Class๋“ค์„ ์ž๋™์œผ๋กœ Scanํ•˜์—ฌ ์Šคํ”„๋ง Bean์œผ๋กœ ๋“ฑ๋กํ•ด์ฃผ๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. @Component๋Š” ํด๋ž˜์Šค์— ์‚ฌ์šฉ๋˜๋ฉฐ, ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋  ๋•Œ์—๋Š” ํด๋ž˜์Šค๋ช…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, ํด๋ž˜์Šค์˜ ๋งจ ์•ž๊ธ€์ž๋งŒ ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊ฟ”์„œ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ Member ํด๋ž˜์Šค์˜ ๊ฒฝ์šฐ์—๋Š” Bean์œผ๋กœ ๋“ฑ๋ก๋˜๋Š” ๊ฒฝ์šฐ member๋กœ ๋“ฑ๋ก๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. @ComponentScan์˜ ๋ฒ”์œ„ ๊ธฐ๋ณธ ๊ฐ’์œผ๋กœ๋Š” @ComponenetScan์ด ์‚ฌ์šฉ๋œ ํŒจํ‚ค์ง€๋ฅผ ์‹œ์ž‘ ์œ„์น˜๋กœ ํ•˜์—ฌ, ํ•ด๋‹น ํŒจํ‚ค์ง€์™€ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ชจ๋‘ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ..
@Configuration @Configuration์€ ์Šคํ”„๋ง ์„ค์ • ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•˜๋Š” ์• ๋…ธํ…Œ์ด์…˜์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ, ์Šคํ”„๋ง ๋นˆ๊ณผ ๊ด€๋ จ๋œ ์„ค์ • ํด๋ž˜์Šค์ž„์„ ๋ช…์‹œํ•˜๋Š” ๊ธฐ๋Šฅ๊ณผ ๋™์‹œ์— ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜ ๋” ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์‹ฑ๊ธ€ํ†ค๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. @Configuration๊ณผ ์‹ฑ๊ธ€ํ†ค @Configuration public class AppConfig { @Bean public MemberService memberService() { //์Šคํ”„๋ง ๋นˆ์— ๋“ฑ๋ก๋ ๋•Œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์œผ๋กœ ๋“ฑ๋ก return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { return new Or..
๋ง ๋ž‘
'๐Ÿ๏ธ Spring/๊ธฐ๋ณธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (2 Page)