ํด๋น ๊ธ์ ๊ฐ๋ฐ, ๊ธฐ์ ๊ด๋ จ ์ํฐํด์ด๋ ๋ธ๋ก๊ทธ ๊ธ ํน์ ์ ํ๋ธ ์์์ ๋ด์ฉ์ ์ ๋ฆฌํ๊ฑฐ๋ ํ๊ธฐ๋ฅผ ์ ๋ ๊ธ์ ๋๋ค.
๋ฆฌ๋ทฐํ ๊ธ: '๋ฐ ๋ฒ๋ ผ' ์ '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 ๋ณด๋ค๋ ์ ํ์ ์
๋๊ธ