์ด ๋ฌธ์๋ Codive-iOS ํ๋ก์ ํธ์ ์ํคํ ์ฒ ๋ฐ ๋์์ธ ํจํด์ ๋ํ ๊ฐ์๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ํ๋ก์ ํธ๋ SwiftUI๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, MVVM (Model-View-ViewModel) ํจํด๊ณผ Clean Architecture ์์น์ ๋ฐ๋ฅด๊ณ ์์ต๋๋ค. ๋ํ DI Container๋ฅผ ํตํ ์์กด์ฑ ์ฃผ์ ๊ณผ Router ํจํด์ ํตํ ํ๋ฉด ์ ํ ์ฒ๋ฆฌ๋ฅผ ์ ์ฉํ์ฌ ๋ชจ๋ ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ ์ ์ง๋ณด์์ฑ์ ๋์์ต๋๋ค.
์ ์ฒด์ ์ธ ๊ตฌ์กฐ๋ Clean Architecture์ ๊ณ์ธตํ๋ ์ ๊ทผ ๋ฐฉ์์ ๋ฐ๋ฅด๋ฉฐ, ๋ฐ์ดํฐ์ ํ๋ฆ์ ๋จ๋ฐฉํฅ์ผ๋ก ๊ด๋ฆฌ๋ฉ๋๋ค.
- ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ (Separation of Concerns): ๊ฐ ๋ ์ด์ด๋ ๋ช ํํ ์ญํ ์ ๊ฐ์ง๋ฉฐ ์๋ก ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํฉ๋๋ค.
- ์์กด์ฑ ๊ท์น (Dependency Rule): ์์กด์ฑ์ ํญ์ **์์ชฝ(Domain Layer)**์ ํฅํด์ผ ํฉ๋๋ค. Presentation์ด๋ Data ๋ ์ด์ด๋ Domain ๋ ์ด์ด๋ฅผ ์์ง๋ง, Domain ๋ ์ด์ด๋ ์ธ๋ถ ๋ ์ด์ด๋ฅผ ์์ง ๋ชปํฉ๋๋ค.
- ํ ์คํธ ์ฉ์ด์ฑ (Testability): ๋น์ฆ๋์ค ๋ก์ง(Domain)์ UI๋ ํ๋ ์์ํฌ์ ๋ถ๋ฆฌ๋์ด ์์ด ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
๊ฐ Feature(๊ธฐ๋ฅ)๋ ๋ค์๊ณผ ๊ฐ์ 3๊ฐ์ ์ฃผ์ ๋ ์ด์ด๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
๊ฐ์ฅ ์์ชฝ์ ์์นํ๋ฉฐ, ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํฉ๋๋ค. ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ UI ํ๋ ์์ํฌ(SwiftUI, UIKit ๋ฑ)์ ์์กดํ์ง ์๋ ์์ Swift ์ฝ๋๋ก ์์ฑ๋ฉ๋๋ค.
- Entities: ์ฑ์ ํต์ฌ ๋ฐ์ดํฐ ๋ชจ๋ธ.
- UseCases: ๋น์ฆ๋์ค ๋ก์ง์ ์คํํ๋ ๋จ์. Repository Interface๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํฉ๋๋ค.
- Interfaces (Repository Protocols): Data Layer์์ ๊ตฌํํด์ผ ํ Repository์ ์ถ์ํ๋ ์ ์.
์ค์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํฉ๋๋ค. API ํต์ , ๋ก์ปฌ DB ์ ๊ทผ ๋ฑ์ ์ํํ๋ฉฐ Domain Layer์ Repository Interface๋ฅผ ๊ตฌํํฉ๋๋ค.
- Repositories (Implementation): Domain Layer์ Repository Interface๋ฅผ ์ค์ ๋ก ๊ตฌํํ ํด๋์ค.
- DataSources: Remote(API) ๋๋ Local(DB, UserDefaults) ๋ฐ์ดํฐ ์์ค.
- DTOs (Data Transfer Objects): API ์๋ต ๋ชจ๋ธ (Domain Entity๋ก ๋งคํ๋์ด ์ฌ์ฉ๋จ).
์ฌ์ฉ์์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์ ๋ ฅ์ ๋ฐ๋ UI ๊ณ์ธต์ ๋๋ค.
- Views (SwiftUI): UI๋ฅผ ๊ตฌ์ฑํ๊ณ ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ์ต๋๋ค. ๋น์ฆ๋์ค ๋ก์ง์ ์ง์ ์ฒ๋ฆฌํ์ง ์๊ณ ViewModel์ ์์ํฉ๋๋ค.
- ViewModels: View์ ์ํ(State)๋ฅผ ๊ด๋ฆฌํ๊ณ , UseCase๋ฅผ ์คํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
@Published์์ฑ์ ํตํด View์ ๋ฐ์ธ๋ฉ๋ฉ๋๋ค.
ํ๋ก์ ํธ๋ ๊ธฐ๋ฅ(Feature) ๋จ์๋ก ๊ทธ๋ฃนํ๋์ด ์์ผ๋ฉฐ, ๊ฐ ๊ธฐ๋ฅ ๋ด๋ถ๋ Clean Architecture ๋ ์ด์ด๋ก ๋๋ฉ๋๋ค.
Codive/
โโโ Application/ # ์ฑ ์ง์
์ ๋ฐ ์ด๊ธฐ ์ค์ (AppConfigurator, AppRootView)
โโโ Features/ # ๊ธฐ๋ฅ๋ณ ๋ชจ๋
โ โโโ Auth/
โ โ โโโ Domain/ # Entity, UseCase, Repository Interface
โ โ โโโ Data/ # Repository Impl, DTO, API Service
โ โ โโโ Presentation/ # View, ViewModel
โ โโโ Feed/
โ โโโ Home/
โ โโโ ...
โโโ Shared/ # ๊ณตํต ์ฌ์ฉ ๋ชจ๋ (DesignSystem, Extensions, Network, Storage)
โโโ DIContainer/ # ์์กด์ฑ ์ฃผ์
์ปจํ
์ด๋
โโโ Router/ # ํ๋ฉด ์ ํ ๋ฐ ๋ด๋น๊ฒ์ด์
๋ก์ง
์์กด์ฑ ์ฃผ์ ์ DIContainer ํจํด์ ์ฌ์ฉํ์ฌ ์ค์์์ ๊ด๋ฆฌํฉ๋๋ค.
- AppDIContainer: ์ฑ ์ ์ฒด์ ์ต์์ ์ปจํ ์ด๋๋ก, ๊ฐ Feature์ DIContainer๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํฉ๋๋ค.
- FeatureDIContainer (e.g., AuthDIContainer): ๊ฐ ๊ธฐ๋ฅ ๋ชจ๋์ ํ์ํ UseCase, Repository, ViewModel ๋ฑ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์ฃผ์ ํฉ๋๋ค.
- ์ด๋ฅผ ํตํด ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ ํ ์คํธ ์ Mock ๊ฐ์ฒด ์ฃผ์ ์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
ํ๋ฉด ์ ํ ๋ก์ง์ View์์ ๋ถ๋ฆฌ๋์ด Router์ ViewFactory๊ฐ ๋ด๋นํฉ๋๋ค.
- Router: ๋ด๋น๊ฒ์ด์
์คํ์ ๊ด๋ฆฌํ๊ณ ํ๋ฉด ์ ํ์ ์ํํฉ๋๋ค (
AppRouter,NavigationRouter). - ViewFactory: ํน์ ํ๋ฉด(View)์ ์์ฑํ ๋ ํ์ํ ์์กด์ฑ(ViewModel ๋ฑ)์ ์กฐ๋ฆฝํ์ฌ View๋ฅผ ๋ฐํํฉ๋๋ค.
- View๋
Router๋ฅผ ํตํด "์ด๋๋ก ๊ฐ์ง"๋ง ์์ฒญํ๋ฉฐ, ์ค์ "์ด๋ป๊ฒ ํ๋ฉด์ ๋์ธ์ง"๋ Router๊ฐ ์ฒ๋ฆฌํฉ๋๋ค.
- Language: Swift 6.0+
- UI Framework: SwiftUI
- Architecture: MVVM + Clean Architecture
- Build Tool: Tuist
- Networking: CodiveAPI (swift-openapi-generator)
- Reactive Programming: Combine / Swift Concurrency (async/await)