- Published on
๐ Swift - ๋ชจ๋ํ์ Clean Architecture
- Authors
- Name
- ์ด์ฐฝ์ค
- Modular Architecture
- ๋ฌธ์ ๊ฐ ๋ง์ ๋ณด์ด๋ ํ์ฌ ๊ตฌ์กฐ
- CoreKit์ ์์กด์ฑ์ ์ด๋๋ฅผ ํฅํด์ผ ํ๋๊ฐ
- ๊ฐํก์งํก Domain ๋ ์ด์ด
- Shared Model ๋ฐฉ๋ฒ
- Repository ํ๋กํ ์ฝ ๋ฐฉ๋ฒ
- ์ ํ์..?
- UseCase๋ ๊ทธ๋ผ ์ธ์ ์จ์ผํ์ง..?
- ๋ง์น๋ฉฐ
Modular Architecture
MusicSpot ํ๋ก์ ํธ๋ ๋ชจ๋๋ฌ ์ํคํ ์ฒ๋ฅผ ์ฑํํด์ ์ฌ์ฉํ์ต๋๋ค.
ํ์ง๋ง ์ฌ์ค "๋ชจ๋๋ฌ ์ํคํ ์ฒ"์ ์ด๋ค ์ฅ์ ์ ์ด๋ฆฌ๊ฒ ๋ค ๋ ์ ๋ณด๋ค๋
๋ถ๋ฆฌ๋ ๊ฐ ๋ ์ด์ด๋ฅผ ๊ฐํ๊ฒ ๋ถ๋ฆฌ์์ผ์ import
ํ์ง ์์ผ๋ฉด ์ฌ์ฉํ ์ ์๋๋ก
์์ฃผ ๊ฐํ ์ ์ฝ์ ๋๊ณ ๊ฐ ๋ ์ด์ด์ ๋ํด ํ์ตํ๊ฒ ๋ค!
์ธก๋ฉด์ด ๊ฐํ์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ทธ ๋ชฉ์ ์ ๋ง๊ฒ ๊ฐ ๋ ์ด์ด์ ๋ ๋ฆฝ์ด ์์ฃผ ์ ์ด๋ฃจ์ด์ก์ด์ผ๊ฒ ์ฃ ?
๊ณผ์ฐ ๊ทธ๋ฌ์๊น์?
๋ฌธ์ ๊ฐ ๋ง์ ๋ณด์ด๋ ํ์ฌ ๊ตฌ์กฐ
์ง๋ ํ๋ก์ ํธ๋ฅผ ๋์๋ณด๋ฉฐ, ๊ณผ์ฐ ๋ชจ๋๋ฌ ์ํคํ ์ฒ์ ์ฑํ ๋ชฉ์ ์ ๋ง๊ฒ
์ํคํ ์ฒ๋ฅผ "์" ์ฌ์ฉํ๊ณ ์์๊น? ๋ฅผ ๋์๋ณด๊ธฐ๋ก ํ์ต๋๋ค.
๊ทธ๋์ Dependency ๊ทธ๋ํ๋ฅผ ํ ๋ฒ ๊ทธ๋ ค๋ดค์ต๋๋ค.
(์ ํฌ ์ฑ์ Tuist๋ฅผ ์ฌ์ฉํ๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์, ํ๋ํ๋ ๊ทธ๋ ค์ค์ผ ํ์ต๋๋ค.)
๋ค.. ๋ง์ด ์ด์ง๋ฝ๋ค์ ใ ..
์ด๋ฅผ ์กฐ๊ธ (๋ง์ด) ๋จ์ํ ์์ผ๋ณด๋ฉด ์๋์ ๊ฐ์์ง๋๋ค.
์ฌ๊ธฐ์ ์ ๊ฒ ์๊ธด ์๋ฌธ์ ์ ํฌ๊ฒ ์ธ๊ฐ์ง์ ๋๋ค.
- Feature ํจํค์ง ์ค MSCoreKit์ ๊ธฐ๋ฅ์ ์ง์ ๊ฐ์ ธ๋ค ์ฐ๋ ๋ถ๋ถ์ด ์๋ค. ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋์ MSData์์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋์งํ์ง ์์๊ฐ?
- Feature ํจํค์ง๊ฐ MSData์ MSDomain ๋ ์ด์ด๋ฅผ ๋ชจ๋ ์์กดํ๊ณ ์๋ค. MSDomain ๋ ์ด์ด๋ ์ง๊ธ ํํ๊ฐ ์ต์ ์ธ๊ฐ?
- MSFoundation ํจํค์ง, ํนํ Logger์ ๊ฒฝ์ฐ ๋ชจ๋ ํจํค์ง๊ฐ ๊ตฌ๋ถ ์์ด ์์กด์ฑ์ ๊ฐ๊ณ ์๋ค. ๊ด์ฐฎ์๊ฑด๊ฐ?
ํ๋ํ๋ ๊ณ ๋ฏผํด๋ด ์๋ค.
CoreKit์ ์์กด์ฑ์ ์ด๋๋ฅผ ํฅํด์ผ ํ๋๊ฐ
๊ฐ์ฅ ํฐ ๊ณ ๋ฏผ์ ๊ฐ์ง๊ณ ์๋ ๋ถ๋ถ์ ๋๋ค.
CoreKit์ ๋ก์ง๋ค์ด Feature ๋ชจ๋๋ค์ ์ด๋ ค์์ด๋ ๋๋๊ฐ? ์ ๋ํ ๋ฌธ์ ์ ๋๋ค๋ง
Clean Architecture์ ์ด๋ค ๋ ์ด์ด์ ์ฐ๊ด์ฑ์ด ๋์ ์ง ๋ถํฐ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ ํฌ๊ฐ ๋ด๋ ธ๋ CoreKit์ ๋ํ ์ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฑ์ ํต์ฌ์ ์ธ ๋ก์ง๋ค์ด ํฌํจ๋ ๋ชจ๋
๋คํธ์ํน, ์บ์ฑ, ๋ก์ปฌ ํ์ผ ์ ์ฅ ๋ฑ ๋น๊ต์ ๋ฆฌ์์ค๋ฅผ ๋ง์ด ์ก์๋จน๋ ๋ก์ง๋ค์ด ํฌํจ๋ฉ๋๋ค.
๋, ํ ๊ฐ์ง ๊ณตํต์ ์ด ํ๋ ๋ ์๋๋ฐ, ์ง๊ธ๊น์ง๋ ์ด๋ค ํํ๋ก๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ํ๊ฑฐ๋ ๊ฐ๊ณตํ๋ ๋ก์ง๋ค์ด ํฌํจ๋์ด ์๋ค๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Presentation ๋ ์ด์ด๋ณด๋ค๋ Data ๋ ์ด์ด์์ ์ฐ๊ด์ฑ์ด ํจ์ฌ ๋์ต๋๋ค.
์ฌ๊ธฐ๊น์ง๊ฐ Data ๋ ์ด์ด๊ฐ CoreKit ๋ชจ๋์ ์์กดํด์ผํ๋ ์ด์ ์๊ณ , ์ด์ ๋ถํฐ๋ Feature ๋ชจ๋๋ค์์์ ์ด์ผ๊ธฐ์ ๋๋ค.
Presentation ๋ ์ด์ด์์ CoreKit์ ๋ก์ง์ ์ ํ์๋ก ํ๊ณ ์์๊น์?
๊ฐ์ฅ ๋ํ์ ์ธ ์์์ ๋๋ค.
self.imageView.ms.setImage(url: someURL)
ImageFetcher ๋ชจ๋์ UIImageView
์ ๋ํ extension์ ํ์ฉํ ๋ฐฉ์์
๋๋ค.
์ด ๋ฌธ์ ๋ ๋คํํ ms
๋ก wrappingํ ๋ถ๋ถ์ UI ๋ชจ๋์ชฝ์ผ๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ผ๋ก ์ฝ๊ฒ ํด๊ฒฐํ ์ ์์์ต๋๋ค.
๊ทผ๋ณธ์ ์ ๋ฌผ์์ ๋ํ ๋ต์ ์ด๋ป๊ฒ ๋ด๋ฆฌ๋ฉด ๋ ๊น์?
Presentation ๋ ์ด์ด์ ํด๋นํ๋ Feature ๋ชจ๋๋ค์ CoreKit์ ๋ํ ์์กด์ ๊ฐ์ ธ๋ ๋๋๊ฐ?
CoreKit์ ๋ชจ๋ํํ๊ณ , Data ๋ ์ด์ด์ ์์กด์ฑ์ ๋ถ์ฌํ๋ ๊ฒ์ ๋ํ ์ฅ์ ์ ์ ๋ฆฌํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
- ์ต์ธ๊ณฝ์ธ Presentation ๋ ์ด์ด์์ ๋ก์ง์ ๋ํ ๊ด์ฌ์ ๋์ด๋ผ ์ ์์ต๋๋ค. ์ดํ ๋ก์ง์ด ๋ณ๊ฒฝ๋๋๋ผ๋ ์ถ์ํํ Protocol์ด ๋ฐ๋์ง ์๋ ํ Presentation ๋ ์ด์ด์ ๋ณ๊ฒฝ์ ์ ์์ต๋๋ค.
- Presentation ๋ ์ด์ด์ Repository๋ฅผ ์ฃผ์ ์์ผ์ฃผ๋ ๊ฒ ๋ง์ผ๋ก๋ ํ ์คํธ๊ฐ ๊ฐ๋ฅํ๋ค.
์ ๊ฐ ์๊ฐํ๋ ๊ฐ์ฅ ํฐ ์ด์ ์ ์ด ๋๊ฐ์ง์ ๋๋ค.
์ฝ๊ฒ ๋งํ๋ฉด 1. ์ฝํ ๊ฒฐํฉ๊ณผ 2. ํ ์คํธ ์ฉ์ด์ฑ์ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด ์ฅ์ ์ ๋ฐ๋๋ก ๋งํ๋ฉด Feature ๋ชจ๋์ด CoreKit์ ์์กดํ ๊ฒฝ์ฐ ๋ฐ์ํ๋ ๋ฌธ์ ์ ์ด ๋๊ฒ ์ฃ ?
- CoreKit์ ๋ก์ง์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ, ์ด ๋ก์ง์ ์ฌ์ฉํ๋ ๋ชจ๋ Feature ๋ถ๋ถ์ ์ฝ๋์ ๋ณ๊ฒฝ์ด ๊ฐํด์ ธ์ผ ํ๋ค.
- Presentation ๋ ์ด์ด์ ํ ์คํธ๋ฅผ ์ํด CoreKit์ ํ์์ ์ผ๋ก import ํด์ผํ๋ค. ์ฆ, CoreKit์ ๋ณํ๊ฐ CoreKit ์์ฒด์ ํ ์คํธ๋ฟ๋ง ์๋๋ผ ViewModel์ ํ ์คํธ์๋ ์ํฅ์ ์ค๋ค.
๊ฒฐ๊ตญ ๋จ์ ์ CoreKit์ ๋ณํ๊ฐ ํํธํ ๋ ์ฝ๋๋ค์ ์ํฅ์ ์ฃผ๊ณ , ๋ณํ๋ฅผ ๊ฐ์ ํ๋ค๋ ๊ฒ ์ ๋๋ค.
๊ฐํก์งํก Domain ๋ ์ด์ด
๋ ๋ฒ์งธ ์ฃผ์ , Feature ๋ชจ๋๋ค์ด Data ๋ ์ด์ด์ Domain ๋ ์ด์ด ๋ชจ๋๋ฅผ ์์กดํ๊ณ ์๋๋ฐ, ๊ด์ฐฎ์๊ฑด๊ฐ? ์ ๋๋ค.
์ด ์ฃผ์ ์ ๋ํด ์ด์ผ๊ธฐํ๊ธฐ ์ ์, ์ ํฌ ์ฑ์ UseCase๋ฅผ ์ฌ์ฉํ๊ณ ์์ง ์์ต๋๋ค.
๊ทธ ํ์์ฑ์ ๋๋ผ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ธ๋ฐ์..
๋ฐ๋ผ์ Domain ๋ ์ด์ด์๋ ์ฌ์ค์ Entity๋ง ํฌํจ๋์ด ์์ต๋๋ค.
๋๋ฌธ์ Repository์ ๋ก์ง์ ์ฌ์ฉํ๊ธฐ ์ํด Data ๋ ์ด์ด๋ฅผ, Entity ๋ชจ๋ธ๋ค์ ์ฌ์ฉํ๊ธฐ ์ํด์ Domain ๋ ์ด์ด๋ฅผ ๋ชจ๋ ์์กดํ๊ณ ์๋ ๊ฒ์ด์ฃ .
๊ทธ๋ ๋ค๊ณ ๋จ์ํ๊ฒ Presentation ๋ ์ด์ด๊ฐ Domain ๋ ์ด์ด๋ง์ ์์กดํ๋๋ก ๋ง๋ค๊ธฐ ์ํด UseCase๋ฅผ ๋์ ํ๋ ๊ฒ์ ๋์ ์ ์ด์ ๋ก์ ํ๋นํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํ์ง๋ง ๊ทธ๋ ๋ค๊ณ ํ์ฌ ๊ตฌ์กฐ๊ฐ ์ฌ๋ฐ๋ฅธ๊ฐ? ํ๋ฉด ๊ทธ๊ฒ๋ ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค.
Feature ๋ ์ด์ด์์ Data ๋ ์ด์ด์ DTO์ ๊ฐ์ ์ํ์ง ์๋ ์์๋ค์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํด์ง๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด Domain ๋ ์ด์ด ์์ฒด๋ฅผ ์๋ด์ผ๊ฒ ์ฃ ..?
์, ์ด์ฏค์์ ๋ค์ ํ ๋ฒ ํ์ฌ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ด ์๋ค.
์ ํฌ ๊ตฌ์กฐ ์ ํ๊ฐ์ง ํน์ดํ ์ ์ด ์๋๋ฐ์, ๋ฐ๋ก Domain ๋ ์ด์ด๊ฐ ๋ค๋ฅธ ์ด๋ค ๋ชจ๋๋ ์์กดํ์ง ์๊ณ ์๋ค๋ ์ ์ ๋๋ค.
์์๋ ๋งํ๋ Entity ๋ชจ๋ธ๋ง์ด Domain ๋ ์ด์ด์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ธ๋ฐ์, ๊ทธ๋ ๋ค๋ฉด ๊ตณ์ด Domain ๋ ์ด์ด๊ฐ ํ์ํ ๊น์..?
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์๊ฐํด๋ดค๊ณ , ์ง์ ์คํํด๋ดค์ต๋๋ค.
- Domain ๋ ์ด์ด๋ฅผ ์ ๊ฑฐํ๊ณ Feature ๋ชจ๋๋ค์ ํ๋์ ๋ชจ๋๋ก ๋ฌถ์ ํ,
Shared Model
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ค. - Data ๋ ์ด์ด์ ์๋ Repository protocol๋ค์ Domain ๋ ์ด์ด๋ก ์ฎ๊ธด๋ค.
Shared Model ๋ฐฉ๋ฒ
UseCase๊ฐ ์๋ Domain ๋ ์ด์ด๋ฅผ ๊ณผ์ฐ Domain ๋ ์ด์ด๋ผ๊ณ ๋ถ๋ฅผ ์ ์์๊น๋ผ๋ ์๋ฌธ์์ ์์๋ ํด๊ฒฐ๋ฒ์ ๋๋ค.
Feature ๋ ์ด์ด๋ฅผ ํ๋์ ํจํค์ง๋ก ๋ฌถ๊ณ , Shared Model ์ด๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค์ด์ ๋ค๋ฅธ ๋ชจ๋๋ค์ด ์์กด์ฑ์ ๊ฐ๋๋ก ํด์คฌ์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ๋จ์ํ ์ด ํํ๋ก๋ Data ๋ ์ด์ด์ ๋ค๋ฅธ ์์๋ค์ ์ ๊ทผ ๊ฐ๋ฅํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ์ง ๋ชปํ์ต๋๋ค.
Repository๋ฅผ ์ฌ์ฉํ ์ ์์ด์ผํ๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ Data ๋ ์ด์ด์ ๋ํ ์์กด์ฑ์ด ์ ๊ฑฐ๋์ง ๋ชปํ๊ณ ์์ต๋๋ค.
๊ทธ๋์ Data ๋ ์ด์ด ๋ด๋ถ์์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋๋ ๋ณด์์ต๋๋ค.
Repository์ ์ถ์ํ๋ฅผ ์ํ ํ๋กํ ์ฝ์ ๋ณ๋์ ๋ชจ๋๋ก ๋ถ๋ฆฌํด์ฃผ๊ณ , Feature ๋ ์ด์ด๋ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง์ ์์กดํ๋๋ก ๋ณ๊ฒฝํ ๋ฒ์ ์ ๋๋ค.
์ถ์ํ ํ๋กํ ์ฝ์ด ๋ณ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์กด์ฌํด์ผํ๋ค๋ ์ ๋ง ์ ์ธํ๋ฉด ๊ฝค ํฉ๋ฆฌ์ ์ธ ๋ฐฉ์์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
Feature ๋ชจ๋๋ค์ Data ๋ ์ด์ด ์ค ํ์ํ ๋ถ๋ถ๋ง ์์กดํ๊ฒ ๋์๊ณ , Data ๋ ์ด์ด ๋ํ Entity๋ง์ ์์กดํ๋ฉด์ ๋จ๋ ํ ์คํ ์ด ๊ฐ๋ฅํ ํํ๊ฐ ๋์์ต๋๋ค.
Repository ํ๋กํ ์ฝ ๋ฐฉ๋ฒ
ํ์ฌ ํํ๋ฅผ ์ต๋ํ ์ ์งํ๋ฉด์ Feature ๋ ์ด์ด๊ฐ Data ๋ ์ด์ด์ ๋ํ ์์กด์ฑ์ ๋์ ์ ์๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํ๋ฉด์ ๋์จ ๋ฐฉ๋ฒ์ ๋๋ค.
Feature ๋ชจ๋์ด ํ์๋ก ํ๋ Data ๋ ์ด์ด์ ์์๋ ์ ํํ ๋ฌด์์ผ๊น๋ฅผ ์๊ฐํด๋ณด๋ฉด..
์์ ๋ฐฉ๋ฒ์์๋ ๋ณด์๋ฏ์ด ์ฌ์ค์ Repository์ ์ถ์ํ ํ๋กํ ์ฝ๋ง ํ์ํฉ๋๋ค.
๊ทธ๋ฌ๋ฉด ํด๋น ํ๋กํ ์ฝ๋ง Domain ๋ ์ด์ด๋ก ์ฎ๊ฒจ์ค๋ฉด ๋์ง ์์๊น!? ๋ผ๋ ์์ด๋์ด์ ๋๋ฌํ ๊ฒ์ด์ฃ !
๊ทธ๋ ๊ฒ ๋๋ฌํ ๊ฒฐ๊ณผ๊ฐ ์ ํํ์ ๋๋ค.
Feature ๋ชจ๋๋ค (Presentation ๋ ์ด์ด) ๋ Domain ๋ ์ด์ด์ ๋ํ ์์กด์ฑ์ ๊ฐ์ง์ผ๋ก์จ ๊ณต์ฉ์ผ๋ก ์ฌ์ฉ๋๋ Entity์ Data ๋ ์ด์ด์ ๋ก์ง๋ค์ ํธ์ถํ ์ ์์ต๋๋ค.
ํ์ง๋ง ๋์์ Data ๋ ์ด์ด์ ๊ตฌํ๋ถ๊ฐ ์๋ Protocol๋ง ์๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ตฌํ๋ถ์ ๋ํ ์ง์ ์ ์ธ ์์กด์ฑ์ ๋์ด๋ผ ์ ์์์ต๋๋ค.
Data ๋ ์ด์ด ๋ํ ๋ง์ฐฌ๊ฐ์ง๋ก Entity๋ฅผ ์๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ ๋ฆฝ์ ์ผ๋ก ๋ก์ง์ ๊ฐ์ง ์ ์๊ฒ ๋์๊ณ , DTO์์ Entity๋ก ๋ณํํ๋ ๋ก์ง ๋ํ ์์ฐ์ค๋ฝ๊ฒ ๊ฐ์ง ์ ์๊ฒ ๋์์ต๋๋ค.
์ด ๋ฐฉ์์ด ์ฌ๋ฐ๋ฅธ ์ง ์ฐพ์๋ณด๋ ์ค์ ๋ฐ๊ฒฌํ๊ฑด๋ฐ... ์ด ํํ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ๋ง์ด ์ฐ์ด๋ ํํ์ธ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก๋ Domain ๋ ์ด์ด์ UseCase๋ฅผ ์ด๋ค๋ ํฐ ์ฐจ์ด์ ์ด ์๊ธด ํ์ง๋ง์..?
์ ํ์..?
์ ํฌ ์ฑ์ ๊ฒฝ์ฐ๋ ๋ ํํ ๋ชจ๋ ์ ์ ํ๋ค๊ณ ํ๋จํ์ต๋๋ค.
- ๋ณ๊ฒฝ๋๋ ์ฌํญ์ด ํ์์ ๊ฒฝ์ฐ๊ฐ ํจ์ฌ ์ ๋ค.
- ์ดํ UseCase๊ฐ ์ถ๊ฐ๋์ด์ผ ํ ๊ฒฝ์ฐ ๋ ๋ฒ์งธ ํํ๊ฐ ํจ์ฌ ๋ณ๊ฒฝ์ ์ฉ์ดํ๋ค.
๋ ๊ฒฝ์ฐ ๋ชจ๋ ์ ์ฉ์ ์๋ํด๋ณด์์ต๋๋ค.
์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ๊ฒฝ์ฐ, ์๊ฐ๋ณด๋ค ๊ตฌ์กฐ์ ๋ณ๊ฒฝ์ด ๋ง์ด ์ผ์ด๋์ผ ํ์ต๋๋ค.
Feature ๋ชจ๋๋ค์ด ํ๋๋ก ๋ฌถ์ฌ์ผ ํ๋ค๋ ์ ์ด ์๊ฐ๋ณด๋ค ๊ฝค ํฐ ์์ ์ด์์ต๋๋ค.
๋ฌด์๋ณด๋ค (๋ฌผ๋ก ์ด๊ฒ๋ ์ ๋ถ์กฑ์ด๊ฒ ์ง๋ง) CI์ ํํ๋ ๊ทน๋จ์ ์ผ๋ก ๋ฐ๋์ด์ผ ํ์ต๋๋ค..
๋ํ ์ดํ UseCase์ ํ์์ฑ์ ๋๋ผ๊ฒ ๋๊ณ , Domain ๋ ์ด์ด์ ๋ํ ํ์๊ฐ ๋์ฑ ์ปค์ง๊ฒ ๋๋ ๊ฒฝ์ฐ์๋ ํ์์ ๊ฒฝ์ฐ๊ฐ ํจ์ฌ ๋ณ๊ฒฝ์ ์ฉ์ดํ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ ์์ต๋๋ค.
์ด์ฐ๋๊ฑด Domain ๋ ์ด์ด๊ฐ ์ ์ง๋๋ ๋ฐฉํฅ์ด๋๊น์..!
๊ทธ๋์ ์ ํฌ๋ ํ์์ ๊ฒฝ์ฐ, Repository ํ๋กํ ์ฝ์ Domain ๋ ์ด์ด๋ก ์ฎ๊ธฐ๋ ๋ฐฉ๋ฒ์ ํํ๊ฒ ๋์์ต๋๋ค.
UseCase๋ ๊ทธ๋ผ ์ธ์ ์จ์ผํ์ง..?
์ฌ๊ธฐ๊น์ง ๋๋ฌํ๋ฉด์ ๊ณ์ํด์ ์๊ธด ์๋ฌธ์ "๊ทธ๋ผ ๋์ฒด UseCase๋ ์ธ์ ์จ์ผํ์ง?" ์์ต๋๋ค.
๋๋ฆ๋๋ก ๋ด๋ฆฐ ๊ฒฐ๋ก ์ด ์์ต๋๋ค.
๋ฐ๋ณต๋๋ ๋น์ฆ๋์ค ๋ก์ง์ด ๋ง์์ง๋ฉด UseCase์ ๋์ ์ ๋ํ ์๊ตฌ๊ฐ ์๊ธธ ๊ฒ์ด๋ค. ์ ๋๋ค.
์ ํฌ ์ฑ์ ๊ฒฝ์ฐ ์์ฃผ ์๊ธฐ ๋๋ฌธ์.. ๋ฐ๋ณต๋๋ ๋น์ฆ๋์ค ๋ก์ง์ด ์๋ ์ํ์ ๋๋ค.
์ ํํ ๋งํ์๋ฉด ์์ ์๋ ์์ง๋ง ์ธ์งํ์ง ๋ชปํ ๋งํผ ๊ทธ ๊ท๋ชจ๊ฐ ํฌ์ง ์๋ค. ๊ฐ ๋ง๋ ๋ง์ธ ๊ฒ ๊ฐ๋ค์.
๊ฐ์ธ์ ์ผ๋ก UseCase์ ๋์ ์์ฒด๋ ํ ์คํธ๋ ๊ธฐํ ๊ตฌ์กฐ ์์ ์ด์ ์ ์ฃผ๋ ๊ฒ ๊ฐ์ง๋ ์์ต๋๋ค.
์ด ์๊ฐ๋ ์ธ์ ๊ฐ๋ ๋ฐ๋ ์๋ ์๊ฒ ์ฃ ? ๐
๋ง์น๋ฉฐ
์ํคํ ์ฒ๋ฅผ ์ง์ ๋ชธ์ผ๋ก ๋ถ๋ชํ๊ฐ๋ฉฐ ๋๋ ์ ์, ๊ฒฐ๊ตญ ์ํคํ ์ฒ ์ค๊ณ๋ผ๋ ๊ฒ์ ํธ์์ฑ์ ์ํด์๋ผ๋ ๊ฒ๋๋ค.
์ค๋ฒ ์์ง๋์ด๋ง์ด ๋ ์๋ ์๋ค๋ ์ํ๋ ์ธ์ ๋ ๋์ฌ๋ฆฌ๊ณ ์์ง๋ง, ์ํคํ ์ฒ๋ฅผ ๋ณ๊ฒฝํด์ผ๊ฒ ๋ค๋ ๋๋์ ๋ถ๋ช ์ด๋๊ฐ "๋ถํธ" ํ ์ํ์ด๊ธฐ ๋๋ฌธ์ผ๊ฒ๋๋ค.
์ ๊ทผ๋์ด์๋ ์๋๋ ๋ฉ์๋๋ ํ๋กํผํฐ๊ฐ ๊ณ์ํด์ ์ ๊ทผ ๊ฐ๋ฅํด์ ๋ถํธํ๊ฑฐ๋,
ํ ์คํธ์ ํ์ํ ์์กด์ฑ๋ค์ด ๋ง์์ ธ์ ๋ถํธํ๊ฑฐ๋..
์ด๋ฐ ๋ถํธํจ๋ค์ ํด์ํ๊ณ ์ ์ํคํ ์ฒ๋ฅผ ์ค๊ณํ๋ ๊ฒ์ด๋ผ๋ ์๊ฐ์ ๊ฐ์ง๊ฒ ๋์์ต๋๋ค.
๊ทธ๋ ๋ค๊ณ ๋ง๊ตฌ์ก์ด๋ก ์ค๊ณํด์๋ ๋ ์๋ฉ๋๋ค.
๋ฏธ๋์ ์ด๋ป๊ฒ ์ด๋ค ๋ถ๋ถ์ด ๋ณ๊ฒฝ๋ ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์, ์ต๋ํ ํ์ฅ์ ์ด๋ ค์๊ณ ๋ณ๊ฒฝ์ ์ ์ฐํ๊ฒ ๋์ฒ ๊ฐ๋ฅํด์ผ ํฉ๋๋ค.
๊ทธ๋ฌ๋ค๋ณด๋ ์ฌ๋ฌ ๋ณต์กํ ์ด๋ก ๋ค์ด ๊ณ์ํด์ ์๊ฒจ๋๊ณ , "๋ชจ๋" ํ ์ํคํ ์ฒ๋ ๋ฌด์์ธ๊ฐ ๋์์์ด ํ ๋ก ๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ ์ํคํ ์ฒ๋ฅผ ์ค๊ณํ๊ณ ์๋ ์ง ๊ทธ ์ด์ ๋ฅผ ํญ์ ์์ ๋๊ณ ๊ณ ๋ฏผํด์ผํ๋ ์ฃผ์ ์ธ ๊ฒ ๊ฐ์์!