์ƒˆ์†Œ์‹

๋ฐ˜์‘ํ˜•
Spring

์šฐ์•„ํ•œ ๊ฐ์ฒด์ง€ํ–ฅ [์šฐ์•„ํ•œํ…Œํฌ์„ธ๋ฏธ๋‚˜] ์ •๋ฆฌ 5

  • -
๋ฐ˜์‘ํ˜•

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

 

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•˜๊ฒŒ๋˜๋ฉด ๊ธฐ์กด์— ์ ์—ˆ๋˜ ๋ฉ”์„œ๋“œ๋“ค์ด ๋ชจ๋‘ ์ปดํŒŒ์ผ์—๋Ÿฌ๋ฅผ ๋„์šธ๊ฒƒ์ด๋‹ค.

 

์—ฐ๊ด€๊ด€๊ณ„๋กœ ์ฐธ์กฐํ–ˆ๋˜ ๊ฒƒ๋“ค์ด ๊ฐ์ฒด๋ฅผ ๋Š์–ด๋ฒ„๋ฆฌ๊ฒŒ ๋˜๋‹ˆ๊น Entity๋‚ด๋ถ€์—์„œ ๊ตฌํ˜„ํ–ˆ๋˜ ์—ฐ๊ด€๊ด€๊ณ„ ๊ฐ์ฒด๋“ค์—์„œ error๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Id๋กœ ์ฐธ์กฐํ•˜๋Š” ๊ณตํ†ต ๋กœ์ง์„ ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•ด ํ•˜๋‚˜์— ๋ชฐ์•„ ๋„ฃ๋Š”๋‹ค.

๐ŸŽˆ๊ณผ์—ฐ ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ๋ณ€๊ฒฝ์ผ๊นŒ?

 

๊ฐ์ฒด ์ง€ํ–ฅ์€ ์—ฌ๋Ÿฌ๊ฐ์ฒด๋ฅผ ํ™•์ธํ•˜๋ฉด์„œ ๋กœ์ง์„ ํŒŒ์•…ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋กœ์ง์„ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต๋‹ค ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ๋กœ์ง์„ ํ•œ๋ฒˆ์— ๋ชจ์•„๋‘”๋‹ค๋ฉด ํ•ด๋‹น ๋กœ์ง์ด ํ•œ ๋ˆˆ์— ๋“ค์–ด์˜ค๊ธฐ ๋•Œ๋ฌธ์— ํŽธํ•˜๋‹ค.

์‘์ง‘๋„๋Š” ๊ฐ™์ด ๋ณ€๊ฒฝ๋˜๋Š” ์• ๋“ค์ด ๊ฐ™์ด ๋ชฐ๋ ค์žˆ๋Š”๊ฒƒ์ด ์‘์ง‘๋„๊ฐ€ ๋†’๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ๊ฐ์ฒด๋‚ด์— ๋ณ€๊ฒฝ๋˜๋Š” ๋กœ์ง์ด ๋ถ„์‚ฐ๋˜์–ด ์žˆ๋‹ค๋ฉด ์‘์ง‘๋„๊ฐ€ ๋‚ฎ์•„ ์ข‹์€ ์ฝ”๋“œ๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์—†๋‹ค.

๊ทธ๋ž˜์„œ ๋•Œ๋กœ๋Š” ์ ˆ์ฐจ์ง€ํ–ฅ์ด ๊ฐ์ฒด์ง€ํ–ฅ๋ณด๋‹ค ์ข‹์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๊ฒƒ์— ๋Œ€ํ•œ ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„๋Š” ์ž˜ ๊ฒฐ์ • ํ•ด์•ผํ•œ๋‹ค.

์ด๊ฒƒ๋„ ๋˜‘๊ฐ™์ด id์ฐธ์กฐ๋กœ ๋ฐ”๋€Œ๋ฉด์„œ ์ˆ˜์ˆ˜๋ฃŒ๋ถ€๊ณผํ•˜๋Š” ๋กœ์ง์—์„œ ์—๋Ÿฌ๊ฐ€ ํ„ฐ์ง„๋‹ค.

