C# ๊ธฐ๋ฐ Clean Architecture ๋ฐ ๋ถ์ฐ ์์คํ ์ผ๊ด์ฑ ํ๋ณด ์ ๋ต
Clean Architecture con c# (Trabajo en progreso ๐ง๐ท๐ฝ)
AI ์์ฝ
Context
์ถ์์ ์ด๊ณ ๋ณต์กํ ์ํํธ์จ์ด ์ํคํ ์ฒ ์ค๊ณ์ ์ค๋ฌด์ ์ ์ฉ ํ๊ณ์ ๋ถ์. ํนํ ๋๋ฉ์ธ ๋ก์ง๊ณผ ์ธ๋ถ ๊ธฐ์ ์ ๊ฐ๊ฒฐํฉ์ผ๋ก ์ธํ ์ ์ง๋ณด์ ๋น์ฉ ์ฆ๊ฐ ๋ฐ ๋ถ์ฐ ํ๊ฒฝ์์์ ๋ฐ์ดํฐ ์ ํฉ์ฑ ๊ฒฐ์ฌ ๋ฌธ์ ํด๊ฒฐ ํ์.
Technical Solution
- Domain ์ค์ฌ์ Bounded Context ์ค์ ์ ํตํ ๋ชจ๋ธ ๋ชจํธ์ฑ ์ ๊ฑฐ ๋ฐ ํ๋ณ ์์จ์ฑ ํ๋ณด
- Monolith Modular ๊ตฌ์กฐ ์ฑํ์ผ๋ก ๋ฐฐํฌ ๋จ์์ฑ์ ์ ์งํ๋ฉฐ ๋ด๋ถ ๋ชจ๋ ๊ฐ ๊ฐํ ์์ง๋์ ๋ฎ์ ๊ฒฐํฉ๋ ๊ตฌํ
- Hexagonal Architecture์ Ports & Adapters ํจํด์ ์ ์ฉํ์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ์ธํ๋ผ ๊ธฐ์ ๋ก๋ถํฐ ์์ ํ ๋ถ๋ฆฌ
- Screaming Architecture ์์น์ ๋ฐ๋ฅธ ํด๋ ๊ตฌ์กฐ ์ค๊ณ๋ฅผ ํตํด ํ๋ ์์ํฌ ์ค์ฌ์ด ์๋ ๋๋ฉ์ธ ๋ชฉ์ ์ด ๋๋ฌ๋๋ ๊ตฌ์กฐ ๊ตฌ์ถ
- Outbox Pattern ๋์ ์ ํตํ DB ์ ๋ฐ์ดํธ์ ๋ฉ์์ง ๋ฐํ์ ์์์ฑ ๋ณด์ฅ ๋ฐ ์ต์ข ์ผ๊ด์ฑ(Eventual Consistency) ๋ฌ์ฑ
- Inbox Pattern ๋ฐ Idempotency ์ค๊ณ๋ฅผ ํตํ ์ค๋ณต ๋ฉ์์ง ์ฒ๋ฆฌ ๋ฐฉ์ง ๋ฐ ์์คํ ์์ ์ฑ ๊ฐํ
- Saga Pattern ๊ธฐ๋ฐ์ ๋ณด์ ํธ๋์ญ์ (Compensating Transactions) ๊ตฌํ์ผ๋ก ๋ถ์ฐ ์๋น์ค ๊ฐ์ ๋ฐ์ดํฐ ์ ํฉ์ฑ ์ ์ง
์ค์ฒ ํฌ์ธํธ
- ํ๋ก์ ํธ ๋ฃจํธ ๋๋ ํ ๋ฆฌ๊ฐ ๊ธฐ์ ์คํ์ด ์๋ ๋น์ฆ๋์ค ๋๋ฉ์ธ์ ์ค๋ช ํ๊ณ ์๋์ง ํ์ธ - ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ DB ๋ณ๊ฒฝ์ด ๋๋ฉ์ธ ๋ก์ง์ ์ํฅ์ ์ฃผ์ง ์๋๋ก Interface ๊ธฐ๋ฐ์ Port ์ค๊ณ ์ ์ฉ - ๋ถ์ฐ ๋ฉ์์ง ์์คํ ๋์ ์ At-least-once ์ ๋ฌ ๋ณด์ฅ์ ์ํ Outbox/Inbox ํ ์ด๋ธ ์ค๊ณ ๊ฒํ - ๋ณต์กํ ๋ถ์ฐ ํธ๋์ญ์ ํ์ ์ 2PC ๋์ Saga ํจํด์ ํตํ ๋น๋๊ธฐ์ ๋ณด์ ๋ก์ง ์ค๊ณ ๊ณ ๋ ค