๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐Ÿญ Chapter 11: ์‹œ์Šคํ…œ

๋ณต์žก์„ฑ์€ ์ฃฝ์Œ์ด๋‹ค. ๊ฐœ๋ฐœ์ž์—๊ฒŒ์„œ ์ƒ๊ธฐ๋ฅผ ์•—์•„๊ฐ€๋ฉฐ, ์ œํ’ˆ์„ ๊ณ„ํšํ•˜๊ณ  ์ œ์ž‘ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ ๋‹ค.

๐ŸŽƒ ์‹œ์Šคํ…œ ์ œ์ž‘๊ณผ ์‹œ์Šคํ…œ ์‚ฌ์šฉ์„ ๋ถ„๋ฆฌํ•˜๋ผโ€‹

์šฐ์„  ์ œ์ž‘์€ ์‚ฌ์šฉ๊ณผ ์•„์ฃผ ๋‹ค๋ฅด๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ช…์‹ฌํ•œ๋‹ค.

์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์€ (์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ์ฒด๋ฅผ ์ œ์ž‘ํ•˜๊ณ  ์˜์กด์„ฑ์„ ์„œ๋กœ '์—ฐ๊ฒฐ'ํ•˜๋Š”) ์ค€๋น„ ๊ณผ์ •๊ณผ (์ค€๋น„ ๊ณผ์ • ์ดํ›„์— ์ด์–ด์ง€๋Š”) ๋Ÿฐํƒ€์ž„ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

์‹œ์ž‘ ๋‹จ๊ณ„๋Š” ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ’€์–ด์•ผ ํ•  ๊ด€์‹ฌ์‚ฌ๋‹ค. ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋Š” ์šฐ๋ฆฌ ๋ถ„์•ผ์—์„œ ๊ฐ€์žฅ ์˜ค๋ž˜๋˜๊ณ  ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์„ค๊ณ„ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋‹ค.

๋ถˆํ–‰ํžˆ๋„ ๋Œ€๋‹ค์ˆ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์‹œ์ž‘ ๋‹จ๊ณ„๋ผ๋Š” ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ค€๋น„ ๊ณผ์ • ์ฝ”๋“œ๋ฅผ ์ฃผ๋จน๊ตฌ๊ตฌ์‹์œผ๋กœ ๊ตฌํ˜„ํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋Ÿฐํƒ€์ž„ ๋กœ์ง๊ณผ ๋งˆ๊ตฌ ๋’ค์„ž๋Š”๋‹ค. ๋‹ค์Œ์ด ์ „ํ˜•์ ์ธ ์˜ˆ๋‹ค.

public Service getService() {
if (service == null)
service = new MyServiceImpl(...); // ๋ชจ๋“  ์ƒํ™ฉ์— ์ ํ•ฉํ•œ ๊ธฐ๋ณธ๊ฐ’์ผ๊นŒ?
return service;
}

์ด๊ฒƒ์ด ์ดˆ๊ธฐํ™” ์ง€์—ฐ ํ˜น์€ ๊ณ„์‚ฐ ์ง€์—ฐ์ด๋ผ๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ์žฅ์ ์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๋‹ค. ์šฐ์„ , ์‹ค์ œ๋กœ ํ•„์š”ํ•  ๋•Œ๊นŒ์ง€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํ•„์š”ํ•œ ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•˜๋Š” ์‹œ๊ฐ„์ด ๊ทธ๋งŒํผ ๋นจ๋ผ์ง„๋‹ค. ๋‘˜์งธ, ์–ด๋–ค ๊ฒฝ์šฐ์—๋„ null ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.

ํ•˜์ง€๋งŒ getService ๋ฉ”์„œ๋“œ๊ฐ€ MyServiceImpl๊ณผ ์ƒ์„ฑ์ž ์ธ์ˆ˜์— ๋ช…์‹œ์ ์œผ๋กœ ์˜์กดํ•œ๋‹ค. ๋Ÿฐํƒ€์ž„ ๋กœ์ง์—์„œ MyServiceImpl ๊ฐ์ฒด๋ฅผ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋”๋ผ๋„ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ์ด ์•ˆ ๋œ๋‹ค.

