์ก์๋ฆฌ3
by JiwonDev
์ดํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์ด ์ธํ๋ผ๋ฅผ ์์กดํ๋ ๊ฒฝ์ฐ
- ๊ตฌํ์ ๊ต์ฒดํ๊ธฐ ์ด๋ ต๋ค
- ์์ฉ ์๋น์ค๋ ๋๋ฉ์ธ ๋ก์ง ํ ์คํธ๊ฐ ์ด๋ ต๋ค. (์ธํ๋ผ ์์ด ํ ์คํธํ๊ธฐ ๊น๋ค๋กญ๋ค. ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅด๊ฒ ๋์ฌ ์ ์๋ค.)
์ ์ด๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊น? ๋ค๋ฅธ ๋ ๋ฒจ(๊ณ ์์ค, ์ ์์ค)์ด ์์ฌ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ํ ์๋งคํ๊ธฐ (๊ณ ์์ค)
- JPA๋ก ์์์ฑ ๊ฐ์ฒด ๋ณด๊ดํ๊ธฐ (์ ์์ค)
- DB์ SQL ๋ ๋ฆฌ๊ธฐ(์ ์ ์์ค)
๐ญ ํด๊ฒฐ์ฑ DIP. ๊ณ ์์ค์ ์ ์ฅ์์ ์ ์์ค์ ์ถ์ํํ๋ผ.
๊ทธ๋ฐ๋ฐ ์ถ์ํํ ๋ ๋ง์ด ์ค์ํ๋ ๋ถ๋ถ์ด ์๋ค.
'์ถ์ํ'๋ฅผ ํ๋ผ๊ณ ํ๋ ๋จ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ฌ๋ฆฌ๊ณ , High-Class์ ์ด๋ฆ์ ๋ฝ์์ ์ฌ์ฉํ๋ ๊ตฌ์กฐ
์ฌ์ค ์ด๋ ์ ์ผ ์ฒ์ ๋ดค๋ ๊ตฌ์กฐ์ ๋ค๋ฅธ๊ฒ ์๋ค. ์์ ๋ชจ๋์ด ํ์ ๋ชจ๋์ ์์กดํ๊ณ ์์ผ๋๊น
์ฌ๋ฐ๋ฅธ DIP๋ ๊ฐ์ฒด ๋ณธ์ธ ์ ์ฅ์์ ์๊ฐํ๋ ๊ฒ์ด๋ค.
'์์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ'์ด ์๋๋ผ '๋๋ ๋ฌด์ธ๊ฐ๋ฅผ ์ ์ฅํ๋ค'๊ฐ ์ถ์ํ์ด๋ค.
'๋ฉ์ผ ์๋น์ค์ ์์ฒญ'์ด ์๋๋ผ '์๋ฆผ์ ์ ์กํ๋ค'๊ฐ ์ถ์ํ์ด๋ค.
๋๋ฉ์ธ์๋ ๊ตฌํ์ฒด๊ฐ ์์ผ๋ฉด ์๋๋ค. ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ๋ง ์์ด์ผ ํ๋ค.
DIP๋ฅผ ์ํ๋ ค๋ฉด ๊ณ ์์ค ๋ชจ๋ ์ ์ฅ์์ ์ถ์ํํด์ผํ๋ค.
๐ญ Aggregate(์งํฉ), ์ฐธ์กฐ
๋ง์ ๊ฐ์ฒด๋ค์ ๊ด๊ณ. ์ฒ(๊ณ ์์ค)์ ๊ด๋ฆฌ๋ฅผ ์์ด๋ฒ๋ฆฌ๊ฒ ๋๋ค.
๋๋ฌด(๊ฐ ๊ฐ์ฒด)๋ค์๊ฒ ์ด์ ์ด ๋ง์ถฐ์ง๊ฒ ๋๋ค.
๋ชจ๋ ๊ฐ์ฒด๊ฐ ๋์์ ์ฌ์ฉ๋์ง ์๋๋ค. ๊ฐ๊ฐ์ ์ฑ ์๊ณผ ์ญํ ์ด ๋๋์ด์ ธ์๋ค.
์์์์ค์์ ๊ด๋ จ๋ ๊ฐ์ฒด๋ฅผ ๋ฌถ์ด์ ํฐ ๊ทธ๋ฆผ์ผ๋ก ๋ด์ผํ๋ค.
์ด๋ฌ๋ผ๊ณ ๋์จ ๊ฐ๋ ์ด Aggregate (n ์๊ทธ๋ฆฌ๊ฒ, v ์๊ทธ๋ฆฌ๊ฒ์ดํธ), ํ๊ธ๋ก ๊ตฐ์งํ
- ๊ด๋ จ๋ ๊ฐ์ฒด๋ค์ ๋ฌถ์ (์งํฉ)
- ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ํ ๋จ์๋ก ์ฒ๋ฆฌ๋จ
- ๋น์ทํ ๋ผ์ดํ ์ฌ์ดํด์ ๊ฐ๋ ๊ฐ์ฒด๋ค (์ญ์ ์ ํจ๊ป ์ญ์ ๋จ)
- ๊ฒฝ๊ณ๋ฅผ ๊ฐ์ง. ํ ๊ฐ์ฒด๋ ํ๋์ Aggregate๋ฅผ ๊ฐ์ง
- ํ์์ฑ : ๋ง์ ๋๋ฉ์ธ ๋ชจ๋ธ๋ค์ ๊ฐ๋จํ๊ณ ์ดํด ๊ฐ๋ฅํ ์์ค์ผ๋ก ๋ฌถ์ ์ ์์
- ์ฐ๊ด์ ๊ฐ์๋ฅผ ์ค์ฌ์ ๋ณต์ก๋๋ฅผ ๊ฐ์์ํฌ ์ ์์
Order order = orderRepository.findById(orderId); // Aggregate ์์ ์ฒด๋ฅผ ๊ฐ์ ธ์ด
// ์์
์ Aggregate์ Root๋ก ๋ช
๋ น์ ๋ด๋ฆผ.
// '์ถ์ํ๋ ๋น์ฆ๋์ค ์์
'์ ์์ฒญํจ. ๊ตฌ์ฒด์ ์ธ ๋ด์ฉ์ ์ ์ง ์์
order.changeShippingInfo(newShippingInfo);
order.cancle();
์๊ตฌ์ฌํญ์ ์ด์ฌํ ์ณ๋ค๋ณด๋ฉด ์ฝ๊ฒ ์ชผ๊ฐค ์ ์๋ ๊ตฐ์ด ์์.
ํ์ง๋ง ์ ๋งคํ ๊ฒฝ์ฐ๋ ๋ง์. Moive, Showing, Discount ์ด๋ป๊ฒ ์ชผ๊ฐ์ผ ํ๋๊ฑธ๊น?
ACG์ ๊ฒฝ๊ณ๋ ๊ท์น, ํธ๋์ญ์ ๋ฒ์๋ก ์ชผ๊ฐ๋ฉด ๋จ.
๋ ๊ฐ๊ฐ ๋ฐ๋ก ๋ ์ ์๋๊ฐ? = ๋ค๋ฅธ ๊ฒฝ๊ณ๋ฅผ ๊ฐ์ง๊ณ ์๋๊ฐ? = ๋ค๋ฅธ ACG์ธ๊ฐ?
์๋ฅผ ๋ค์ด 'ํ ์ธ'์ ์ํ์ ํจ๊ป ๋์ํจ
ํผ์์ ๋ฐ๋ก ๋ ์ ์์ = Movie Aggregate
ํ์ง๋ง ํ ์ธ ์ ์ฑ ์ด ๋ณต์กํด์ง๋ฉด? SRP (๋จ์ผ์ฑ ์์์น)์ ์ ์ฉํด์ผํจ. -> AGG ๊ฒฝ๊ณ๊ฐ ๋ฌ๋ผ์ง
ํธ๋์ญ์ ๋ฒ์(AGG ๊ฒฝ๊ณ)๋ ์ธ์ ๋ ๋ฐ๋ ์ ์์.
JPA๋ฅผ ์ฒ์ ์ฐ๋ฉด ์๋์ ๊ฐ์ ๊ฐ์ฒด ๊ทธ๋ํ ํ์์ด ๋๋ฌด ํธํจ
๊ทผ๋ฐ ์ด๋ ์ ์ฌ์ ์ธ ๋ฌธ์ ๊ฐ ์์. '์ค์ฉ'
๋ง์น ์์์ ๊ธฐ๋ฅ ์ฌ์ฌ์ฉ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฅธ์์ญ์ ๊ธฐ๋ฅ์ ์๋ฌด๋ ์ง ์๊ฒ ๋ฐ๊ฟ
์์๊ฐ์ฒด๊ฐ Discount๋ฅผ ๋ฐ๊พธ๋๊ฑด ๋งค์ฐ ์ด์ํ ๋์์. ํ์ง๋ง ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ๊ธฐ์ Side-Effect ๋ฐ์
+ DBA์์ ๊ฐ๋ฑ. ๊ฐ์ฒด์์๋ ํธํ์ง๋ง SQL๋ฌธ์ ๋ณต์กํ๊ฒ ๋๊ฐ. ์ฑ๋ฅ์ด ๋จ์ด์ง
์๋ก์ ์ฐธ์กฐ๊ฐ ๋ณต์กํ๋ค= ์์ ๊ณผ ํ์ฅ์ด ํ๋ค๋ค = MSA(๋ง์ดํฌ๋ก ์๋น์ค ์ํคํ ์ณ)๋ ๊ฟ๋ ๊พธ์ง ๋ง๋ผ
๊ทธ๋์ ๊ฒฐ๋ก ์? AGG๊ฐ์ ID๋ก๋ง ์ฐธ์กฐํด๋ผ. ์กฐ๊ธ ๋ถํธํ์ง๋ง ์์ง๋๋ฅผ ๋์ด๊ณ ํ์ฅ์ฑ์ ์ฑ๊ธธ ์ ์๋ค.
- ์ฐธ์กฐ ๋ณต์ก๋๋ฅผ ๋ฎ์ถ ์ ์๋ค. (๋ชจ๋ธ๊ณผ ๊ตฌํ์ด ๊น๋ํด์ง๋ค)
- ์ค์ฉ์ ๋ฐฉ์งํ์ฌ ์์ง๋๋ฅผ ๊ฐํํ๋ค.
- AGG๋ณ ํ์ฅ์ด ์ฝ๋ค.
- ์กฐํ ์ฑ๋ฅ์ด ์ข์์ง๋ค.
- ๊ทธ๋ฌ๋ ์ฌ์ฉํ๊ธฐ ๋ถํธํด์ง๋ค. ๋ ๋ง์ ์ฝ๋๊ฐ ์๊ธด๋ค.
Q/A : ์๋๋ฐ.. ์๋๋ฐ์ DBA๊ฐ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด์ ํ ์ด๋ธ์ 8๊ฐ๋ฅผ ์กฐ์ธํด์ ๊ฐ์ ธ์ค๋์
โก ๊ผญ ORM์ด ์์ด์ผ Aggregate๋ฅผ ๊ตฌํํ ์ ์๋๊ฒ ์๋.
โก ๊ตฌ์ฒด์ ์ธ ๊ธฐ์ ์ด ์๋๋ผ, ์ถ์ํ๋ ๋๋ฉ์ธ์ ์ค์ฌ์ผ๋ก Aggregate๋ฅผ ์๊ฐ.
โก CQRS๋ ๊ณ ๋ คํด๋ณผ ๊ฒ
๐ญ DBA๋ฅผ ์์ด๋ ๋ฐฉ๋ฒ CQRS
๋ณต์กํ ๋๋ฉ์ธ์ ์กฐํ ํน์ง : ์ฌ๋ฌ AGG์ ๊ฑธ์ณ์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํจ
๋น ๋ฅด๊ฒ ์กฐํํ๊ธฐ ์ํด์ ํ๋ฐฉ ์ฟผ๋ฆฌ์, ํ๋ฐฉ์ ์กฐํํด์ผํจ (Left Join, DB ์ ์ฉ๊ธฐ๋ฅ ํ์ํด)
์ด๋ฅผ ํ๋์ ๋ชจ๋ธ๋ก ์ฒ๋ฆฌํ๋ ค๊ณ ํ๋ฉด, ๋๋ฉ์ธ ๋ชจ๋ธ์ด ์ง์ง ๋๋ฝ๊ฒ ๋ณต์กํด์ง
๊ฐ๋จํ ํด๊ฒฐ์ฑ : CQRS
ํ๋์ ๋ชจ๋ธ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ [์ํ ๋ณ๊ฒฝ ๋ชจ๋ธ]๊ณผ [์กฐํ ๋ชจ๋ธ]์ ๋ถ๋ฆฌ
์ํ๋ณ๊ฒฝ๊ณผ ์กฐํ๋ฅผ ๋ค๋ฅธ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉ
์ํ๋ณ๊ฒฝ์ JPA๋ฅผ ์จ์ ๊ฐ์ฒด์ ์ผ๋ก ์ฝ๊ฒ ์ง๊ณ ์กฐํ๋ MyBatis ๊ฐ์ ๊ฑธ๋ก SQL์ ์ง์ ์ง๋ฉด ํด๊ฒฐ
โก ์ํ ๋ณ๊ฒฝ์ ๋ณดํต 1,2๊ฐ์ ๊ฐ์ฒด๋ฐ์ ์๊ฑด๋๋ฆผ. (DBA์ ์๋น ๋ถ์์ผ x)
โก ์กฐํ๋ ์ ๋ง ์ฌ๋ฌํ ์ด๋ธ์ ์กฐํํด์ผํจ (ํ๋ฐฉ ์ฟผ๋ฆฌ๋ฅผ ์ฌ๋ฌ๋ฒ ๋๋ ์ ์กฐํํ๋ค? DBA ์ด๋ถ ์ค๋ฅด๊ธฐ ์์)
์ฌ๊ธฐ์ ๋ ๋์๊ฐ์, ์กฐํ ํธ๋ํฝ์ด ์์ฒญ๋๋ค๋ฉด ์์ DB๋ฅผ ์ชผ๊ฐ์ ํ์ฅํ๋ ๋ฐฉ๋ฒ๋ ์์
CQRS๋ฅผ ํ๋ฉด ๋๋ฉ์ธ ์ค๊ณ๋ฅผ ํ๋๋ฐ '์กฐํ ์ฑ๋ฅ'์ ๊ณ ๋ คํ ํ์๊ฐ ์์.
์กฐํ์ชฝ ๋ชจ๋ธ์ ์บ์๋ฅผ ์ ์ฉํ๊ณ , ์ฟผ๋ฆฌ๋ฅผ ๋ฏ์ด๊ณ ์น๋ฉด ๋๋๊ฑฐ๊ณ
๋๋ฉ์ธ ๋ชจ๋ธ์ ๊ทธ๋๋ก ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ์ฌ์ฉํ๋ฉด ๋จ. (์ํ๋ณ๊ฒฝ์ SQL๋ฌธ์ด ๋ณต์กํ์ง ์์)
๋จ์ : ๊ท์ฐฎ์. ๋ฐ์ดํฐ ๋๊ธฐํ๋ฌธ์ ๋ ์๊ณ , CQRS๋ก ๋๋๋ฉด์ ์์คํ ์ด ๋ณต์กํด์ง
๊ฒฐ๊ตญ ์ด๊ฒ๋ ํธ๋ ์ด๋ ์คํ์. ๋๋ฉ์ธ ๋ชจ๋ธ์ ๊น๋ํ๊ฒ ๊ฐ์ ธ๊ฐ๋๋์ , ์์คํ ์ ๋ณต์กํ๊ฒ ๋ง๋ค ๊ฒ ์ธ๊ฐ?
CQRS๋ฅผ ๋ฐฐ์ฐ๊ณ ์ข์ ์ค๊ณ์ ๋ํ ํ์ต์ ๋ ์ค๋ ๊ฑธ๋ฆฌ๊ฒ ์ง๋ง
ํ๋ฒ ๋ฐฐ์๋์๊ฑธ ์ฌ์ฉํ๋๋ฐ ์์ฒญ๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ์ง ์์. ๋ ๋ง์ ์ฝ๋๋ฅผ ์์ฑํ๋ค๊ณ ๋ ์ค๋๊ฑธ๋ฆฌ๋๊ฒ ์๋.
์ฐ๋ฆฌ ํ๋ก์ ํธ ๋๋ฉ์ธ์ด ๋ณต์กํ๊ณ ๋ฏธ๋์ ํธ๋ํฝ์ด ์ฆ๊ฐํ ๊ฒ์ด ๊ฑฑ์ ๋๋ค๋ฉด ๋ฏธ๋ฆฌ ์์ ํด๋์ผ๋ฉด ๋ถ๋ช ๋์์ด ๋ ๊ฒ์.
๐ญ ์ด๋ฒคํธ์ ํธ๋์ญ์
์๋งค๋ฅผ ์ทจ์๋ฅผ ํ๋ฉด ํ๋ถ์ ํด์ค์ผํจ.
์ด๋ ๋๋ฉ์ธ ๋ชจ๋ธ์์ ์ฒ๋ฆฌ๋ฅผ ํด์ผํ ๊น?
๊ทผ๋ฐ ์ ์๊ฐํด๋ณด๋ฉด '์ธ๋ถ ์๋น์ค'๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํธ๋์ญ์ ์ฒ๋ฆฌ๊ฐ ๋งค์ฐ ๊น๋ค๋ก์
- ํ๋ถ์ ์ฒ๋ฆฌํ๋ค๊ฐ ์ธ๋ถ์๋น์ค(ex ์ด๋ฉ์ผ)์ด ์๋ํ์ง ์์ผ๋ฉด ์คํจ์ธ๊ฐ?
- ํ๋ถ์ ์ฒ๋ฆฌํ๋ค๊ฐ ์ธ๋ถ์๋น์ค๊ฐ ๋ธ๋ญํน๋๋ฉด ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค. ์ด๋ฅผ ํธ๋์ญ์ ๋จ์๋ก ๋ฌถ์ด์ ๊ธฐ๋ค๋ ค์ผ ํ ๊น?
- ์๋งค ์ทจ์์ ํ๋ถ ๋ก์ง์ด ํ ์ฝ๋์์ ์๋๊ฒ ๋ง์๊น? SRP๋?
- ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๋ฉด DI๋ก ์ฃผ์ ์..? '๋ฌธ์๋ก ํ๋ถ ๋ด์ญ์ ๋ณด๋ธ๋ค' ๋ผ๋ ์ถ๊ฐ ๊ธฐ๋ฅ์ ํ๋ถ ๋๋ฉ์ธ์ ๋ณ๊ฒฝํด์ผํ ๊น?
์ด๋ฒคํธ๋ ๋ฌด์์ธ๊ฐ?
- ๊ณผ๊ฑฐ์ ๋ฒ์ด์ง ์ด๋ค ๊ฒ. ์ฃผ๋ก ์ํ๊ฐ ๋ณํํจ
- ์ํ ์ถ๊ฐํจ (NewMoviedCreated)
- ์๋งคํจ (RevervationCreated)
- ์ํ ์์ ์ผ์ ์ถ๊ฐํจ(ShowingAdded)
- ์ํ ์ ๋ณด ๋ณ๊ฒฝํจ (MovieInfoChanged)
- ์ํ ๊ฐ๊ฒฉ ์ ์ฑ ๋ณ๊ฒฝํจ(PricePolicyUpdated)
- ์๋งค ์ทจ์ํจ(ReservationCanceled)
์ด๋ฒคํธ๋ง ์์ผ๋ฉด ์๋ฌด๋ฐ ๋์์ ํ์ง ์์.
์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๋ ์ฃผ์ฒด์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ ์ฒ๋ฆฌํ ์ฃผ์ฒด๊ฐ ์์ด์ผํจ.
์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐ๋ก ์ฌ์ฉํ ์ ์์. ๋ค๋ฅธ ์ด๋ฒคํธ๋ฅผ ํธ์ถ
๐ญ ๋๋ฉ์ธ๊ณผ ์ด๋ฒคํธ
๋๋ฉ์ธ์ ์ํ ๋ณ๊ฒฝ์ ์ด๋ฒคํธ๋ก ํํ
[~ํ ๋, ~๊ฐ ๋ฐ์ํ๋ฉด, ๋ง์ฝ ~ํ๋ฉด] ๋ฑ์ ์๊ตฌ์ฌํญ์ด ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ค๋ฉด, ์ด๋ฒคํธ๋ก ํํํ ์ ์์
์ํ์ ๋ณ๊ฒฝ์ ์ด๋ฒคํธ๋ก ๋ณ๊ฒฝํ๊ฒ๋๋ฉด, ์ฑ ์์ ๋๋ ์ ์์.
๋๋ฉ์ธ์์ ์ทจ์๋ก์ง์ ๊ฐ์ง๊ณ , ์ํ๋ฅผ ๋ณ๊ฒฝํ๋๊ฒ ์๋
๋๋ฉ์ธ์์๋ '์ทจ์ ์ด๋ฒคํธ'๋ฅผ ๋ง๋ค๊ณ , ์ด๋ฒคํธ ๋์คํจ์ณ์ ์ด๋ฒคํธ๋ฅผ ๋๊ฒจ์ ๋ฐ์์ํด
์๋งค๋ ๋์ด์ ํ๋ถ๋ก์ง์ ๋ํด์ ์ ํ์๊ฐ ์์. SRP
๋ํ ์ด๋ฒคํธ-๋์คํจ์ณ ๊ตฌ์กฐ๋ ์ด๋ฏธ ์๋๋ก์ด๋, UI์์ ์ต์ํ ๊ตฌ์กฐ์.
์ด๋ฒคํธ ํธ๋ค๋ฌ์ ๊ธฐ๋ฅ์ ํ์ฅํ๊ธฐ๋ ์ฌ์ '๋๋ฉ์ธ์ ๋ฐ๊พธ์ง ์๊ณ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์' OCP
๊ทผ๋ฐ์.. ์ด๋ฒคํธ๋กํ๋ฉด... ํธ๋์ญ์ ์ฒ๋ฆฌ๊ฐ ๋ณต์กํด์ง๋๋ฐ ๋๊ธฐํ๋ ์ด๋ป๊ฒ ํ๋์?
์ฐ๋ฆฌ์ ์๊ตฌ์ฌํญ์ ํญ์ ์ ๋งคํ ๋จ์ด๋ฅผ ๋ง์ด ์ฌ์ฉํจ.
'์ด๊ฑฐ ํ์๋ง์, ์ด๊ฑธ ํด์ฃผ์ธ์' โก ๊ณผ์ฐ ์ด๊ฒ ์ฆ์์ผ๊น? ์๋งค ์ทจ์ํ, ๋ฐ๋ก ํ๊ธ์ ํด์ผํ ๊น?
์ด๋ฉ์ผ ๋ฐ์ก์ ์ทจ์ํ๋ค๊ณ ํ์๊ฐ์ ์ ๋ชปํ ์ด์ ๊ฐ ์์.
๋ฐ์ดํฐ ์ผ๊ด์ฑ์ด, ์ฆ์๊ฐ ์๋๋ผ ์์ด, ์๋ถ๋ค์ ํด๊ฒฐ๋๋ ๊ด์ฐฎ์ ๊ฒฝ์ฐ๊ฐ ๋ง์
๊ทธ๋์ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํด๋ ๊ด์ฐฎ๋ค๋ ๊ฑฐ์.
๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ๋ฉ์์ง ํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ.
- ๊ณ ๋ฏผ์ฌํญ : ์คํจํ๋ฉด ์ฌ์ ์ก์ ์ด๋ป๊ฒ ํ๋
๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ก์ปฌ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ DB์ ์ ์ฅํ๊ณ , ๋๋ฆฌ์(ํฌ์๋)๊ฐ ์ผ์ ์ฃผ๊ธฐ๋ก DB๋ฅผ ์ฝ์ด์ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ
- ์ด๋ฒคํธ ๋ก์ง์ด ๋จ์ํด์ง. ๊ทธ๋ฌ๋ ํฌ์๋๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ค์ผํจ
3๋ฒ์งธ ๋ฐฉ๋ฒ. ๋ก์ปฌ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ DB์ ์ ์ฅํ๋ ๊ฑด ๊ฐ์๋ฐ, ๊ทธ๊ฑธ ์๋๋ฐฉ์ด ์ฝ๋ ๊ฒ (pull)
์ด๋ฒคํธ๋ฅผ API ํํ๋ก ์ ๊ณตํด์ ๋๊ฐ ์ฝ์ด๋ผ๊ณ ํ๋ ๊ฒ.
- ๊ธฐ์กด์ ๋ฉ์์งํ(RebbitMQ) ๋ ํด๋ผ์ด์ธํธ์๊ฒ ์ด๋ฒคํธ๋ฅผ ์ค์ผํจ. ๊ด๋ฆฌํด์ค์ผํจ.
- ์๋์ ๊ฐ์ ๋ฐฉ์์ ๋ฉ์์งํ(Kafka)๋ ํ๋ ์ผ์ด ์์. ๋งค์ฐ๋น ๋ฆ. ๋๊ฐ ์์์ ๊ฐ์ ธ๊ฐ๋ผ ์ด๋ง๋ฆฌ์ผ
๋ค๋ง ์ด๋ฒคํธ๋ฅผ ๋์ ํ ๋๋ ์กฐ์ฌํด์ผํจ.
- ์ด๋ฒคํธ ๋์ฐฉ ์์๋ฅผ ๊ณ ๋ คํด์ผํจ
- ์ด๋ฒคํธ ๋ฐ์ก ์คํจ์ ์ฌ๋ฐ์ก์ ์ด๋ป๊ฒ ํ ๊ฒ์ธ๊ฐ
- ์ด๋ฒคํธ๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฒ๋ฆฌ ํ ๊ฒ์ธ๊ฐ. (*์ฌ๋ฐ์ก์ ์์๊ฐ ๊ผฌ์)
๊ทธ๋์ 2๋ฒ, 3๋ฒ์ ๋๊ฐ ์์์ ํด~ ๋ฐฉ์์ผ๋ก ์ด๋ฒคํธ๋ฅผ ๋ฐ์กํ๋ ๊ฒ.
์ฐธ๊ณ ๋ก ๊ตณ์ด RebbitMQ, Kafka๊ฐ์ ๊ฑธ ์ธ ํ์ ์์. (ํนํ ์ ์ ์ด ์์ฃผ๊ทธ๋ผ. ํ๋ก์ ํธ ๊ตฌ์กฐ๊ฐ ์์ด๋ณด์ด๋๊น)
๊ธฐ์ ์ ์ง์ฐฉํ์ง๋ง๋ผ ์คํ๋ง + DB๋ง ์์ด๋ ๊ตฌํ ๊ฐ๋ฅํ๋ค.
๊ฐ๋ฐ์๋ ๊ท ํ๊ฐ์ด ์์ด์ผํ๋ค. ๊ฒฐ๊ตญ ๋ชจ๋ ๊ฒ์ ํธ๋ ์ด๋ ์คํ์ด๋ค. ์ ๋นํ ํด์ผํ๋ค.
- DIP๋ฅผ ํ๋ต์๊ณ ๋ชจ๋ ๊ณณ์ ์ธํฐํ์ด์ค๋ฅผ ๋ฐ์ง๋ง๋ผ. ์ธํฐํ์ด์ค๋ ํธ๋ ์ด๋ ์คํ์ด๋ค.
- Aggregate๋ฅผ ์ง ๋ง๋๋ก ์ง์ง๋ง๋ผ. ํ์ฌ ์ฐ๋ฆฌ ์๋น์ค์ ๊ตฌ์กฐ, DBA์ ์๋ ผํ๊ณ ์ฒ์ฒํ ๋์ ํ๋ผ
- CQRS, ์ด๋ฒคํธ๋ ๋ง์ฐฌ๊ฐ์ง
๋ค๋ง ๋ด๊ฐ ์๋๊ฒ ์๋ค๋ฉด? ์ผ๋จ ์ง๋ฌ๋ณด์. ์๋จน์ผ๋ฉด์ ์ด๊ฑฐ์ง๋ก ์ฌ์ฉํด๋ณด์. ํผ๋๋ฐฑ์ ๋ฐ์ผ๋ฉฐ ๊ท ํ๊ฐ์ ๋ฐฐ์๋๊ฐ์.
์ง๋ฌธ
๋ฉ์์ง๋ฅผ ์ฃผ๋๊ฑด ์ด์ฐ๋ณด๋ฉด ์์ฝํ๊ฑฐ์ง. ๋๊ฐํด!
๋ค๋ง DDD Actor์์ ๋งํ๋ ๋ฉ์์ง๋ ๋น๋๊ธฐ ๋ฐฉ์์ ์ฐ์ฐ์ฒ๋ฆฌ์ ๊ฐ๊น์ต๋๋ค. ๊ฐ actor๊ฐ ๋ฝ์๋ด๋ ์ด๋ฒคํธ
๊ณ ์์ค์ ์ ์์ค์ ์์กดํ์ง ์๋๋ค. DIP ์์กด์ฑ์ ๋ฐฉํฅ์ ์ญ์ ํ๊ฑฐ๋ผ
'๐์ผ์ > ๋ฉํ ๋ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฐ์ํ ๋ชจ๋ ธ๋ฆฌ์ค (0) | 2021.11.13 |
---|---|
์์กด์ฑ์ ์ด์ฉํด ์ค๊ณ ์งํ์ํค๊ธฐ (0) | 2021.11.13 |
์ก์๋ฆฌ2 (0) | 2021.11.12 |
์ก์๋ฆฌ1 (0) | 2021.11.12 |
ํ๋ก์ ํธ ๊ธฐํ (2021 11 06) (0) | 2021.11.06 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev