๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿคท๐Ÿผ‍โ™€๏ธ Etc.../- ๊ธฐํƒ€

[์•„ํ‹ฐํด ๋ฆฌ๋ทฐ] ๋ฐ˜ ๋ฒ„๋…ผ์˜ The Ideal Domain-Driven Design Aggregate Store?

by Wonit 2023. 4. 2.

ํ•ด๋‹น ๊ธ€์€ ๊ฐœ๋ฐœ, ๊ธฐ์ˆ ๊ด€๋ จ ์•„ํ‹ฐํด์ด๋‚˜ ๋ธ”๋กœ๊ทธ ๊ธ€ ํ˜น์€ ์œ ํŠœ๋ธŒ ์˜์ƒ์˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๊ฑฐ๋‚˜ ํ›„๊ธฐ๋ฅผ ์ ๋Š” ๊ธ€์ž…๋‹ˆ๋‹ค.

๋ฆฌ๋ทฐํ•  ๊ธ€: '๋ฐ˜ ๋ฒ„๋…ผ' ์˜ 'The Ideal Domain-Driven Design Aggregate Store?'

 

The Ideal Domain-Driven Design Aggregate Store? | Kalele

Kalele Leading experts in Domain-Driven Design (DDD), Event-Driven, and Reactive Architecture. Providing consulting, programming, and world-class training services to clients who seek quality, expert results in software architecture and development.

kalele.io

 

์ฃผ์ œ์™€ ๊ฐ„๋‹จ ์š”์•ฝ

 

  • 2014 NYC ์—์„œ ์—ด๋ฆฐ DDD eXchange ์—์„œ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์ €์žฅ์— ๋Œ€ํ•œ ํ† ๋ก ์ด ์ง„ํ–‰๋˜์—ˆ๋‹ค
    • ๊ตฌ์‹์ด๋ผ๊ณ  ํ‘œํ˜„ํ•˜๋Š” ORM ์ €์žฅ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์˜๊ฒฌ์ด ์žˆ์—ˆ๋‹ค
    • ์ด์œ ๋Š” ORM ์˜ mapping option ์ด ๋ชจ๋ธ๋ง์„ ๋ฐฉํ•ดํ•œ๋‹ค๋Š” ๋ฐ์— ์žˆ๋‹ค
    • ๊ทธ๋ž˜์„œ ๋ฐ˜ ๋ฒ„๋…ผ์€ ORM ์„ ์ด์šฉํ•˜๋Š” ๋Œ€์‹ ์— json ์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์•ˆํ–ˆ๋‹ค
    • json ๊ธฐ๋ฐ˜ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์ €์žฅ์†Œ๋ฅผ ํ™œ์šฉํ•œ๋‹ค๋ฉด ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ  mapping ์ •๋ณด๋“ค์„ ์กฐ์ž‘ํ•˜๋Š”๋ฐ ๋“ค์–ด๊ฐ€๋Š” ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ฃผ์žฅํ•œ๋‹ค
    • ์ด๋ฅผ ํ†ตํ•ด์„œ Object-Relation ์˜ ์ž„ํ”ผ๋˜์Šค ๋ถˆ์ผ์น˜ ์—†์ด ๊ฐœ๋ฐœ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค
  • ORM ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์–ด๋– ํ•œ ๋Œ€์•ˆ์ด ์žˆ๋Š”๊ฐ€?
    • orm ์„ ์ด์šฉํ•˜์ง€ ์•Š๊ณ  json ์„ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์„ ๋– ์˜ฌ๋ฆฐ๋‹ค๋ฉด ๋‹น์—ฐํžˆ MongoDB ๋ฅผ ๋– ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค
  • MongoDB ๋Š” ACID ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Domain Event ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค
    • ์ฆ‰, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ผ๊ด€์„ฑ์ด ๋–จ์–ด์ง€๊ฒŒ๋  ์ˆ˜ ์žˆ์Œ
    • TokuMX ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด์„œ MongoDB ๊ฐ€ ACID tx ๋ฅผ ์ง€์›ํ•  ๊ฒƒ์ด๋ผ๋Š” ์†Œ๋ฌธ์ด ์žˆ์Œ
  • ๋ฐ˜๋ฒ„๋…ผ์ด ์ƒ๊ฐํ•˜๋Š” ์ตœ๊ณ ์˜ DDD Aggregate ์ €์žฅ์†Œ๋Š” PostgreSQL 9.4 ์ž„
    • json ๊ณผ jsonb(json binary) ๋ฅผ ๋ฅผ ์ง€์›ํ•จ
    • jsonb ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด json ์— ๋Œ€ํ•ด์„œ ์ง์ ‘ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ, ํ˜น์€ ํ•„๋“œ์— ๋Œ€ํ•œ ์ธ๋ฑ์‹ฑ์„ ์ง€์›ํ•จ
    • postgreSQL ์€ RDB ์ด๋ฏ€๋กœ ACID ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•จ

 

๋ฆฌ๋ทฐ์™€ ๋‚˜์˜ ํ•ด์„

 

์ด ๊ธ€์— ๋Œ€ํ•ด์„œ๋Š” ๋‚ด๊ฐ€ ํ•˜๊ณ ์‹ถ์€ ์ด์•ผ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด๋‚˜๋„ ๋งŽ๋‹ค.

 

๊ด€๋ จํ•˜์—ฌ ํ˜„์žฌ library ๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ๊ธฐ๋„ ํ•˜๊ณ  ๋‹จ์ˆœํ•œ ์ƒ๊ฐ์„ ๋‚˜์—ดํ•˜๊ธฐ์—๋Š” ์˜คํ•ด๋ฅผ ๋ถˆ๋Ÿฌ์ผ์œผํ‚ฌ ๋งŒํ•œ ๊ฒƒ๋“ค์ด ๋งŽ๊ธฐ์— ์ถ”ํ›„์— ์ด ์ฃผ์ œ๋งŒ ๊ฐ€์ง€๊ณ  ๋”์šฑ ๊นŠ๊ฒŒ ์ด์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ฒ ๋‹ค

 

๊ทธ๋ž˜์„œ ์ด ์„น์…˜์—์„œ๋Š” ๊ด€๋ จํ•˜์—ฌ ๊ถ๊ธˆํ•œ ๊ฒƒ๋“ค์„ ์ฐพ์•„๋ณธ ์ ์ด ์žˆ๋Š”๋ฐ, ๊ทธ ๋‚ด์šฉ๋“ค์— ๋Œ€ํ•ด์„œ ๊ฐ„๋žตํžˆ ์ ์–ด๋ณด๊ฒ ๋‹ค.

 

  • ์™œ MongoDB ๋Š” ACID ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๊ฐ€
    • ์—„๊ฒฉํ•œ tx ์˜ guarantee ๋ณด๋‹ค ํ™•์žฅ์„ฑ, ์„ฑ๋Šฅ, flexibility ๋ฅผ ์šฐ์„ ์‹œํ•˜๋Š” ์„ค๊ณ„ ์ฒ ํ•™ ๋•Œ๋ฌธ
    • mongoDB ๋Š” ๋Œ€๊ทœ๋ชจ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅธ ์†๋„๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„๋จ
    • ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์ด ๋ณต์žกํ•œ tx ๊ฐ€ ์•„๋‹Œ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ์„ฑ๋Šฅ์— ์ตœ์ ํ™”๋จ
    • ACID ๋Œ€์‹  eventual consistency ๋ฅผ ์ œ๊ณตํ•จ
      • ๋งŒ์•ฝ tx ๋ฅผ ์—„๊ฒฉํžˆ ์ ์šฉํ•œ๋‹ค๋ฉด ๋ถ„์‚ฐ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๋Š”๋ฐ์— ๊นŒ์ง€ locking ์„ ํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์ด ํ•„์š”ํ•  ๊ฒƒ์ด๊ณ  ๊ฒฐ๊ตญ ๋ฐ˜์˜์— ๋Œ€ํ•œ ์‹œ๊ฐ„์  ์ œ์•ฝ์ด ์กด์žฌํ•จ
      • ๊ฒฐ๊ตญ eventtual consistency ๋ฅผ ์ ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ž‘์—…์„ ๋” ๋น ๋ฅด๊ณ  ํ™•์žฅ์„ฑ ๋†’๊ฒŒ ์œ ์ง€ํ•จ
    • ACID ์™€ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ multi-documentation tx ๋ฅผ ์ด์šฉํ•˜์—ฌ atomic update ๋ฅผ ์ง€์›ํ•จ
      • ํ•˜์ง€๋งŒ RDB ์˜ tx ๋ณด๋‹ค๋Š” ์ œํ•œ์ ์ž„

๋Œ“๊ธ€