ํ…Œ์ŠคํŠธ๋„ ๋ฌธ์ œ๋‹ค. MyServiceImpl์ด ๋ฌด๊ฑฐ์šด ๊ฐ์ฒด๋ผ๋ฉด ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์—์„œ getService ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ์ ์ ˆํ•œ ํ…Œ์ŠคํŠธ ์ „์šฉ ๊ฐ์ฒด๋ฅผ service ํ•„๋“œ์— ํ• ๋‹นํ•ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ ์ผ๋ฐ˜ ๋Ÿฐํƒ€์ž„ ๋กœ์ง์—๋‹ค ๊ฐ์ฒด ์ƒ์„ฑ ๋กœ์ง์„ ์„ž์–ธ๋†“์€ ํƒ“์— ๋ชจ๋“  ์‹คํ–‰ ๊ฒฝ๋กœ๋„ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•œ๋‹ค. ์ฑ…์ž„์ด ๋‘˜์ด๋ผ๋Š” ๋ง์€ ๋ฉ”์„œ๋“œ๊ฐ€ ์ž‘์—…์„ ๋‘ ๊ฐ€์ง€ ์ด์ƒ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋‹ค. ์ฆ‰, ์ž‘๊ฒŒ๋‚˜๋งˆ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)์„ ๊นฌ๋‹ค๋Š” ๋ง์ด๋‹ค.

๋ฌด์—‡๋ณด๋‹ค MyServiceImpl์ด ๋ชจ๋“  ์ƒํ™ฉ์— ์ ํ•ฉํ•œ ๊ฐ์ฒด์ธ์ง€ ๋ชจ๋ฅธ๋‹ค๋Š” ์‚ฌ์‹ค์ด ๊ฐ€์žฅ ํฐ ์šฐ๋ ค๋‹ค.

์ดˆ๊ธฐํ™” ์ง€์—ฐ ๊ธฐ๋ฒ•์„ ํ•œ ๋ฒˆ ์ •๋„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ณ„๋กœ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋งŽ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ด์ฒ˜๋Ÿผ ์ข€์Šค๋Ÿฌ์šด ์„ค์ • ๊ธฐ๋ฒ•์„ ์ˆ˜์‹œ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ „๋ฐ˜์ ์ธ ์„ค์ • ๋ฐฉ์‹์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณณ๊ณณ์— ํฉ์–ด์ ธ ์žˆ๋‹ค. ๋ชจ๋“ˆ์„ฑ์€ ์ €์กฐํ•˜๋ฉฐ ๋Œ€๊ฐœ ์ค‘๋ณต์ด ์‹ฌ๊ฐํ•˜๋‹ค.

์ฒด๊ณ„์ ์ด๊ณ  ํƒ„ํƒ„ํ•œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ํ”ํžˆ ์“ฐ๋Š” ์ข€์Šค๋Ÿฝ๊ณ  ์†์‰ฌ์šด ๊ธฐ๋ฒ•์œผ๋กœ ๋ชจ๋“ˆ์„ฑ์„ ๊นจ์„œ๋Š” ์ ˆ๋Œ€๋กœ ์•ˆ ๋œ๋‹ค. ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์˜์กด์„ฑ์„ ์—ฐ๊ฒฐํ•  ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ์„ค์ • ๋…ผ๋ฆฌ๋Š” ์ผ๋ฐ˜ ์‹คํ–‰ ๋…ผ๋ฆฌ์™€ ๋ถ„๋ฆฌํ•ด์•ผ ๋ชจ๋“ˆ์„ฑ์ด ๋†’์•„์ง„๋‹ค. ๋˜ํ•œ ์ฃผ์š” ์˜์กด์„ฑ์„ ํ•ด์†Œํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์‹, ์ฆ‰ ์ „๋ฐ˜์ ์ด๋ฉฐ ์ผ๊ด€์ ์ธ ๋ฐฉ์‹๋„ ํ•„์š”ํ•˜๋‹ค.

