๋๋ฉ์ธ ๋ชจ๋ธ๊ณผ Bounded Context
๋๋ฉ์ธ ๋ชจ๋ธ๊ณผ ๊ฒฝ๊ณ
๋๋ฉ์ธ์ ์๋ฒฝํ๊ฒ ํํํ๋ ๋จ์ผ ๋ชจ๋ธ์ ๋ง๋๋ ์๋?
- ๋๋ฉ์ธ์ ๋ค์ ์ฌ๋ฌ ํ์ ๋๋ฉ์ธ์ผ๋ก ๊ตฌ๋ถ๋๋ค.
- ๋ชจ๋ ํ์ ๋๋ฉ์ธ์ ๋ง์ง ์๋ ๋ชจ๋ธ์ ๋ง๋ค๊ฒ ๋๋ค.
๋๋ฉ์ธ์ ์ด๋ฆ๊ณผ ์กด์ฌ
-
์ด๋ฆ์ ๊ฐ์ง๋ง ๋ค๋ฅธ ์ญํ
- ์นดํ๋ก๊ทธ ๋๋ฉ์ธ : ์ํ(์ํ ์ด๋ฏธ์ง, ์ํ๋ช , ๊ฐ๊ฒฉ)
- ์ฌ๊ณ ๊ด๋ฆฌ ๋๋ฉ์ธ : ์ํ(์ค์กดํ๋ ๊ฐ๋ณ ๊ฐ์ฒด๋ฅผ ์ถ์ ๋ชฉ์ )
-
์ด๋ฆ์ ๋ค๋ฅด์ง๋ง ๊ฐ์ ์ญํ
- ํ์ ๋๋ฉ์ธ : ํ์
- ์ฃผ๋ฌธ ๋๋ฉ์ธ : ์ฃผ๋ฌธ์
- ๋ฐฐ์ก ๋๋ฉ์ธ : ๋ณด๋ด๋ ์ฌ๋
-
๊ฐ์ ์ฉ์ด๋ผ๋ ์๋ฏธ๊ฐ ๋ค๋ฅด๊ณ ๊ฐ์ ๋์์ด๋ผ๋ ์ง์นญํ๋ ์ฉ์ด๊ฐ ๋ค๋ฅผ ์ ์๊ธฐ ๋๋ฌธ์ ํ ๊ฐ์ ๋ชจ๋ธ๋ก ๋ชจ๋ ํ์ ๋๋ฉ์ธ์ ํํํ๋ ค๋ ์๋๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ด ์๋๋ค.
-
ํ์ ๋๋ฉ์ธ๋ง๋ค ๋ชจ๋ธ์ ๋ง๋ค์ด์ผ ํ๋ค.
-
๊ฐ ๋ชจ๋ธ์ ๋ช ์์ ์ผ๋ก ๊ตฌ๋ถ๋๋ ๊ฒฝ๊ณ๋ฅผ ๊ฐ์ ธ์ ์์ด์ง ์๋๋ก ํด์ผ ํ๋ค.
-
์์ด๊ธฐ ์์ํ๋ฉด ๋ชจ๋ธ์ ์๋ฏธ๊ฐ ์ฝํด์ง ๋ฟ๋ง ์๋๋ผ
-
ํ์ ๋๋ฉ์ธ ๋ณ๋ก ๋ค๋ฅด๊ฒ ๋ฐ์ ํ๋ ์๊ตฌ์ฌํญ์ ๋ชจ๋ธ์ ๋ฐ์ํ๊ธฐ ์ด๋ ค์์ง๋ค.
Bounded Context
- ๋ชจ๋ธ์ ํน์ ํ Context์์ ์์ ํ ์๋ฏธ๋ฅผ ๊ฐ๋๋ค.
- ์ด๋ ๊ฒ ๊ตฌ๋ถ๋๋ ๊ฒฝ๊ณ๋ฅผ ๊ฐ๋ Context๋ฅผ DDD์์๋ Bounded Context๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- Bounded Context๋ ๋ชจ๋ธ์ ๊ฒฝ๊ณ๋ฅผ ๊ฒฐ์ ํ๋ฉฐ ํ ๊ฐ์ Bounded Context๋ ๋ ผ๋ฆฌ์ ์ผ๋ก ํ ๊ฐ์ ๋ชจ๋ธ์ ๊ฐ๋๋ค.
- ํ ์กฐ์ง ๊ตฌ์กฐ์ ๋ฐ๋ผ ๊ฒฐ์ ๋๊ธฐ๋ ํ๋ค.
ํ๋์ ๋๋ฉ์ธ ์์ 2๊ฐ์ Bounded Context
๋๊ฐ์ ๋๋ฉ์ธ ์์ 1๊ฐ์ Bounded Context
์ฃผ์ํ ์ .
- ํ์ Domain์ ๋ชจ๋ธ์ด ๋ค์์ด์ง ์๋๋ก ํ๋ ๊ฒ์ด๋ค.
- ๊ฐ๋ณ Bounded Context Package๋ก ๊ตฌ์ฑํ์ฌ ํ์ Domain์ด ์์ด์ง ์๋๋ก ํ์ฌ ํจ๊ณผ๋ฅผ ๋ผ ์ ์๋ค.
- ๋๋ฉ์ธ์ด ์์ด๊ฒ ๋๋ค๋ฉด ๊ธฐ๋ฅ ํ์ฅ์ด ์ด๋ ต๊ฒ ๋๊ณ ์ด๋ ์๋น์ค์ ๊ฒฝ์๋ ฅ์ ๋จ์ด๋จ๋ฆฌ๋ ์์ธ์ด ๋ ์ ์๋ค.
Bounded Context์ ๊ตฌํ
- Bounded Context๋ ์๋๋ฅผ ๋ชจ๋ ํฌํจํ๊ธฐ๋ ํ๋ค.
- ํํ ์์ญ
- ์์ฉ ์๋น์ค
- ๋๋ฉ์ธ
- ์ธํ๋ผ ์์ญ
์ฃผ์ํ ์ .
- ๋ชจ๋ Bounded Context๋ฅผ ๋ฐ๋์ Domain Driven์ผ๋ก ๊ฐ๋ฐํ ํ์๊ฐ ์๋ค.
- ๊ฐ๋จํ DAO์ ๋ฐ์ดํฐ ์ค์ฌ์ VO(Value Object)๋ฅผ ์ด์ฉํด์ ๊ฐ๋ฐํด๋ ์ ์ง๋ณด์ํ๋ ๋ถ๋ถ์ ํฐ ๋ฌธ์ ๊ฐ ์๋ค.
- ๋๋ฉ์ธ ๊ธฐ๋ฅ ์์ฒด๊ฐ ๋จ์ํ๋ฉด ์๋น์ค-DAO๋ก ๊ตฌ์ฑ๋ CRUD ๋ฐฉ์์ ์ฌ์ฉํด๋ ์ฝ๋๋ฅผ ์ ์ง๋ณด์ํ๋ ๋ฐ ๋ฌธ์ ๋์ง ์๋๋ค.
CQRS Pattern(Command Query Resposibility Segregaton)
- ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ช ๋ น ๊ธฐ๋ฅ๊ณผ ๋ด์ฉ์ ์กฐํํ๋ Query ๊ธฐ๋ฅ์ ์ํ ๋ชจ๋ธ์ ๊ตฌ๋ถํ๋ Pattern
- ํ๋์ Bound Context ์์ CRUD์ Domain Driven ๋ฐฉ์์ ์์ด์ ์ ์ฉํ ์๋ ์๋ค.
- Domain : ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ช ๋ น ๊ธฐ๋ฅ
- DAO(Data Access Object) : ์กฐํ ๊ธฐ๋ฅ
- CQRS๊ฐ ๋ํ์ ์ธ Pattern
Bound Context ๊ฐ ํตํฉ
์(Bound Context)๋ฅผ ํตํฉํด์ผ ํ๋๊ฐ?
- ์๋ก ๋ค๋ฅธ Bound Context์์ ์ด๋ฆ์ ๊ฐ์ง๋ง ๋๋ฉ์ธ ๊ด์ ์ด ๋ฌ๋ผ์ ๋ด์ฉ์ด ๋ค๋ฅธ Model์ด ์๋ค.
- ๊ฐ๋จํ๊ฒ ์์๋ฅผ ๋ ๋ค๋ฉด?
- ์ถ์ฒ ์์คํ ๊ณผ ์ถ์ฒ์ ์ฌ์ฉํ๋ ์นดํ ๊ณ ๋ฆฌ ์์คํ ์ ์ํ์ ๋ํ ์ ๋ณด๊ฐ ๋ค๋ฅด๋ค.
- ์ถ์ฒ ์์คํ : ์ํ์ ๋ํ ์ถ์ฒ ์ ์์ ๊ฐ์ ์ถ์ฒ์ ํ์ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค.
- ์นดํ ๊ณ ๋ฆฌ ์์คํ : ์นดํ ๊ณ ๋ฆฌ ์ ๋ณด์ ๊ฐ์ ์นดํ ๊ณ ๋ฆฌ์ ํ์ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค.
- ์ ๊ณตํ๋ ์ธก์์ ํด๋ผ์ด์ธํธ๋ฅผ ์ ๊ณตํด์ผ ํ๋ค.
- ์ฌ์ฉํ๋ ์ธก์์ ์ ๋ง์ ๋ง๊ฒ ๋ณํํ๋ ์์ ์ด ํ์ํ๋ค.
- ์ง์ REST API๋ฅผ ํธ์ถํ์ฌ ํตํฉํ๋ ๋์ ํ๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ ์ ์ผ๋ก ํตํฉํ๋ ๋ฐฉ์๋ ์๋ค.
Bound Context ๊ฐ ๊ด๊ณ
- ์์์ ์ธ๊ธํ๋ ๊ฒ์ฒ๋ผ ์ฌ์ฉํ๋ ์ธก์ ์ ๊ณตํ๋ ์ธก์ ์์กด์ฑ์ ๊ฐ์ง๊ฒ ๋๋ค.
- ์ ๊ณตํ๋ ์ธก์ด ํ๋กํ ์ฝ์ ๋ณ๊ฒฝํ๊ฒ ๋๋ฉด ์ฌ์ฉํ๋ ์ธก์์๋ ๋ง์ ์์ ์ฌํญ์ด ๋ฐ์ํ ์ ์๋ค.
- ๋ํ์ ์ธ ์ : ์ ๊ณต[๊ฒ์], ์ฌ์ฉ[๋ธ๋ก๊ทธ, ์นดํ, ๋ฉ์ผ]
- ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฐ์ดํฐ ํํ๋ก ์ ๊ณตํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ๋ฑ์ฅ
- Google Protocol Buffer
- XML, JSON ํํ์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ํํ
์์ ๋ฐฉ์ง ๊ณ์ธต(Anticorruption Layer)
- ์ ๊ทธ๋ฆผ ์ฒ๋ผ ํ๋์ Layer๋ฅผ ์ถ๊ฐํด์ ์ธ๋ถ์ ์ธํฐํ์ด์ค ๋ณ๊ฒฝ์๋ ๊ธฐ์กด ๋๋ฉ์ธ์ ์ํฅ๋๋ฅผ ๋ฎ์ถ ์ ์๋ค.
๊ณต์ ์ปค๋(Shared Kernel)
- ๋ Bound Context๊ฐ ๊ฐ์ ๋ชจ๋ธ์ ๊ณต์ ํ๋ ๊ฒฝ์ฐ
- ์ฅ์
- ์ค๋ณต ๊ฐ๋ฐ์ ๋ฐฉ์งํ ์ ์๋ค.
- ๋จ์
- ํ ํ์์ ์์๋ก ๋ชจ๋ธ์ ๋ณ๊ฒฝํด์๋ ์๋๋ค.
- ๋ณ๊ฒฝ์ด ํ์ํ ๊ฒฝ์ฐ ์ปค๋ฎค๋์ผ์ด์ ๋น์ฉ์ด ์์๋๋ค.
์ ๋ฆฌํ๋ฉฐ
- ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ์์ ์๋ฆญ ์๋ฐ์ค๋
๋๊ท๋ชจ ์กฐ์ง์์ ๋๋ฌด ํฐ ๋จ์ ๋ชจ๋ธ์ ์ผ๊ด๋๊ฒ ์ ์งํ๋ ๊ฒ์ด ๋นํ์ค์
์ด๋ผ๋ฉด์ ๋ ๋ฆฝ์ ์ธ ๋ณดํธ์ ์ธ์ด๋ฅผ ๊ฐ๋ฐํ ์ ์๋๋ก ๋๋ฉ์ธ ์์ญ์ ์ ํํ๋๋ก ๊ถํฉ๋๋ค. ์ปค๋ฎค๋์ผ์ด์ ์ ๋ฌธ์ ๋ฅผ ๊ทน๋ณตํ๋ ๊ฒ DDD์ ๋ชฉ์
์ค ํ๋์ธ๋ฐ ์คํ๋ ค DDD ๋๋ฌธ์ ์ปค๋ฎค๋์ผ์ด์ ์ด ๋ณต์กํด์ง๋ค๋ฉด ์ด๋ DDD์ ์ ์ด ๋ชฉ์ ์๋ ๋ง์ง ์์ต๋๋ค.
Bounded Context ์ ๋ต์ ์ฌ๋๋ค๊ณผ ์ปค๋ฎค๋์ผ์ด์ ์ ํตํด ๋ง๋ค์ด ๊ฐ๋ ๊ฒ์ด๋ผ ์๊ฐ๋ฉ๋๋ค.