[Clean Architecture - Slog]
์ฃผ์ ๋ชฉํ
- Clean Architecture์ ๊ฐ๋ ์ ์ ๋ฆฌํ๋ค.
- Clean Architecture๋ฅผ ์ค๋ค๋ ฅ์๊ฒ ํธ์ํ๋ค.
- Clean Architecture๊ฐ ASP.NET Core์ ์ด๋ป๊ฒ ์ ์ฉ๋์ด ์๋์ง ์ค๋ช ํ๋ค.
- Clean Architecture๋ฅผ ์ ์ฉํ ์์ ๋ฅผ ๋ง๋ค๊ณ ์ฐ๊ตฌํ๋ค.
๊ณํ์
Robert C. Martin์ ์ฑ
Clean Architecture, ์ธํฐ๋ท ์๋ฃ๋ฅผ ์ฐธ๊ณ ํ์ฌ ๊ฐ๋
์ ์ ๋ฆฌํ๋ค.
์ฅ๋จ์ ์ ๋์ดํ๊ณ ์ ์ฌ์ฉํด์ผํ๋๊ฐ, ๊ฐ๋ฐ์ ํ์ค๊ณผ ์ํฉ์ ๋น๋์ด ์ ์ฉ์ ์ ๋์ดํ๋ค. (+ ์ค๋ฌธ์กฐ์ฌ ์ฐ๊ตฌ)
1๋ฒ์ ์ ๋ฆฌํ ๊ฐ๋
์ MS Docs์์ ์ด๋ป๊ฒ ์ ์ฉํ๊ณ ๋์ดํ๊ณ ์๋์ง ํ์
ํ๋ค.
๋จผ์ ํํ ์ฌ์ฉ๋๊ณ ์๋ ๊ฐ๋
์ ๋์ดํ๊ณ ์์ผ๋ก ์ฐ๊ตฌ๊ฒฐ๊ณผ๋ฅผ ๊ณต์ ํ๋ค.
2022.07.05 ์์ํฉ๋๋ค.
[์๋๋ฆฌ์ค ๊ตฌ์ฑ ์ค]
๊ธฐ๋ฆ ์์ถ ๊ธฐ๊ณ : ํ์ฌ
๊ธฐ๋ฆ : ์์, ์๋ณธ, ํ๋ก๊ทธ๋๋จธ
์๋์ฐจ : ํฌ์ํ ์์์ผ๋ก ๋ง๋ค์ด ๋ธ ์์ต ๋ชจ๋ธ, ์ค๊ณ ๋๋ฉด
๋ฌ์ฑ ๊ฑฐ๋ฆฌ : ๋งค์ถ์ก, ํ๋ก๊ทธ๋จ ์์ฑ๋
๊ธฐ๋ฆ์ ๋ฝ์๋ด๋ ๊ธฐ๊ณ๊ฐ ๋งค์ผ 100L๋ฅผ ์์ฐํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์๋์ฐจ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ํ์ ๋ ๊ธฐ๋ฆ์ผ๋ก ๊ฐ๋ฅํ ๋ฉ๋ฆฌ ๋ฌ๋ ค๊ฐ์ผํฉ๋๋ค.
๋ง์ด ๊ฐ์๋ก ์ข์ ์ฑ๊ณผ๋ฅผ ์ป์๋ค๊ณ ํ ์ ์์ต๋๋ค.
๊ธฐ๋ฆ์ ๋งค์ผ 100L๋ก ์์์ด ํ์ ๋๋ค๊ณ ํ์ ๋
์ด๋ป๊ฒ ํด์ผ ๊ฐ๋ฅํ ๋ฉ๋ฆฌ๋์ ๊ฐ ์ ์์๊น์?
์ฐ๋น ์ข์ ์๋์ฐจ๋ฅผ ๊ฐ๋ฐํด๋ฉ๋๋ค.
์ฆ ์์ง ํจ์จ์ ๋์ด๊ณ ๊ณต๊ธฐ์ ํญ์ ํจ์จ์ ์ธ ๋์์ธ์ด์ด์ผํฉ๋๋ค.
ํ์ฌ ์ฐ๋น๋ 10km/โ ์ด๋ฉฐ
์ฐ๊ตฌ๊ฐ๋ฐ์ ํฌ์ ํด ์ฐ๋น๊ฐ์ ์ผ๋ก 20km/โ ๋ฅผ ๋ฌ์ฑํฉ๋๋ค.
๋งค์ผ 1,000Km๋ฅผ ๊ฐ ์ ์์๋๊ฒ์ด 2,000Km ๊ฐ ์ ์์ผ๋ฉฐ
100์ผ์ด ์ง๋๋ฉด 100,000Km(10๋ง Km)๊ฐ ์ฐจ์ด ๋ฉ๋๋ค.
๋ฐ๋๋ก ๊ฐ๋ฅํ ๋ฉ๋ฆฌ๊ฐ๋ ๊ฒ์ด ์๋๋ผ ํ์ ๋ ์งง์ ๊ฑฐ๋ฆฌ 3,000Km๋ฅผ ๊ฐ์ผํ๋ค๋ฉด
์ฐ๊ตฌ๊ฐ๋ฐ์ ํฌ์ํ ๋ฐ์ 3์ผ๊ฐ ๊ทธ๋ฅ ๋ฌ๋ฆฌ๋ฉด ๋๊ฒ ์ฃ ?
Clean Architecture๋ ์ค๊ณ์ ์์ด์ ์ด๊ธฐ ํฌ์๋๋ ๋น์ฉ์ด ํฌ๊ธฐ ๋๋ฌธ์
์ฅ๊ธฐ์ ์ผ๋ก๋ ์ข์ผ๋ ๋จ๊ธฐ์ ์ธ ์๊ท๋ชจ ํ๋ก์ ํธ์๋ ๋ง์ง์์ต๋๋ค.
๋ ์ด์ฉ ๊ฐ๋ฅํ ์์์ ์ ํ์ ๋ฐ์ต๋๋ค.
Clean Architecture๋ก ๊ฐ๋ฐํ๋๋ฐ ๋๋ ์ด๊ธฐ ๋น์ฉ์ด 10์ด๋ผ๊ณ ํ๊ณ
ํ์ฌ ์๋ณธ์ด 10์ด๋ผ๋ฉด ์์ต ๋๊ธฐ๋ ์ ์ ํ์ฐํ๊ฒ ์ฃ ?
๋ง์ ํ์ฌ๋ค์ด ์ข์ ๊ธฐํ์์ด ์์์๋ ์์ต๋ด๊ธฐ ํ๋ ๊ฒ์ด ์ฌ๊ธฐ์ ์์๋๋ค๊ณ ๋ด
๋๋ค.
์ข์ ํ์ง๊ณผ ์๋น์ค๋ฅผ ๋ณด์ฅํ ์ ์์ผ๋ฉด ์์ต์ ๋ผ ์ ์์๊ฑฐ๋ผ๊ณ ๊ธฐ๋ํ์ง๋ง,
์ค์ ํ์ฌ ์์์ผ๋ก๋ ๋์ ํ์ง์ ์ด๋ ํ ๊ฒ์ ๋ด๊ธฐ๊ฐ ํ๋ญ๋๋ค.
์ด์ ์ ๋น๋์ด ๋ดค์ ๋ Clean Architecture์ ์์ ๊ท๋ชจ์ ํ์ฌ์๋ ๋ง์ง ์์ต๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ํ์ค์ ์ผ๋ก ๋ณด์์ ๋ ๊พธ์คํ ์ข์ ์์ต์ ๋ด๋ ๋ชจ๋ธ์ด ์๋ค๋ฉด,
์ด ๊ฑฐ ์ ๋๋ก ํด๋ณด์๋ผ
๋ ๊ฒฐ์ฌ์ ๊ฐ์ง๊ณ Clean Architecture๋ก
์ฌ์ ๋นํ๋ ๊ฒ์ด ๋ง๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋ฌ๋ฉด Clean Architecture๋ ์ฌ์ฉ๋์ง ์๋๋?๋ผ๊ณ ํ๋ค๋ฉด
์ด๋ฏธ ๋ง์ ๋ถ๋ค์ด ์ฌ์ฉํ๊ณ ์์ ๊ฒ ์
๋๋ค. (IoC, DI ๋ฑ )
์๋ ๊ทธ๋ฌ๋ฉด ์ด๋ฏธ ์ฌ์ฉํ๊ณ ์๋๋ฐ, ๋ญ ์ด๋ป๊ฒํ๋ผ๋ ๊ฑด๊ฐ์?
=> Architecture๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ์์ง๋ง 100% ์๋ฒฝํ ์ ์ฉํ๊ณ ์์ผ์ ๊ฑด ์๋ ๊ฒ๋๋ค.
Architecture์ ๊ฐ๋
์ ์์ง๋ง ์ค์ง์ ์ธ ์กด์ฌ๊ฐ ์๋ค๊ณ ํ๋จ๋ฉ๋๋ค.
๋ค๋ง ์ง๊ธ ํ์ฌ ์ฌ์ฉํ๋ Architecture๋ณด๋ค ๋ ๋๋ Architecture๊ฐ ์์๊ฒ์ด๊ณ
ํ์ฌ ์ํฉ์ ๋ง๊ฒ Architecture๋ฅผ ์ ์ฉํด๋ณด์ ์
๋๋ค.
๋จ์ํ ์์์ด ๋ง์ผ๋๊น ๋ฌด์กฐ๊ฑด Clean Architecture
'์์์ด ๋ถ์กฑํ๋๊ฐ ๊ทธ๋ฅ ์ฝ๋ฉโ์ด ์๋๋ผ ํ์ฌ ์ํฉ์ ๋ง๊ฒ
ํ์ํ ๋งํผ Architecture๋ฅผ ์ ์ฉํ์๊ฐ ์ฃผ ๋ชฉํ์
๋๋ค.
Clean Architecture๋
ํ๊ตญ๋ง๋ก ํ๋ฉด ๊ฑด์ถํ์ด๋ผ๋ ๋ป์ผ๋ก ์ข์ ์ค๊ณ ๋๋ฉด์ ๊ฐ์ง๊ณ
์์ค ์ฝ๋ฉ์ ํ์๋ผ๊ณ ๋ณด์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ข์ ์ค๊ณ๋๋ฉด์ด ์์ผ๋ฉด ๋ฌด์์ด ์ข๋์?
=> Clean Architecture์ ์ต์์ ๋น์ฉ์ผ๋ก ํ๋ก๊ทธ๋๋จธ์ ์์ฐ์ฑ์ ์ต๋ํํ๋ ๊ฒ ์
๋๋ค.
์ฆ ํจ์จ์ ์ธ ์์ฐ์ด๋ผ๊ณ ๋ณด์๋ฉด ๋๊ฒ ์ฃ .
์์ฐ์ฑ์ ํ๋จํ๋ ์ฒ๋๋: ์ฌ์ด ๊ฐ๋ฐ - ๋ฐฐํฌ - ์ด์ - ์ ์ง๋ณด์ ๋ฑ์ด ๋๊ฒ ๋ค์.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ค์ํ๊ฒ ์๊ฐํ๋ ๊ฒ์ด View์ ๊ด๋ จ๋ ์์กด์ฑ์
๋๋ค.
๋๊ฐ์ด ๋์ํ๋ ํ๋ก๊ทธ๋จ์ธ๋ฐ iOS, Android, MacOS, Window ๋ฐ๋ก๋ฐ๋ก ๊ฐ๋ฐํ๋ค๋ฉด ๋ค์ด๊ฐ๋ ์์์ด ๋ง๊ฒ ์ฃ ?
Clean Architecture์์๋ ์ ํ ๋ค๋ฅธ View ๊ฐ์ง๋ค๋ฉด View ๋ฐ๊ฟ ๋ผ์ธ ์ ์์ด์ผ ํ๋ค๊ณ ํฉ๋๋ค.
(ํต์ฌ ์์ค 1๊ฐ์ 4๊ฐ์ View๋ก ํ๋ซํผ 4๊ณณ์์ ์๋น์ค ํ ์ ์๋ค๋ฉด ์ผ๋ง๋ ์ข์๊น์?)
์ข๋ ์์ธํ๊ฒ Clean Architecture ๊ตฌ์กฐ์ ๋ํด ๋ง์ ๋๋ฆฌ๊ฒ ์ต๋๋ค.
Credit: ๋์์ถํ ์ธ์ฌ์ดํธ
๊ฐ๊ฐ์ ์์ผ๋ก ๋ถํ๋์ด ์์ผ๋ฉฐ ์ค์ฌ์์ผ๋ก ๊ฐ์๋ก ๊ณ ์์ค, ์ธ๊ฐ์ผ๋ก ๊ฐ์๋ก ์ ์์ค์ด๋ผ๊ณ ํํํ๊ฒ ์ต๋๋ค.
์์กด์ฑ ๊ท์น์ ์ํด ์์กด์ฑ์ ์ธ๋ถ์์ ์์ผ๋ก, ์ ์์ค์์ ๊ณ ์์ค์ผ๋ก ํ๋ฌ๊ฐ๋๋ค.
์ฆ ์น์ ์ปจํธ๋กค, ์ ์ค์ผ์ด์ค, ์ํฐํฐ ๋ฑ์ ๋ํด ์๊ณ ์์กด์ฑ์ ๊ฐ์ง์ ์์ง๋ง
๊ทธ ์ด๋๊ฒ๋ ์น์ ๋ํด ์์กด์ฑ์ ๊ฐ์ง๋ ๊ฐ์ฒด๊ฐ ์์ด์ผํ๋ฉฐ
Core(์ ์ค์ผ์ด์ค, ์ํฐํฐ)๋ ์ธ๋ถ์ ์์กดํ์ง ์์์ผํฉ๋๋ค
์ด์ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ASP.NET Core๋ Core, Infrastructure, Wep์ผ๋ก ๋๋ฉ๋๋ค. + Test, ํ
์คํธ ํ๊ฒฝ(Docker ๋ฑโฆ)
Core : ๊ฐ์ฅ ์์ชฝ ์์ผ๋ก ์ํฐํฐ, ์ ์ค์ผ์ด์ค์ ์์ญ์ด ๋ฉ๋๋ค. (Business/ Appliction Model)
Infrastructure : ์ด๋ก์ ์์ญ์
๋๋ค. (Data Access Logic)
Web: ํ๋์ ์์ต์ผ๋ก ์น View์ด์ฃ . (Presentation Logic)
๊ทธ๋์ ์ด๋ ๊ฒ ๋๋๋๋ฐ ํด๋น ์์๋ ์ด๋ป๊ฒ๋๋?๋ผ๊ณ ํ์ ๋ค๋ฉด
[MS Docs]
์ด ๊ฒ์ ์ฐธ์กฐ ๋ถํ๋๋ฆฝ๋๋ค. (ํ์ฌ ์ ๋ฆฌํด๋ ๋ฉ๋ชจ๊ฐ ์ง๊ธ ์๋ค์, ์ด ๋ด์ฉ ๊ณ ๋๋ก ๋ค์ ์ฐ๋ ์ค ์
๋๋คโฆ)
2022.07.05 ์ข ๋ฃํฉ๋๋ค.