๐ŸŽˆ Main ๋ถ„๋ฆฌโ€‹

์‹œ์Šคํ…œ ์ƒ์„ฑ๊ณผ ์‹œ์Šคํ…œ ์‚ฌ์šฉ์„ ๋ถ„๋ฆฌํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ, ์ƒ์„ฑ๊ณผ ๊ด€๋ จํ•œ ์ฝ”๋“œ๋Š” ๋ชจ๋‘ main์ด๋‚˜ main์ด ํ˜ธ์ถœํ•˜๋Š” ๋ชจ๋“ˆ๋กœ ์˜ฎ๊ธฐ๊ณ , ๋‚˜๋จธ์ง€ ์‹œ์Šคํ…œ์€ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๊ณ  ๋ชจ๋“  ์˜์กด์„ฑ์ด ์—ฐ๊ฒฐ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

์ œ์–ด ํ๋ฆ„์€ ๋”ฐ๋ผ๊ฐ€๊ธฐ ์‰ฝ๋‹ค. main ํ•จ์ˆ˜์—์„œ ์‹œ์Šคํ…œ์— ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์ด๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋„˜๊ธด๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ทธ์ € ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ๋ฟ์ด๋‹ค. main๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฌ์ด์— ํ‘œ์‹œ๋œ ์˜์กด์„ฑ ํ™”์‚ดํ‘œ์˜ ๋ฐฉํ–ฅ์— ์ฃผ๋ชฉํ•œ๋‹ค. ๋ชจ๋“  ํ™”์‚ดํ‘œ๊ฐ€ main ์ชฝ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ชฝ์œผ๋กœ ํ–ฅํ•œ๋‹ค. ์ฆ‰, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ main์ด๋‚˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ณผ์ •์„ ์ „ํ˜€ ๋ชจ๋ฅธ๋‹ค๋Š” ๋œป์ด๋‹ค. ๋‹จ์ง€ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ์ ์ ˆํžˆ ์ƒ์„ฑ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

๐ŸŽˆ ์˜์กด์„ฑ ์ฃผ์ž…โ€‹

์‚ฌ์šฉ๊ณผ ์ œ์ž‘์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ํ•˜๋‚˜๊ฐ€ ์˜์กด์„ฑ ์ฃผ์ž…(DI)์ด๋‹ค. ์˜์กด์„ฑ ์ฃผ์ž…์€ ์ œ์–ด ์—ญ์ „(IoC) ๊ธฐ๋ฒ•์„ ์˜์กด์„ฑ ๊ด€๋ฆฌ์— ์ ์šฉํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค. ์ œ์–ด ์—ญ์ „์—์„œ๋Š” ํ•œ ๊ฐ์ฒด๊ฐ€ ๋งก์€ ๋ณด์กฐ ์ฑ…์ž„์„ ์ƒˆ๋กœ์šด ๊ฐ์ฒด์—๊ฒŒ ์ „์ ์œผ๋กœ ๋– ๋„˜๊ธด๋‹ค. ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋Š” ๋„˜๊ฒจ๋ฐ›์€ ์ฑ…์ž„๋งŒ ๋งก์œผ๋ฏ€๋กœ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์ง€ํ‚ค๊ฒŒ ๋œ๋‹ค. ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋งฅ๋ฝ์—์„œ ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ์ „๋‹ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๋„˜๊ฒจ์•ผ๋งŒ ํ•œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ์ œ์–ด๋ฅผ ์—ญ์ „ํ•œ๋‹ค. ์ดˆ๊ธฐ ์„ค์ •์€ ์‹œ์Šคํ…œ ์ „์ฒด์—์„œ ํ•„์š”ํ•˜๋ฏ€๋กœ ๋Œ€๊ฐœ ์ฑ…์ž„์งˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ main ๋ฃจํ‹ด์ด๋‚˜ ํŠน์ˆ˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์ง„์ •ํ•œ ์˜์กด์„ฑ ์ฃผ์ž…์€ ํด๋ž˜์Šค๊ฐ€ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•˜๋ ค ์‹œ๋„ํ•˜์ง€ ์•Š๋Š”๋‹ค. ํด๋ž˜์Šค๋Š” ์™„์ „ํžˆ ์ˆ˜๋™์ด๋‹ค. ๋Œ€์‹ ์— ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์„ค์ •์ž ๋ฉ”์„œ๋“œ๋‚˜ ์ƒ์„ฑ์ž ์ธ์ˆ˜๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

๋Œ€๋‹ค์ˆ˜ DI ์ปจํ…Œ์ด๋„ˆ๋Š” ํ•„์š”ํ•  ๋•Œ๊นŒ์ง€๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , ๋Œ€๋ถ€๋ถ„์€ ๊ณ„์‚ฐ ์ง€์—ฐ์ด๋‚˜ ๋น„์Šทํ•œ ์ตœ์ ํ™”์— ์“ธ ์ˆ˜ ์žˆ๋„๋ก ํŒฉํ† ๋ฆฌ๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ํ”„๋ก์‹œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค. ์ฆ‰, ๊ณ„์‚ฐ ์ง€์—ฐ ๊ธฐ๋ฒ•์ด๋‚˜ ์ด์™€ ์œ ์‚ฌํ•œ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์—์„œ ์ด๋Ÿฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๐ŸŽƒ ํ™•์žฅโ€‹

์ฒ˜์Œ๋ถ€ํ„ฐ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฏฟ์Œ์€ ๋ฏธ์‹ ์ด๋‹ค. ๋Œ€์‹ ์— ์šฐ๋ฆฌ๋Š” ์˜ค๋Š˜ ์ฃผ์–ด์ง„ ์‚ฌ์šฉ์ž ์Šคํ† ๋ฆฌ์— ๋งž์ถฐ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๋‚ด์ผ์€ ์ƒˆ๋กœ์šด ์Šคํ† ๋ฆฌ์— ๋งž์ถฐ ์‹œ์Šคํ…œ์„ ์กฐ์ •ํ•˜๊ณ  ํ™•์žฅํ•˜๋ฉด ๋œ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ˜๋ณต์ ์ด๊ณ  ์ ์ง„์ ์ธ ์• ์ž์ผ ๋ฐฉ์‹์˜ ํ•ต์‹ฌ์ด๋‹ค. ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ(TDD), ๋ฆฌํŒฉํ„ฐ๋ง, ๊นจ๋—ํ•œ ์ฝ”๋“œ๋Š” ์ฝ”๋“œ ์ˆ˜์ค€์—์„œ ์‹œ์Šคํ…œ์„ ์กฐ์ •ํ•˜๊ณ  ํ™•์žฅํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ ๋‹ค.

์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์€ ๋ฌผ๋ฆฌ์ ์ธ ์‹œ์Šคํ…œ๊ณผ ๋‹ค๋ฅด๋‹ค. ๊ด€์‹ฌ์‚ฌ๋ฅผ ์ ์ ˆํžˆ ๋ถ„๋ฆฌํ•ด ๊ด€๋ฆฌํ•œ๋‹ค๋ฉด ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜๋Š” ์ ์ง„์ ์œผ๋กœ ๋ฐœ์ „ํ•  ์ˆ˜ ์žˆ๋‹ค.

p.200 ~ p.209 ์ฐธ๊ณ โ€‹

๐ŸŽƒ ํ…Œ์ŠคํŠธ ์ฃผ๋„ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์ถ•โ€‹

๊ด€์ ์œผ๋กœ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์€ ๊ทธ ์œ„๋ ฅ์ด ๋ง‰๊ฐ•ํ•˜๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋„๋ฉ”์ธ ๋…ผ๋ฆฌ๋ฅผ POJO๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ์ฆ‰ ์ฝ”๋“œ ์ˆ˜์ค€์—์„œ ์•„ํ‚คํ…์ฒ˜ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ์ง„์ •ํ•œ ํ…Œ์ŠคํŠธ ์ฃผ๋„ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์ถ•์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

์•„์ฃผ ๋‹จ์ˆœํ•˜๋ฉด์„œ๋„ ๋ฉ‹์ง€๊ฒŒ ๋ถ„๋ฆฌ๋œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•ด ๊ฒฐ๊ณผ๋ฌผ์„ ์žฌ๋นจ๋ฆฌ ์ถœ์‹œํ•œ ํ›„, ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉฐ ์กฐ๊ธˆ์”ฉ ํ™•์žฅํ•ด๋‚˜๊ฐ€๋„ ๊ดœ์ฐฎ๋‹ค.

์ตœ์„ ์˜ ์‹œ์Šคํ…œ ๊ตฌ์กฐ๋Š” ๊ฐ๊ธฐ POJO ๊ฐ์ฒด๋กœ ๊ตฌํ˜„๋˜๋Š” ๋ชจ๋“ˆํ™”๋œ ๊ด€์‹ฌ์‚ฌ ์˜์—ญ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ์„œ๋กœ ๋‹ค๋ฅธ ์˜์—ญ์€ ํ•ด๋‹น ์˜์—ญ ์ฝ”๋“œ์— ์ตœ์†Œํ•œ์˜ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ด€์ ์ด๋‚˜ ์œ ์‚ฌํ•œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด ํ†ตํ•ฉํ•œ๋‹ค. ์ด๋Ÿฐ ๊ตฌ์กฐ ์—ญ์‹œ ์ฝ”๋“œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ธฐ๋ฒ•์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๐ŸŽƒ ์˜์‚ฌ ๊ฒฐ์ •์„ ์ตœ์ ํ™”ํ•˜๋ผโ€‹

๋ชจ๋“ˆ์„ ๋‚˜๋ˆ„๊ณ  ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ์ง€์—ฝ์ ์ธ ๊ด€๋ฆฌ์™€ ๊ฒฐ์ •์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

๊ฐ€์žฅ ์ ํ•ฉํ•œ ์‚ฌ๋žŒ์—๊ฒŒ ์ฑ…์ž„์„ ๋งก๊ธฐ๋ฉด ๊ฐ€์žฅ ์ข‹๋‹ค. ์šฐ๋ฆฌ๋Š” ๋•Œ๋•Œ๋กœ ๊ฐ€๋Šฅํ•œ ๋งˆ์ง€๋ง‰ ์ˆœ๊ฐ„๊นŒ์ง€ ๊ฒฐ์ •์„ ๋ฏธ๋ฃจ๋Š” ๋ฐฉ๋ฒ•์ด ์ตœ์„ ์ด๋ผ๋Š” ์‚ฌ์‹ค์„ ๊นŒ๋จน๊ณ  ํ•œ๋‹ค. ๊ฒŒ์œผ๋ฅด๊ฑฐ๋‚˜ ๋ฌด์ฑ…์ž„ํ•ด์„œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ์ตœ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ชจ์•„ ์ตœ์„ ์˜ ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ๋‹ค. ์„ฑ๊ธ‰ํ•œ ๊ฒฐ์ •์€ ๋ถˆ์ถฉ๋ถ„ํ•œ ์ง€์‹์œผ๋กœ ๋‚ด๋ฆฐ ๊ฒฐ์ •์ด๋‹ค. ๋„ˆ๋ฌด ์ผ์ฐ ๊ฒฐ์ •ํ•˜๋ฉด ๊ณ ๊ฐ ํ”ผ๋“œ๋ฐฑ์„ ๋” ๋ชจ์œผ๊ณ , ํ”„๋กœ์ ํŠธ๋ฅผ ๋” ๊ณ ๋ฏผํ•˜๊ณ , ๊ตฌํ˜„ ๋ฐฉ์•ˆ์„ ๋” ํƒํ—˜ํ•  ๊ธฐํšŒ๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.

๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ชจ๋“ˆ๋กœ ๋ถ„๋ฆฌํ•œ POJO ์‹œ์Šคํ…œ์€ ๊ธฐ๋ฏผํ•จ์„ ์ œ๊ณตํ•œ๋‹ค. ์ด๋Ÿฐ ๊ธฐ๋ฏผํ•จ ๋•ํƒ์— ์ตœ์‹  ์ •๋ณด์— ๊ธฐ๋ฐ˜ํ•ด ์ตœ์„ ์˜ ์‹œ์ ์— ์ตœ์ ์˜ ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๊ธฐ๊ฐ€ ์‰ฌ์›Œ์ง„๋‹ค. ๋˜ํ•œ ๊ฒฐ์ •์˜ ๋ณต์žก์„ฑ๋„ ์ค„์–ด๋“ ๋‹ค.

๐ŸŽƒ ๋ช…๋ฐฑํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ์„ ๋•Œ ํ‘œ์ค€์„ ํ˜„๋ช…ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ผโ€‹

ํ‘œ์ค€์„ ์‚ฌ์šฉํ•˜๋ฉด ์•„์ด๋””์–ด์™€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ , ์ ์ ˆํ•œ ๊ฒฝํ˜์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ์„ ๊ตฌํ•˜๊ธฐ ์‰ฌ์šฐ๋ฉฐ, ์ข‹์€ ์•„์ด๋””์–ด๋ฅผ ์บก์ˆ ํ™”ํ•˜๊ธฐ ์‰ฝ๊ณ , ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—ฎ๊ธฐ ์‰ฝ๋‹ค. ํ•˜์ง€๋งŒ ๋–„๋กœ๋Š” ํ‘œ์ค€์„ ๋งŒ๋“œ๋Š” ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ ค ์—…๊ณ„๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ๋ชปํ•œ๋‹ค. ์–ด๋–ค ํ‘œ์ค€์€ ์›๋ž˜ ํ‘œ์ค€์„ ์ œ์ •ํ•œ ๋ชฉ์ ์„ ์žŠ์–ด๋ฒ„๋ฆฌ๊ธฐ๋„ ํ•œ๋‹ค.

๐ŸŽƒ ์‹œ์Šคํ…œ์€ ๋„๋ฉ”์ธ ํŠนํ™” ์–ธ์–ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.โ€‹

๋Œ€๋‹ค์ˆ˜ ๋„๋ฉ”์ธ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ๊ฑด์ถ• ๋ถ„์•ผ ์—ญ์‹œ ํ•„์ˆ˜์ ์ธ ์ •๋ณด๋ฅผ ๋ช…๋ฃŒํ•˜๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ์–ดํœ˜, ๊ด€์šฉ๊ตฌ, ํŒจํ„ด์ด ํ’๋ถ€ํ•˜๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ๋ถ„์•ผ์—์„œ๋„ ์ตœ๊ทผ ๋“ค์–ด DSL(Domain-Specific Language)์ด ์ƒˆ๋กญ๊ฒŒ ์กฐ๋ช… ๋ฐ›๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. DSL์€ ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋‚˜ ํ‘œ์ค€ ์–ธ์–ด๋กœ ๊ตฌํ˜„ํ•œ API๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. DSL๋กœ ์ง  ์ฝ”๋“œ๋Š” ๋„๋ฉ”์ธ ์ „๋ฌธ๊ฐ€๊ฐ€ ์ž‘์„ฑํ•œ ๊ตฌ์กฐ์ ์ธ ์‚ฐ๋ฌธ์ฒ˜๋Ÿผ ์ฝํžŒ๋‹ค.

