๐’๐ฉ๐ซ๐ข๐ง๐ 

์ธํ”„๋Ÿฐ ๊น€์˜ํ•œ๋‹˜์˜ ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ ๊ฐ•์˜ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ด์ „ ๊ธ€์—์„œ AppConfig์ฒ˜๋Ÿผ DI์™€ IoC๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ์„ DI ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค๋Š” ์ด์•ผ๊ธฐ๋ฅผ ํ–ˆ์—ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ์Šคํ”„๋ง์—์„œ DI์™€ IoC๋ฅผ ์ œ๊ณตํ•˜๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. 1. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ž€? ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก๋œ ๊ฐ์ฒด๋“ค์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ๊ฐ์ฒด๋“ค์—๊ฒŒ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋œ ๊ฐ์ฒด๋“ค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์Šคํ”„๋ง ๋นˆ ์‚ฌ์ด์— ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ๊ฒŒ ๋ฐ”๋กœ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์—ญํ• ์ด๋‹ค. ์ด์ „ ๊ธ€์—์„œ ๋ณด์•˜๋˜ AppConfig์˜ ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๊ธฐ์กด์˜ AppConfig์™€๋Š” ๋ญ๊ฐ€ ๋‹ค๋ฅด๊ธธ๋ž˜ ๊ตณ์ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์“ฐ๋Š” ๊ฑธ๊นŒ? 2. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์„ค์ •..
์ธํ”„๋Ÿฐ ๊น€์˜ํ•œ๋‹˜์˜ ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ ๊ฐ•์˜ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ด์ „ ๊ธ€์—์„œ ๋‹คํ˜•์„ฑ๋งŒ์œผ๋กœ๋Š” OCP, DIP๋ฅผ ์ง€ํ‚ฌ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ๊นŒ์ง€ ์•Œ์•„๋ณด์•˜๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ OCP, DIP๋ฅผ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ์„๊นŒ? ๋ฐ”๋กœ DI์™€ IoC๋ฅผ ์ด์šฉํ•˜๋ฉด ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด์ž. ์—ฌ๊ธฐ ์ฃผ๋ฌธ ์„œ๋น„์Šค๊ฐ€ ์žˆ๋‹ค. ์ฃผ๋ฌธ ์„œ๋น„์Šค๋Š” ํ• ์ธ ์ •์ฑ…์„ ๋ฐ›์•„์„œ ํ• ์ธ ๊ธˆ์•ก์„ ๊ณ„์‚ฐํ•ด์•ผ ํ•œ๋‹ค. ํ• ์ธ ์ •์ฑ…์€ ํฌ๊ฒŒ 2์ข…๋ฅ˜๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ณ ์ •๊ธˆ์•ก ํ• ์ธ ์ •์ฑ…(FixDiscountPolicy)๊ณผ ๊ณ ์ •๋น„์œจ ํ• ์ธ ์ •์ฑ…(RateDiscountPolicy)์ด ์žˆ๋‹ค. public class OrderServiceImpl { // private final DiscountPolicy discountPolicy = new FixDiscount..
์ธํ”„๋Ÿฐ ๊น€์˜ํ•œ๋‹˜์˜ ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ-๊ธฐ๋ณธํŽธ ๊ฐ•์˜ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ด์ „ ํฌ์ŠคํŒ…์—์„œ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„๋ฅผ ์‹คํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹คํ˜•์„ฑ์„ ์ž˜ ์ง€์ผœ์•ผ ํ•œ๋‹ค๋Š” ์ด์•ผ๊ธฐ๋ฅผ ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์— ๋Œ€ํ•ด ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๋ ค๋ฉด, ๋‹คํ˜•์„ฑ ์™ธ์—๋„ ์•ž๊ธ€์ž๋ฅผ ๋”ฐ์„œ SOLID๋ผ ๋ถˆ๋ฆฌ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ 5๊ฐ€์ง€ ์›์น™์— ๋Œ€ํ•ด ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค. SRP: ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (Single Responsibility Principle) ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. ํ•˜๋‚˜์˜ ์ฑ…์ž„์ด๋ผ๋Š” ๋ง์€ ๋ชจํ˜ธํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด ํด๋ž˜์Šค๊ฐ€ ์ฑ…์ž„์ด ํ•˜๋‚˜์ธ์ง€ ์—ฌ๋Ÿฌ๊ฐœ์ธ์ง€ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ, ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ–ˆ์„ ๋•Œ์˜ ํŒŒ๊ธ‰ ํšจ๊ณผ๋ฅผ ๋ณด๋ฉด SRP๋ฅผ ์ž˜ ์ง€์ผฐ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์žฌ๋ฃŒ ๊ธฐ๋ฐ˜ ๋ ˆ์‹œํ”ผ ๊ฒ€์ƒ‰ ์„œ๋น„์Šค์—์„œ ์žฌ๋ฃŒ ํด๋ž˜์Šค๋ฅผ ..
์ธํ”„๋Ÿฐ ๊น€์˜ํ•œ๋‹˜์˜ ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ-๊ธฐ๋ณธํŽธ ๊ฐ•์˜ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. Spring์ด๋ž€? ์Šคํ”„๋ง์€ ๋ฌธ๋งฅ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š”๋‹ค. ์Šคํ”„๋ง ์ƒํƒœ๊ณ„ ์ „์ฒด๋ฅผ ์˜๋ฏธํ•˜๊ธฐ๋„ ํ•˜์ง€๋งŒ, ์Šคํ”„๋ง DI ์ปจํ…Œ์ด๋„ˆ๋‚˜ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ์Šคํ”„๋ง์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ์ˆ ์˜ ๋ชจ์Œ์œผ๋กœ, Spring Boot, Spring Framework, Spring Data ๋“ฑ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์— ๊ฐ€๋ฉด ์•„๋ž˜ ์‚ฌ์ง„๋ณด๋‹ค ๋” ๋งŽ์€ ๊ธฐ์ˆ ๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŽ์€ ๊ธฐ์ˆ ๋“ค ์‚ฌ์ด์—์„œ๋„ ๋Œ€ํ‘œ์ ์ธ ๊ธฐ์ˆ ์ด ์žˆ๋‹ค๋ฉด, ๋ฐ”๋กœ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์™€ ์Šคํ”„๋ง ๋ถ€ํŠธ์ด๋‹ค. ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์˜ค๋ฆฌ์ง€๋„ํŒฉ์— ํ•ด๋‹นํ•˜๋Š” ๊ธฐ์ˆ ๋กœ, ์Šคํ”„๋ง DI ์ปจํ…Œ์ด๋„ˆ, AOP, JDBC ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•œ๋‹ค. ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ํ™•์žฅํŒฉ์ด์ง€๋งŒ ์š”์ฆ˜์—๋Š” ํ•„..
gorapaduckoo
'๐’๐ฉ๐ซ๐ข๐ง๐ ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (3 Page)