Spring/Spring ๊ธฐ๋ณธ

Spring/Spring ๊ธฐ๋ณธ

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 27. ์Šค์ฝ”ํ”„์™€ ํ”„๋ก์‹œ

์Šค์ฝ”ํ”„์™€ ํ”„๋ก์‹œ ํ”„๋ก์‹œ ๋ฐฉ์‹์„ ์‚ฌ์šฉ @Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS) public class MyLogger { ์ ์šฉ ๋Œ€์ƒ์ด ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค๋ฉด TARGET_CLASS ๋ฅผ ์„ ํƒ ์ ์šฉ ๋Œ€์ƒ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฉด INTERFACES ๋ฅผ ์„ ํƒ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด MyLogger์˜ ๊ฐ€์งœ ํ”„๋ก์‹œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด๋‘๊ณ  HTTP request์™€ ์ƒ๊ด€ ์—†์ด ๊ฐ€์งœ ํ”„๋ก์‹œํด๋ž˜์Šค๋ฅผ ๋‹ค๋ฅธ ๋นˆ์— ๋ฏธ๋ฆฌ ์ฃผ์ž…ํ•ด ๋‘˜ ์ˆ˜ ์žˆ๋‹ค. ์›น ์Šค์ฝ”ํ”„์™€ ํ”„๋ก์‹œ ๋™์ž‘ ์›๋ฆฌ ์ง„์งœ myLogger ๊ฐ€ ์•„๋‹Œ ๊ฐ€์งœ(๊ป๋ฐ๊ธฐ,ํ”„๋ก์‹œ) myLogger ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ์— ์ง‘์–ด ๋„ฃ์–ด๋‘”๋‹ค ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ ๋‚ด๊ฐ€ ๊ธฐ๋Šฅ์„ ์‹ค์ œ ํ˜ธ์ถœํ•˜๋Š” ์‹œ์ ์— ์ง„์งœ๋ฅผ ์ฐพ์•„์„œ ๋™์ž‘ํ•œ๋‹ค (๋งˆ์น˜ Provider ๋™..

Spring/Spring ๊ธฐ๋ณธ

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 26. ์›น ์Šค์ฝ”ํ”„

์›น ์Šค์ฝ”ํ”„ ์›น ์Šค์ฝ”ํ”„๋Š” ์›น ํ™˜๊ฒฝ์—์„œ๋งŒ ๋™์ž‘ํ•œ๋‹ค. ์›น ์Šค์ฝ”ํ”„๋Š” ํ”„๋กœํ† ํƒ€์ž…๊ณผ ๋‹ค๋ฅด๊ฒŒ ์Šคํ”„๋ง์ด ํ•ด๋‹น ์Šค์ฝ”ํ”„์˜ ์ข…๋ฃŒ์‹œ์ ๊นŒ์ง€ ๊ด€๋ฆฌํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. ์›น ์Šค์ฝ”ํ”„ ์ข…๋ฅ˜ request: HTTP ์š”์ฒญ ํ•˜๋‚˜๊ฐ€ ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐˆ ๋•Œ ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ์Šค์ฝ”ํ”„ ๊ฐ๊ฐ์˜ HTTP ์š”์ฒญ๋งˆ๋‹ค ๋ณ„๋„์˜ ๋นˆ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ๊ด€๋ฆฌ๋œ๋‹ค. session: HTTP Session๊ณผ ๋™์ผํ•œ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š” ์Šค์ฝ”ํ”„ application: ์„œ๋ธ”๋ฆฟ ์ปจํ…์ŠคํŠธ( ServletContext )์™€ ๋™์ผํ•œ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š” ์Šค์ฝ”ํ”„ websocket: ์›น ์†Œ์ผ“๊ณผ ๋™์ผํ•œ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š” ์Šค์ฝ”ํ”„ request: HTTP ์š”์ฒญ ํ•˜๋‚˜๊ฐ€ ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐˆ ๋•Œ ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ์Šค์ฝ”ํ”„ ๊ฐ๊ฐ์˜ HTTP ์š”์ฒญ๋งˆ๋‹ค ๋ณ„๋„์˜ ๋นˆ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ๊ด€๋ฆฌ๋œ๋‹ค. ๋™์‹œ์—..

Spring/Spring ๊ธฐ๋ณธ

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 25. ํ”„๋กœํ† ํƒ€์ž… ์Šค์ฝ”ํ”„ / Provider

ํ”„๋กœํ† ํƒ€์ž… ์Šค์ฝ”ํ”„ - ์‹ฑ๊ธ€ํ†ค ๋นˆ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ์‹œ ๋ฌธ์ œ์  ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ํ”„๋กœํ† ํƒ€์ž… ์Šค์ฝ”ํ”„์˜ ๋นˆ์„ ์š”์ฒญํ•˜๋ฉด ํ•ญ์ƒ ์ƒˆ๋กœ์šด ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์‹ฑ๊ธ€ํ†ค ๋นˆ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์˜๋„ํ•œ ๋Œ€๋กœ ์ž˜ ๋™์ž‘ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค. ์˜ˆ์ œ clientBean ์ด๋ผ๋Š” ์‹ฑ๊ธ€ํ†ค ๋นˆ์ด ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์„ ํ†ตํ•ด์„œ ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์„ ์ฃผ์ž…๋ฐ›์•„์„œ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ๋ฅผ ๋ณด์ž. void prototypeFind() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(PrototypeBean.class, ClientBean.class); clientBean ์€ ์‹ฑ๊ธ€ํ†ค์ด๋ฏ€๋กœ, ๋ณดํ†ต ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ์‹œ์ ์— ํ•จ๊ป˜ ์ƒ์„ฑ๋˜๊ณ , ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…..

Spring/Spring ๊ธฐ๋ณธ

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 24. ๋นˆ ์Šค์ฝ”ํ”„

๋นˆ ์Šค์ฝ”ํ”„๋ž€? ์Šคํ”„๋ง ๋นˆ์ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์‹œ์ž‘๊ณผ ํ•จ๊ป˜ ์ƒ์„ฑ๋˜์–ด์„œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ๊นŒ์ง€ ์œ ์ง€๋œ๋‹ค๊ณ  ํ•™์Šตํ–ˆ๋‹ค. ์ด๊ฒƒ์€ ์Šคํ”„๋ง ๋นˆ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ํ†ค ์Šค์ฝ”ํ”„๋กœ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์Šค์ฝ”ํ”„๋Š” ๋ฒˆ์—ญ ๊ทธ๋Œ€๋กœ ๋นˆ์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ๋œปํ•œ๋‹ค. ๋‹ค์–‘ํ•œ ์Šค์ฝ”ํ”„ ์ง€์› ์‹ฑ๊ธ€ํ†ค: ๊ธฐ๋ณธ ์Šค์ฝ”ํ”„, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์‹œ์ž‘๊ณผ ์ข…๋ฃŒ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ๊ฐ€์žฅ ๋„“์€ ๋ฒ”์œ„์˜ ์Šค์ฝ”ํ”„์ด๋‹ค. ํ”„๋กœํ† ํƒ€์ž…: ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์˜ ์ƒ์„ฑ๊ณผ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…๊นŒ์ง€๋งŒ ๊ด€์—ฌํ•˜๊ณ  ๋”๋Š” ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š” ๋งค์šฐ ์งง์€ ๋ฒ”์œ„์˜ ์Šค์ฝ”ํ”„์ด๋‹ค. ์›น ๊ด€๋ จ ์Šค์ฝ”ํ”„ request: ์›น ์š”์ฒญ์ด ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐˆ๋•Œ ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ์Šค์ฝ”ํ”„์ด๋‹ค. session: ์›น ์„ธ์…˜์ด ์ƒ์„ฑ๋˜๊ณ  ์ข…๋ฃŒ๋  ๋•Œ ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ์Šค์ฝ”ํ”„์ด๋‹ค. application: ์›น์˜ ์„œ๋ธ”๋ฆฟ ์ปจํ…์ŠคํŠธ์™€ ๊ฐ™์€ ๋ฒ”์œ„..

Spring/Spring ๊ธฐ๋ณธ

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 23. ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ

๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ํ’€์ด๋‚˜, ๋„คํŠธ์›Œํฌ ์†Œ์ผ“์ฒ˜๋Ÿผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ์ ์— ํ•„์š”ํ•œ ์—ฐ๊ฒฐ์„ ๋ฏธ๋ฆฌ ํ•ด๋‘๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ ์‹œ์ ์— ์—ฐ๊ฒฐ์„ ๋ชจ๋‘ ์ข…๋ฃŒํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋ ค๋ฉด, ๊ฐ์ฒด์˜ ์ดˆ๊ธฐํ™”์™€ ์ข…๋ฃŒ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค. ์ด๋ฒˆ์‹œ๊ฐ„์—๋Š” ์Šคํ”„๋ง์„ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ์ดˆ๊ธฐํ™” ์ž‘์—…๊ณผ ์ข…๋ฃŒ ์ž‘์—…์„ ์–ด๋–ป๊ฒŒ ์ง„ํ–‰ํ•˜๋Š”์ง€ ์˜ˆ์ œ๋กœ ์•Œ์•„๋ณด์ž. ์ฐธ๊ณ  : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ํ’€ ๋”๋ณด๊ธฐ WAS(Web Application Server)์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์ด์˜ ์—ฐ๊ฒฐ์—๋Š” ๋งŽ์€ ๋น„์šฉ์ด ๋“ ๋‹ค ์„œ๋ฒ„๊ฐ€ DB์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ Connecting ๋น„์šฉ์ด ๊ฐ€์žฅ ํฐ ๋น„์œจ์„ ์ฐจ์ง€ํ•œ๋‹ค. ์ด์ฒ˜๋Ÿผ Connection์„ ์ƒ์„ฑํ•˜๋Š” ์ž‘์—…์€ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์ž‘์—…์ด๋‹ค. ์ด๋ฅผ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ๋ฐ”๋กœ Connection Pool์ด๋‹ค. ์ปค๋„ฅ์…˜ ํ’€(Connection ..

Spring/Spring ๊ธฐ๋ณธ

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 22. ์กฐํšŒํ•œ ๋นˆ์ด ๋ชจ๋‘ ํ•„์š”ํ•  ๋•Œ / List, Map

์กฐํšŒํ•œ ๋นˆ์ด ๋ชจ๋‘ ํ•„์š”ํ•  ๋•Œ, List, Map ์˜๋„์ ์œผ๋กœ ์ •๋ง ํ•ด๋‹น ํƒ€์ž…์˜ ์Šคํ”„๋ง ๋นˆ์ด ๋‹ค ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ํ• ์ธ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ• ์ธ์˜ ์ข…๋ฅ˜(rate, fix)๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜๋ฉด ์†Œ์œ„ ๋งํ•˜๋Š” ์ „๋žต ํŒจํ„ด์„ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. @Test void findAllBean() { ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class,DiscountService.class); new AnnotationConfigApplicationContext() ๋ฅผ ํ†ตํ•ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. AutoAppConfig.class , DiscountS..

Spring/Spring ๊ธฐ๋ณธ

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 21. @Autowired ํ•„๋“œ ๋ช… / @Qualifier, @Primary

์กฐํšŒ ๋นˆ์ด 2๊ฐœ ์ด์ƒ - ๋ฌธ์ œ @Component public class FixDiscountPolicy implements DiscountPolicy { @Component public class RateDiscountPolicy implements DiscountPolicy { DiscountPolicy ์˜ ํ•˜์œ„ ํƒ€์ž…์ธ FixDiscountPolicy , RateDiscountPolicy ๋‘˜๋‹ค ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์„ ์–ธ ์Šคํ”„๋ง ๋นˆ ์กฐํšŒ์—์„œ ํ•™์Šตํ–ˆ๋“ฏ์ด ํƒ€์ž…์œผ๋กœ ์กฐํšŒํ•˜๋ฉด ์„ ํƒ๋œ ๋นˆ์ด 2๊ฐœ ์ด์ƒ์ผ ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.me..

Spring/Spring ๊ธฐ๋ณธ

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 20. ์ƒ์„ฑ์ž ์ฃผ์ž… / final ํ‚ค์›Œ๋“œ / ๋กฌ๋ณต(Lombok)

์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์„ ํƒํ•ด๋ผ! ๊ณผ๊ฑฐ์—๋Š” ์ˆ˜์ •์ž ์ฃผ์ž…๊ณผ ํ•„๋“œ ์ฃผ์ž…์„ ๋งŽ์ด ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ์ตœ๊ทผ์—๋Š” ์Šคํ”„๋ง์„ ํฌํ•จํ•œ DI ํ”„๋ ˆ์ž„์›Œํฌ ๋Œ€๋ถ€๋ถ„์ด ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ๊ถŒ์žฅํ•œ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๋ถˆ๋ณ€ ๋Œ€๋ถ€๋ถ„์˜ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์€ ํ•œ๋ฒˆ ์ผ์–ด๋‚˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ์‹œ์ ๊นŒ์ง€ ์˜์กด๊ด€๊ณ„๋ฅผ ๋ณ€๊ฒฝํ•  ์ผ์ด ์—†๋‹ค. ์˜คํžˆ๋ ค ๋Œ€๋ถ€๋ถ„์˜ ์˜์กด๊ด€๊ณ„๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ ์ „๊นŒ์ง€ ๋ณ€ํ•˜๋ฉด ์•ˆ๋œ๋‹ค.(๋ถˆ๋ณ€ํ•ด์•ผ ํ•œ๋‹ค.) ์ˆ˜์ •์ž ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด, setXxx ๋ฉ”์„œ๋“œ๋ฅผ public์œผ๋กœ ์—ด์–ด๋‘์–ด์•ผ ํ•œ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ ์‹ค์ˆ˜๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ๋„ ์žˆ๊ณ , ๋ณ€๊ฒฝํ•˜๋ฉด ์•ˆ๋˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์—ด์–ด๋‘๋Š” ๊ฒƒ์€ ์ข‹์€ ์„ค๊ณ„ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋‹ค. ์ƒ์„ฑ์ž ์ฃผ์ž…์€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋”ฑ 1๋ฒˆ๋งŒ ํ˜ธ์ถœ๋˜๋ฏ€๋กœ ์ดํ›„์— ํ˜ธ์ถœ๋˜๋Š” ์ผ์ด ์—†๋‹ค. ๋”ฐ๋ผ์„œ ๋ถˆ๋ณ€ํ•˜๊ฒŒ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค. final ํ‚ค์›Œ๋“œ ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•„๋“œ์— ..

hello_u
'Spring/Spring ๊ธฐ๋ณธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก