songining
ํšŒ์‚ฌ์—์„œ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ์‹์— ์ต์ˆ™ํ•ด์ง€๋‹ค๋ณด๋ฉด ์ ์  ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ฐ”๋ผ๋ณด๋Š” ๊ด€์ ์ด ์˜จ์ „ํžˆ ์ต์ˆ™ํ•œ ๋ฐฉ์‹์„ ๋”ฐ๋ผ ๊ฐ€๊ฒŒ ๋˜๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ๊ฐœ์ธ์ ์ธ ์ƒ๊ฐ์„ ํ•œ๋ฒˆ ๋” ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

Fat Service ์ง€์–‘ํ•˜๊ธฐ

๊ฐ์ฒด์ง€ํ–ฅ์›์น™์„ ๋”ฐ๋ฅด๋ฉฐ ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜๋กœ ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•  ๋•Œ, ์„œ๋น„์Šค๊ฐ€ ๋ณต์žกํ•ด์ง€๋ฉด ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ๊ณ ๋ฏผํ•ด์•ผํ•  ๋ถ€๋ถ„๋“ค์ด ๋งŽ์•„์ง„๋‹ค. 

๋‚˜๋Š” ๋ณดํ†ต ๊ตฌ์„ฑํ•  ๋•Œ presentation, application, domain, infrastructure๋กœ ๋‚˜๋ˆ„๊ณค ํ•˜๋Š”๋ฐ,

์—ฌ๊ธฐ์„œ application(service) ๊ณผ domain ์€ DDD ๊ด€์ ์—์„œ ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

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

๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์—ญํ• ๊ณผ ์ฑ…์ž„์„ ๊ฐ€์ ธ๊ฐ€๊ฒŒ ๋˜๋ฉด ์„œ๋น„์Šค ๋ฉ”์„œ๋“œ ํ•˜๋‚˜๋‹น ๋กœ์ง์ด ๊ฐ„๋‹จํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋Š์ •๋„ ๋Œ€์ฒ˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. Service๋Š” ๋„๋ฉ”์ธ์—๊ฒŒ ๋„๋ฉ”์ธ ๋กœ์ง์„ ์œ„์ž„ํ•˜๋Š” ์—ญํ• ๊ณผ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ๋งŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์•„์ง ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๊ฐ€ ๊ฐ€์ ธ์•ผํ•  ์—ญํ• ๊ณผ ์ฑ…์ž„์ด ํฌ๋‹ค๊ณ  ๋Š๊ปด์งˆ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ด๋Ÿด๋•Œ ๋ณดํ†ต ๋ช…๋ น๊ณผ ์กฐํšŒ๋ฅผ ๋‚˜๋ˆ„์–ด XXCommandService, XXQueryService ๋กœ ๋‚˜๋ˆ„๊ฑฐ๋‚˜ ๊ธฐ๋Šฅ ํ•˜๋‚˜์— ๋Œ€ํ•œ ์œ ์Šค์ผ€์ด์Šค๋ณ„๋กœ Service๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

๋‹จ์ˆœํ•œ CRUD ๋ผ๋ฉด ์ผ๋‹จ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ดœ์ฐฎ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๋‹ค๋งŒ ์‹œ์Šคํ…œ ๊ธฐ๋Šฅ์˜ ์ผ๋ถ€๋กœ์„œ ํฐ ์œ ์Šค์ผ€์ด์Šค๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค๋ฉด ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ด์ƒ์ ์ด๋‹ค. ๋ฌผ๋ก  ๋ชจ๋“  ์œ ์Šค์ผ€์ด์Šค์— ๋Œ€ํ•ด ์„œ๋น„์Šค๋ฅผ ์ „๋ถ€ ๋ถ„๋ฆฌํ•ด์„œ ๋งŒ๋“ค์ˆ˜๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„๋ฆฌ ํ•„์š”์„ฑ์„ ๋Š๋‚„ ์‹œ์ ์— ๋ถ„๋ฆฌํ•ด๋„ ๋Šฆ์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

 

Facade ๋Š” ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ• ๊นŒ?

์˜ˆ์ „์— ์„œ๋น„์Šค๊ฐ€ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์•ˆ๋˜๋Š”๋‹ค๋Š” ์ƒ๊ฐ์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋‹ค. ๋ ˆ์ด์–ด๊ฐ„ ์—ญํ• ์ด ๋ช…ํ™•ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ณ  ์„œ๋น„์Šค๊ฐ€ ํƒ€ ์„œ๋น„์Šค๋ฅผ ์˜์กดํ•˜๊ฒŒ ๋  ๋•Œ ์ฐธ์กฐ ๊ด€๊ณ„๊ฐ€ ๋‚˜์ค‘์— ๋’ค์„ž์—ฌ์„œ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ํž˜๋“ค์–ด์ง€์ง€ ์•Š์„๊นŒ ์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋Ÿฐ ๊ฒฝ์šฐ๋ผ๋ฉด Facade๋ฅผ ๋„์ž…ํ•˜๋Š”๊ฒŒ ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.  

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

 

๋ณ€ํ™”์— ๋Œ€์‘ํ•˜๊ธฐ ์šฉ์ดํ•œ, ์œ ์—ฐํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ ธ๊ฐ€๊ธฐ

๊ฐ์ฒด์ง€ํ–ฅ์›์น™์„ ๊ณ ๋ คํ•ด์„œ ์„ค๊ณ„ํ•ด์•ผํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ผ๊นŒ? ์†”์งํžˆ ์–ด๋Š ์ˆœ๊ฐ„๋ถ€ํ„ฐ๋Š” ๋‚ด๊ฐ€ ์™œ ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์„ค๊ณ„๋ฅผ ์ง€ํ–ฅํ•˜๊ณ  ์žˆ๋Š”๊ฐ€์— ๋Œ€ํ•ด ์ƒ๊ฐ์„ ํ•˜์ง€ ์•Š์•˜๋‹ค. ์—…๋ฌด๋ฅผ ํ•˜๋‹ค๋ณด๋ฉด ์š”๊ตฌ์‚ฌํ•ญ์ด ๋น ๋ฅด๊ฒŒ ๋ณ€ํ™”ํ•˜๊ธฐ๋„ ํ•˜๊ณ  ์–ด์ œ ์ง  ์ฝ”๋“œ๊ฐ€ ์˜ค๋Š˜ ๋ ˆ๊ฑฐ์‹œ๊ฐ€ ๋˜๊ธฐ๋„ ํ•œ๋‹ค. ์• ์ž์ผ ๊ฐœ๋ฐœ ์„ ์–ธ์—์„œ๋„ ์ด์•ผ๊ธฐํ•˜๋“ฏ์ด ๊ณ„ํš์— ๋”ฐ๋ฅด๊ธฐ๋ณด๋‹ค๋Š” ๋ณ€ํ™”์— ๋Œ€์‘ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ค‘์š”ํ•˜๋‹ค. 

๋ณ€๊ฒฝ๊ณผ ํ™•์žฅ์— ์šฉ์ดํ•œ ์„ค๊ณ„๋ฅผ ์œ„ํ•ด์„œ๋Š” OCP, DIP ๋ฅผ ์ง€ํ‚ค๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ณ  ๊ฐ์ฒด์˜ ์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌํ•  ํ•„์š”์„ฑ์ด ์žˆ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ž˜ ์„ค๊ณ„ํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ์˜ ๋ณ€๊ฒฝ ์—†์ด ํ™•์žฅ์— ์šฉ์ดํ•œ ๊ตฌ์กฐ๊ฐ€ ๋œ๋‹ค. ์•ž์œผ๋กœ ํ•จ๊ป˜ ์ฝ”๋“œ๋ฅผ ๋””๋ฒจ๋กญํ•ด๋‚˜๊ฐ€์•ผํ•  ํŒ€๊ณผ ๋‚˜๋ฅผ ์œ„ํ•ด ๊ธฐ์ดˆ๋ฅผ ํŠผํŠผํžˆ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๋ฒˆ์™ธ) ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜

์ด์ „ ํšŒ์‚ฌ์—์„œ๋Š” ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ผ์—ˆ๊ณ  ํ˜„ ํšŒ์‚ฌ์—์„œ๋Š” ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜๋ฅผ ์“ฐ๊ณ  ์žˆ๋‹ค. ๋‘˜ ๋‹ค DDD๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ณ  ์žˆ์ง€๋งŒ JPA ๋ฅผ ์“ฐ๋Š” ํ™˜๊ฒฝ์ด๋ผ๋ฉด ๋„๋ฉ”์ธ ๋กœ์ง๊ณผ ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ์™€ ์˜์†์„ฑ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š๋Š” ์ด์ƒ ํฌํŠธ์™€ ์–ด๋Œ‘ํ„ฐ๋กœ ๋บ„๋งŒํ•œ ๋กœ์ง๋“ค์ด ๋งŽ์ด ์—†๋‹ค๊ณ  ๋Š๊ผˆ๋‹ค. 

์ด์ „ ํšŒ์‚ฌ์—์„œ๋Š” WebFlux + R2dbc ๋ฅผ ์‚ฌ์šฉํ–ˆ์—ˆ๋˜๋งŒํผ JPA์™€ ๊ฐ™์ด ORM ๊ฐ•๊ฒฐํ•ฉ์ด ์—†์—ˆ์–ด์„œ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„์ž…ํ–ˆ์„ ๋•Œ์˜ ์žฅ์ ์ด ๋ช…ํ™•ํ–ˆ๋‹ค. ๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋ณ„๋„๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ์˜์†์„ฑ, ์™ธ๋ถ€ ํ†ต์‹ ๊ณผ ๊ฐ™์€ ๋กœ์ง์„ ํฌํŠธ๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถ„๋ฆฌํ•ด์„œ ์ฑ…์ž„์„ ์œ„์ž„ํ•˜์˜€์„ ๋•Œ ์„œ๋น„์Šค ๋กœ์ง์ด ๊ฐ„๋‹จํ•ด์ง€๊ณ  ๋˜ ๋‹ค๋ฅธ ๊ตฌํ˜„์ฒด๋กœ ๊ฐˆ์•„๋ผ์šฐ๊ธฐ๋„ ์šฉ์ดํ–ˆ๋‹ค.

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