Clean Architecture
๊ฐ๋จ ์์ฝํ ํด๋ฆฐ ์ํคํ
์ฒ
!! ์ํํธ์จ์ด๋ฅผ ๊ณ์ธต์ผ๋ก ๋๋์ด ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ์.
๋์ถํ๊ธฐ ์ฑ์ ๋ง๋ ๋ค๊ณ ๊ฐ์ ํ ๋, ์๋์ ๊ฐ์ ๊ธฐ๋ฅ์ด ์กด์ฌํ๋ค.
๋์ถํ๊ธฐ ๋ฒํผ
๋ฒํผ์ ๋๋ฅด๋ฉด ๋์ถํ๊ธฐ๋ฅผ ์คํ
๋์ถ ์ ๋ณด๋ฅผ ์ ์ฅํ ๊ณต๊ฐ
3๊ฐ์ง๋ฅผ ๊ณ์ธต ๊ตฌ์กฐ๋ก ๋ถ๋ฆฌ์์ผ ๋ณด์.
1. Presentation
UI (๋ฒํผ) : ๋ฒํผ์ ํด๋ฆญํ๋ฉด Controller๋ก ์ ๋ฌ
Controller : ๋ฒํผ์ ์ก์ ์ ๋ฐ๊ณ ๋๋ฉ์ธ๊ณผ์ ๋ฒ์ญ์ ๋ด๋น. ์ฌ๊ธฐ์ Usecase๋ฅผ ์คํํ๋ค.
2. Domain
Usecae (๋์ถํ๋ ๋น์ฆ๋์ค ๋ฃฐ์ ๋ด์ Usecase์ด๋ค.)
๋์ถ์ ํ์ํ Entity๋ค์ ํตํด ์ต์ข ๊ฒฐ์ ํ๋ค.
๋์ถ์ด ์คํ๋๋ฉด ์ด๋ฅผ Repository์ ๋ฐ์ํ๋ค.
ํ์์ ๋ฐ๋ผ์ Usecae์์ ๋ณํ๋ ๊ฐ์ ๋ค์ Controller๋ก ์ ๋ฌ
Entity (ํต์ฌ ๊ธฐ๋ฅ์ ๊ฐ์ง ์ํฐํ๋ผ์ด์ฆ ๋น์ฆ๋์ค ๋ฃฐ์ ๋ด์ Entity)
3. Data
Repository : ์๋ฒ๊ฐ ๋ ์๋ ์๊ณ ๋ก์ปฌ DB๊ฐ ๋ ์๋ ์๋ค.
Layer

Presentation Layer์ Data Lyaer๋ ์ฝ๊ฒ ๋ณํ ์ ์๋ ์์ญ์ด๋ค. Domain Layer๋ ์ฝ๊ฒ ๋ณํ์ง ์๋ ๋น์ฆ๋์ค Rule์ด ๋ด๊ธด ๊ณต๊ฐ์ด๋ค. ๋ฐ๋ผ์ ์๋ฒ์ ์ ์ฅํ๊ฑฐ๋ ๋ก์ปฌ์ ์ ์ฅํ๊ฑฐ๋ ๋๋ฉ์ธ์ ์ ํ์๊ฐ ์๋ค. ๋ํ UI์ ๋ฒํผ ๋ชจ์์ด ๋ค๋ชจ์ด๋ ์ธ๋ชจ์ด๋ ๋๋ฉ์ธ์ ์ ํ ์ ํ์๊ฐ ์๋ค.
๊ฐ ๋ ์ด์ด์ ์์กด์ฑ์ ํํํด๋ณด์.

๊ฐ์ฅ ๋ฐ์ ์กด์ฌํ๋ Infrastructure(Presentation / Data)๋ค์ ์ฝ๊ฒ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ ์์ญ์ด๊ณ , ๋ด๋ถ Domain์ ์ฝ๊ฒ ๋ณํ์ง ์๋ ์์ญ์ด๋ค. ์์กด์ฑ์ ๋ฐ --> ์์ผ๋ก ํ๋ฅธ๋ค. ๋๋ฌธ์ ๋๋ฉ์ธ์ ์ธ๋ถ ์ํฅ์ ๋ฐ์ง ์๊ณ , ์ ์ด์ ๋ ์๋ค.
S/W๋ฅผ ๊ณ์ธต์ผ๋ก ๋๋์ด ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ์.
๊ณ์ธต ๋๋๊ธฐ์ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๋ฅผ ํตํด ๋ค์๊ณผ ๊ฐ์ ์ด๋์ ์ทจํ ์ ์๋ค.
๋ช ํํ ์ฑ ์๊ณผ ๊ณ์ธต์ผ๋ก ์ธํด ์์ค์ฝ๋ ์ ๋ฐ์ ์ฝ๊ฒ ํ์ ์ด ๊ฐ๋ฅํด์ง๋ค.
์์ ์ฌํญ์ ๋ํ ๋์์ด ์ฌ์์ง๋ค.
์์ ์ด ๋ค๋ฅธ ๊ณ์ธต์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
๋ฐ๋ผ์ ํ ์คํธ ๋ํ ์ฌ์์ง๋ค.
๊ณ์ธต์ผ๋ก ๋๋์ด ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ ๊ฒฐ๊ณผ "๋์ ์์ง๋"์ "๋ฎ์ ๊ฒฐํฉ๋"๋ฅผ ์ป์๋ค. ์ด๋ ์ฆ, "๋์ ์์ฐ์ฑ"์ ์ป์๊ฒ์ด๋ค.
์ด๊ธฐ ๊ตฌ์ถ ๋น์ฉ์ ๋ ๋ค๊ฒ ์ง๋ง ์ดํ์ ๋ณํ์ ์ ์ฐํ๊ฒ ๋์ํ ์ ์๊ณ ๋์ ์์ฐ์ฑ์ผ๋ก ๋ณด๋ตํด ์ค ๊ฒ์ด๋ค.
Summary
Q : ์ ํด๋ฆฐ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ๋๊ฐ?
A : ๋์ ์์ฐ์ฑ์ ๋ฐํ์ผ๋ก ์ฌ์ฉ์์๊ฒ ๋น ๋ฅด๊ณ ์์ ํ๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํ๊ธฐ ์ํจ์ด๋ค.
Last updated