ํ•ด๋‹น ์˜ค๋ฅ˜์˜ ๋ณธ์งˆ์€ ๋„๋ฉ”์ธ ๋กœ์ง์ด ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฏ€๋กœ ์ผ์–ด๋‚˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

๐ŸŽˆํ•ด๊ฒฐ๋ฐฉ๋ฒ•

์•„๊นŒ์ฒ˜๋Ÿผ ๋กœ์ง์„ ํ•˜๋‚˜๋กœ ๋ชจ์•„์„œ ์ ˆ์ฐจ์ง€ํ–ฅ์ ์œผ๋กœ ๊ตฌ์„ฑ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋‹ค๋ฅธ ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ•์€ ๋„๋ฉ”์ธ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

๊ฐ€์žฅ ์‹ฌํ”Œํ•œ ๋ฐฉ๋ฒ•์€ ์ ˆ์ฐจ์ง€ํ–ฅ์ด๊ณ  ๋„๋ฉ”์ธ์ด๋ฒคํŠธ๋Š” ์•ฝ๊ฐ„ ์‹ ๊ฒฝ์จ์•ผํ•  ๋ถ€๋ถ„์ด ์žˆ๋‹ค.

๐ŸŽˆํ•ด๊ฒฐ 1. ์ ˆ์ฐจ์ง€ํ–ฅ ๋กœ์ง

ํ•˜์ง€๋งŒ,

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถ”๊ฐ€๋˜๋ฉด์„œ ๊ฒฐ๊ตญ ์‚ฌ์ดํด์ด ์ƒ๊ธฐ๊ฒŒ๋œ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ์„ ์—ญ์ „์‹œํ‚ค๊ณ  Order์— ์žˆ๋˜ ์„œ๋น„์Šค๋ฅผ deliver๋กœ ๋ฐ€์–ด ๋„ฃ์œผ๋ฉด์„œ ์‚ฌ์ดํด์„ ์—†์•จ ์ˆ˜ ์žˆ๋‹ค.

๐ŸŽˆํŒจํ‚ค์ง€ ์˜์กด์„ฑ

์ง€๊ธˆ๊นŒ์ง€ ํ–ˆ๋˜๊ฑฐ๋ฅผ ํ† ๋Œ€๋กœ ํŒจํ‚ค์ง€์˜ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ฒซ์งธ, ์ค‘๊ฐ ๊ฐ์ฒด๋ฅผ ๋‘์–ด ์˜์กด์„ฑ์„ ํ•ด์†Œํ•˜๋Š”๋ฐฉ๋ฒ•, ๋‘๋ฒˆ์งธ, ์ธํ„ฐํŽ˜์ด๋ฅผ ์ถ”์ƒํ™”์‹œ์ผœ ์˜์กด์„ฑ์„ ์—ญ์ „์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ• ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•œ๋‹ค.

๐ŸŽˆํ•ด๊ฒฐ 2. ๋„๋ฉ”์ธ ์ด๋ฒคํŠธ

์ง€๊ธˆ๊นŒ์ง€์˜ ๋ฌธ์ œ์ ์€ Order๊ฐ€ ๋ฐœ์ƒ๋˜์—ˆ์„๋•Œ, ๋ฐ˜๋“œ์‹œ Delivery์™€ Shop์„ ๊ฑฐ์ณ๊ฐ€์•ผ ํ•˜๋Š” ๊ฒƒ์˜ ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค. ์ฆ‰ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋„ˆ๋ฌด ๋†’๋‹ค๋ผ๋Š” ๋ฌธ์ œ์ธ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ ์ด ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์‹ถ์„ ๋•Œ ๋„๋ฉ”์ธ ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๊ธฐ์กด ๋ฐฉ๋ฒ•์€ ๊ทธ๋ƒฅ ๋ฉ”์‹œ์ง€๋ฅผ ์ง์ ‘ ๋ฟŒ๋ ธ์ง€๋งŒ ์ง€๊ธˆ์€ ์ด๋ฒคํŠธ ๋ฐœํ–‰๋งŒ ์‹œํ‚จ๋‹ค

๊ทธํ›„ ๊ฐ๊ฐ์˜ ๋„๋ฉ”์ธ์ด ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ด๋ฒคํŠธ๋กœ ๊ฒฐํ•ฉ๋„๋ฅผ ๋А์Šจํ•˜๊ฒŒํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์›๋ž˜๋Š” ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ œ์ผ ์ข‹์œผ๋‚˜ ์œ„์˜ ์ฝ”๋“œ๋Š” SpringData์˜ ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด์žˆ๋Š” ๋กœ์ง์„ ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ•

Order๋Š” AbsractAggregateRoot๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋ก์‹œํ‚จ๋‹ค. ์ด๋•Œ DB์— ์ปค๋ฐ‹์ด ๋‚ ์•„๊ฐ€๋Š” ์ˆœ๊ฐ„ ํ•ด๋‹น ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœํ–‰๋œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

์ดํ›„์—๋Š” ์ด๋ฒคํŠธํ•ธ๋“ค๋Ÿฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ ์ด๋Š” Spring์˜ EventListener ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌ์„ฑํ•œ๋‹ค.

ํ•˜์ง€๋งŒ,

์œ„์™€ ๊ฐ™์ด ์ถ”๊ฐ€๋ฅผ ํ•œํ›„ ๋„๋ฉ”์ธ ๊ด€๊ณ„๋ฅผ ๊ทธ๋ ค๋ณด๋ฉด ์‚ฌ์ดํด์ด ๋ˆ๋‹ค.

์•„๊นŒ ์‚ฌ์ดํด์„ ํ•ด๊ฒฐํ•˜๋Š” 2๊ฐ€์ง€์˜ ์˜ต์…˜์ด์žˆ์—ˆ๋Š”๋ฐ ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ์ง€๊ธˆ์˜ ๋ฌธ์ œ๋Š”

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ShopํŒจํ‚ค์ง€์— ์žˆ๊ธฐ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ์‚ฌ์ดํด์ด๋‹ค.

๐ŸŽˆ์‚ฌ์ดํด์„ ์ œ๊ฑฐํ•˜๋Š” 3๋ฒˆ์งธ ๋ฐฉ๋ฒ•

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

๐ŸŽˆ์ •๋ฆฌ

๋‹ค์Œ๊ณผ ๊ฐ™์ด 3๊ฐ€์ง€์˜ ๋ฐฉ๋ฒ•์ค‘ ์–ด๋А๊ฒƒ์„ ์„ ํƒํ•˜๋ผ๋Š” ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ, ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„์— ๋”ฐ๋ผ์„œ ์„ ํƒ์„ ์ž˜ํ•ด์•ผํ•œ๋‹ค

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

์ด๋ ‡๊ฒŒ ๋„๋ฉ”์ธ ๋‹จ์œ„๋กœ ์ฐข์–ด๋‚ด๋ฉด์„œ ๊ฐ๊ฐ์˜ ์‹œ์Šคํ…œ ์ด๋ฒคํŠธ๋ฅผํ†ตํ•œ ์‹œ์Šคํ…œ ํ†ตํ•ฉ๋„ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

์ธํ„ฐ๋„ ์ด๋ฒคํŠธ๋ฅผ → external ์ด๋ฒคํŠธ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์™ธ๋ถ€์‹œ์Šคํ…œ์œผ๋กœ ๋ณ€๊ฒฝ์„ ํ•˜๊ธฐ๋„ํ•œ๋‹ค.

๋ณดํ†ต์€ ์‹œ์Šคํ…œ๋‹จ์œ„๋กœ ์„œ๋น„์Šค๋ฅผ ์ชผ๊ฐœ๊ณ  ์‹œ์Šคํ…œ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ํ†ตํ•ฉ์„ ์‹œํ‚จ๋‹ค.

 

๊ผญ ์ €๋ ‡๊ฒŒ ํ•ด์•ผํ•˜๋‚˜์š”?

→ ์•„๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•œํ†ต์œผ๋กœ ํ•˜๋”๋ผ๋„ ์ „์ฒด์ ์ธ ์˜์กด์„ฑ์‚ฌ์ดํด๊ด€๋ฆฌ๋Š” ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.

 
๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.