์ข‹์€ DSL์€ ๋„๋ฉ”์ธ ๊ฐœ๋…๊ณผ ๊ทธ ๊ฐœ๋…์„ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ ์‚ฌ์ด์— ์กด์žฌํ•˜๋Š” ์˜์‚ฌ์†Œํ†ต ๊ฐ„๊ทน์„ ์ค„์—ฌ์ค€๋‹ค. ์• ์ž์ผ ๊ธฐ๋ฒ•์ด ํŒ€๊ณผ ํ”„๋กœ์ ํŠธ ์ดํ•ด๊ด€๊ณ„์ž ์‚ฌ์ด์— ์˜์‚ฌ์†Œํ†ต ๊ฐ„๊ทน์„ ์ค„์—ฌ์ฃผ๋“ฏ์ด ๋ง์ด๋‹ค. ๋„๋ฉ”์ธ ์ „๋ฌธ๊ฐ€๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด๋กœ ๋„๋ฉ”์ธ ๋…ผ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋„๋ฉ”์ธ์„ ์ž˜๋ชป ๊ตฌํ˜„ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์ค„์–ด๋“ ๋‹ค.

ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด DSL์€ ์ถ”์„ฑํ™” ์ˆ˜์ค€์„ ์ฝ”๋“œ ๊ด€์šฉ๊ตฌ๋‚˜ ๋””์ž์ธ ํŒจํ„ด ์ด์ƒ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฐ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ ์ ˆํ•œ ์ถ”์ƒํ™” ์ˆ˜์ค€์—์„œ ์ฝ”๋“œ ์˜๋„๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐ŸŽƒ ๊ฒฐ๋ก โ€‹

์‹œ์Šคํ…œ ์—ญ์‹œ ๊นจ๋—ํ•ด์•ผ ํ•œ๋‹ค. ๊นจ๋—ํ•˜์ง€ ๋ชปํ•œ ์•„ํ‚คํ…์ฒ˜๋Š” ๋„๋ฉ”์ธ ๋…ผ๋ฆฌ๋ฅผ ํ๋ฆฌ๋ฉฐ ๊ธฐ๋ฏผ์„ฑ์„ ๋–จ์–ด๋œจ๋ฆฐ๋‹ค. ๋„๋ฉ”์ธ ๋…ผ๋ฆฌ๊ฐ€ ํ๋ ค์ง€๋ฉด ์ œํ’ˆ ํ’ˆ์งˆ์ด ๋–จ์–ด์ง„๋‹ค. ๋ฒ„๊ทธ๊ฐ€ ์ˆจ์–ด๋“ค๊ธฐ ์‰ฌ์›Œ์ง€๊ณ , ์Šคํ† ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง€๋Š” ํƒ“์ด๋‹ค. ๊ธฐ๋ฏผ์„ฑ์ด ๋–จ์–ด์ง€๋ฉด ์ƒ์‚ฐ์„ฑ์ด ๋‚ฎ์•„์ ธ TDD๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์žฅ์ ์ด ์‚ฌ๋ผ์ง„๋‹ค.

๋ชจ๋“  ์ถ”์ƒํ™” ๋‹จ๊ณ„์—์„œ ์˜๋„๋Š” ๋ช…ํ™•ํžˆ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ ค๋ฉด POJO๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๊ด€์  ํ˜น์€ ๊ด€์ ๊ณผ ์œ ์‚ฌํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•ด ๊ฐ ๊ตฌํ˜„ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•˜๋“  ๊ฐœ๋ณ„ ๋ชจ๋“ˆ์„ ์„ค๊ณ„ํ•˜๋“ , ์‹ค์ œ๋กœ ๋Œ์•„๊ฐ€๋Š” ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์ˆ˜๋‹จ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ช…์‹ฌํ•˜์ž.