DDD IT ๋์๋ฆฌ๋ฅผ ์ํ ์ถ์ ๊ด๋ฆฌ ์์คํ
๐ฑ App Store | ๐ฏ Features | ๐ Architecture | ๐ Quick Start
DDD ์ถ์์ DDD IT ๋์๋ฆฌ์ ์ถ์ ๊ด๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ๋์์ฃผ๋ iOS ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค. ๊ฐ๋จํ๊ณ ์ง๊ด์ ํ ์ธํฐํ์ด์ค๋ก ๋์๋ฆฌ์๋ค์ ์ถ์ ํํฉ์ ๊ด๋ฆฌํ๊ณ , ๋์๋ฆฌ ํ๋์ ์ฒด๊ณํํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
๐ก ์ฐ๋ฆฌ๋ ์ ์ด ์ฑ์ ๋ง๋ค์์๊น์? DDD IT ๋์๋ฆฌ์ ์ถ์ ๊ด๋ฆฌ๋ฅผ ์ํ ๋ฒ๊ฑฐ๋ก์ด ๊ณผ์ ์ ์ค์ด๊ณ , ๊ฐ๋ฐ์๋ค์ด ํ์ต๊ณผ ๋คํธ์ํน์ ๋ ์ง์คํ ์ ์๋ ํ๊ฒฝ์ ๋ง๋ค๊ณ ์ ํฉ๋๋ค.
- Google OAuth 2.0: ๊ฐ๋จํ ๊ตฌ๊ธ ๊ณ์ ๋ก๊ทธ์ธ
- ์๋ ๋ก๊ทธ์ธ ์ ์ง: ์ฌ์คํ ์ ์๋ ์ธ์ฆ ์ํ ์ ์ง
- ๋ณด์ ๊ฐํ: OAuth 2.0 ๊ธฐ๋ฐ ์์ ํ ์ธ์ฆ ์์คํ
- ์ค์๊ฐ ์ถ์ ์ฒดํฌ: ๋น ๋ฅด๊ณ ์ ํํ ์ถ์ ํ์ธ
- ์ถ์ ์ํ ๊ด๋ฆฌ: ์ถ์, ์ง๊ฐ, ๊ฒฐ์, ๋๊ธฐ ์ํ ๊ตฌ๋ถ
- ์ถ์ ์ด๋ ฅ ์กฐํ: ๊ฐ์ธ๋ณ ์ถ์ ํํฉ ๋ฐ ํต๊ณ
- ์ถ์๋ฅ ํต๊ณ: ์๊ฐ์ ํต๊ณ ์ ๋ณด ์ ๊ณต
- ์คํฐ๋ ๋ฉค๋ฒ ๋ชฉ๋ก: ์ ์ฒด ์ฐธ๊ฐ์ ํํฉ ํ์ธ
- ๋ฉค๋ฒ ์ํ ์กฐํ: ๊ฐ ๋ฉค๋ฒ์ ์ถ์ ํจํด ๋ถ์
- ๊ด๋ฆฌ์ ๊ถํ: ์คํฐ๋ ์ด์์ง์ ์ํ ๊ด๋ฆฌ ๊ธฐ๋ฅ
- ์ง๊ด์ UI/UX: ๊ฐ๋จํ๊ณ ๋ช ํํ ์ธํฐํ์ด์ค
- ์ค์๊ฐ ๋๊ธฐํ: ์๋ฒ์์ ์ค์๊ฐ ๋ฐ์ดํฐ ๋๊ธฐํ
- ์คํ๋ผ์ธ ์ง์: ๋คํธ์ํฌ ์์ด๋ ๊ธฐ๋ณธ ๊ธฐ๋ฅ ์ฌ์ฉ ๊ฐ๋ฅ
- ๋คํฌ ๋ชจ๋: ์์คํ ์ค์ ์ ๋ฐ๋ฅธ ๋คํฌ/๋ผ์ดํธ ๋ชจ๋ ์ง์
DDD-Attendance-iOS/
โโโ ๐ฑ Projects/
โ โโโ App/ # ๋ฉ์ธ ์ ํ๋ฆฌ์ผ์ด์
ํ๊ฒ
โ โ โโโ Sources/
โ โ โ โโโ Application/ # AppDelegate, SceneDelegate
โ โ โ โโโ Di/ # Dependency Injection
โ โ โ โโโ Reducer/ # TCA Root Reducer
โ โ โ โโโ View/ # Root Views
โ โ โโโ Resources/ # Assets, Fonts, Localizations
โ โ โโโ Tests/ # App ๋ ๋ฒจ ํ
์คํธ
โ โ
โ โโโ Presentation/ # ๐จ UI Layer
โ โ โโโ Auth/ # ๋ก๊ทธ์ธ/์ธ์ฆ ํ๋ฉด
โ โ โโโ Splash/ # ์คํ๋์ ํ๋ฉด
โ โ โโโ OnBoarding/ # ์จ๋ณด๋ฉ ํ๋ฉด
โ โ โโโ Management/ # ์ถ์ ๊ด๋ฆฌ ํ๋ฉด
โ โ โโโ Member/ # ๋ฉค๋ฒ ๊ด๋ฆฌ ํ๋ฉด
โ โ โโโ Profile/ # ํ๋กํ ํ๋ฉด
โ โ โโโ Web/ # ์น๋ทฐ ํ๋ฉด
โ โ โโโ Presentation/ # ๊ณตํต ํ๋ ์ ํ
์ด์
์ ํธ
โ โ
โ โโโ Domain/ # ๐ฅ Business Logic Layer
โ โ โโโ Entity/ # ๋๋ฉ์ธ ์ํฐํฐ
โ โ โโโ UseCase/ # ๋น์ฆ๋์ค ๋ก์ง ๊ตฌํ
โ โ โโโ RepositoryInterface/ # Repository ํ๋กํ ์ฝ
โ โ
โ โโโ Data/ # ๐ก Data Layer
โ โ โโโ Repository/ # Repository ๊ตฌํ์ฒด
โ โ โโโ DataSource/ # ๋ก์ปฌ/์๊ฒฉ ๋ฐ์ดํฐ์์ค
โ โ โโโ Model/ # DTO, Response Models
โ โ
โ โโโ Network/ # ๐ Network Layer
โ โ โโโ Foundation/ # ๋คํธ์ํฌ ๊ธฐ๋ฐ ์ค์
โ โ โโโ Service/ # API ์๋น์ค ๊ตฌํ
โ โ โโโ Configuration/ # ๋คํธ์ํฌ ์ค์
โ โ
โ โโโ Shared/ # ๐ง Shared Layer
โ โโโ DesignSystem/ # ๋์์ธ ์์คํ
โ โโโ Utility/ # ๊ณตํต ์ ํธ๋ฆฌํฐ
โ โโโ Extension/ # Swift Extensions
โ
โโโ ๐ง Tuist/ # ํ๋ก์ ํธ ์ค์
โโโ Package.swift
โโโ ProjectDescriptionHelpers/
โโโ Dependencies.swift
graph TD
A[๐จ Presentation Layer] --> B[๐ฅ Domain Layer]
B --> C[๐ก Data Layer]
D[๐ Network Layer] --> C
E[๐ง Shared Layer] --> A
E --> B
E --> C
A -.-> F[SwiftUI Views]
A -.-> G[TCA Reducers]
B -.-> H[Use Cases]
B -.-> I[Entities]
C -.-> J[Repositories]
C -.-> K[API Services]
ํ๋ก์ ํธ ๋ชจ๋ ๊ฐ ์์กด์ฑ ๊ด๊ณ๋ (์๋ ์์ฑ)
Presentation โ Domain (UseCase Protocol)
โ
Domain/UseCase โ Domain (Repository Protocol)
โ
Data/Repository โ Domain (Entity + Repository Protocol)
โ
Network/Service โ Data (API ํต์ )
ํต์ฌ ์ค๊ณ ์์น:
- โ Presentation์ Domain์ UseCase๋ง ์์กด
- โ Domain์ ์ธ๋ถ ๊ณ์ธต์ ์์กดํ์ง ์๋ ์์ ๋น์ฆ๋์ค ๋ก์ง
- โ Data๋ Domain์ Entity์ Repository Protocol์ ๊ตฌํ
- โ ๋ชจ๋ ๋ฐ์ดํฐ ํ๋ฆ์ Domain์ ์ค์ฌ์ผ๋ก ์งํ
- ๐ฏ Architecture: The Composable Architecture (TCA) 1.18.0
- ๐ฆ Modularization: Tuist 4.x (Micro Feature Architecture)
- ๐ Dependency Injection: WeaveDI 3.4.0
- ๐ Navigation: TCACoordinators 0.11.1
- โก Concurrency: Swift Concurrency (async/await)
- ComposableArchitecture 1.18.0: ์ํ ๊ด๋ฆฌ ๋ฐ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ก์ฐ
- TCACoordinators 0.11.1: TCA ๊ธฐ๋ฐ ํ๋ฉด ์ ํ ๋ฐ ๋ค๋น๊ฒ์ด์
- WeaveDI 3.4.0: ์์กด์ฑ ์ฃผ์ ์ปจํ ์ด๋ (์ปค์คํ ํฌํฌ)
- GoogleSignIn 9.0.0: Google OAuth 2.0 ์ธ์ฆ
- Firebase 12.7.0: ๋ฐฑ์๋ ์๋น์ค (Analytics, Crashlytics)
- AsyncMoya 1.1.8: async/await ๊ธฐ๋ฐ ๋คํธ์ํน (์ปค์คํ ํฌํฌ)
- AppAuth 2.0.0: OAuth 2.0 ๋ฐ OpenID Connect ํด๋ผ์ด์ธํธ
- ๐จ UI Framework: SwiftUI + SwiftUIX 0.2.3
- ๐ผ๏ธ Image Loading: SDWebImageSwiftUI 2.0.0
- ๐จ Design System: ์ปค์คํ DesignSystem ๋ชจ๋
- ๐ฑ Responsive Design: ๋ชจ๋ iOS ๊ธฐ๊ธฐ ๋์
- ๐ HTTP Client: AsyncMoya 1.1.8 (Moya + async/await)
- ๐ฑ API Architecture: RESTful API with JSON
- ๐พ Local Storage: UserDefaults, Keychain
- ๐ State Management: TCA Store
- ๐ฅ Backend Services: Firebase 12.7.0
- ๐ Analytics & Logging: Firebase Analytics + LogMacro
- ๐ง Build Tool: Tuist + SPM (Swift Package Manager)
- ๐งช Testing: XCTest + TCA Testing + XCTestDynamicOverlay
- ๐ฑ Automation: fastlane (์คํฌ๋ฆฐ์ท, ๋ฐฐํฌ)
- โก Performance: Swift 6.0 + Concurrency Extras
- ๐ Crash Reporting: Firebase Crashlytics
- ๐ป Xcode: 16.0 ์ด์
- ๐ฑ iOS: 17.0 ์ด์
- โก Swift: 6.0 ์ด์
- ๐ง Tuist: 4.x ์ด์
git clone https://github.com/DDD-Community/Attendance_iOS.git
cd Attendance_iOScurl -Ls https://install.tuist.io | bash# ์ ์ฒด ์ํฌํ๋ก์ฐ (๊ถ์ฅ)
./make build # clean โ install โ generate
# ๋๋ ๋จ๊ณ๋ณ ์คํ
./make clean # ๊ธฐ์กด ํ์ผ ์ ๋ฆฌ
./make install # ์์กด์ฑ ์ค์น
./make generate # ํ๋ก์ ํธ ์์ฑopen DDDAttendance.xcworkspaceํ๋ก์ ํธ ์คํ์ ์ํด ๋ค์ ์ค์ ์ด ํ์ํฉ๋๋ค:
// Config ํ์ผ์์ ์ค์ (Dev.xcconfig, Prod.xcconfig)
BASE_URL = api.dddstudy.kr/
GOOGLE_CLIENT_ID = YOUR_GOOGLE_CLIENT_ID
GOOGLE_IOS_CLIENT_ID = YOUR_GOOGLE_IOS_CLIENT_ID
REVERSED_CLIENT_ID = YOUR_REVERSED_CLIENT_ID./make build # ์ ์ฒด ๋น๋ ํ๋ก์ธ์ค (๊ถ์ฅ)
./make generate # ํ๋ก์ ํธ ์์ฑ๋ง
./make clean # ๋น๋ ์ํฐํฉํธ ์ ๋ฆฌ
./make install # ์์กด์ฑ ์ค์นtuist clean # Tuist ์บ์ ์ ๋ฆฌ
./make clean # ๋ชจ๋ ๋น๋ ํ์ผ ์ ๋ฆฌtuist graph # ์์กด์ฑ ๊ทธ๋ํ ์์ฑ
tuist test # ์ ์ฒด ํ
์คํธ ์คํfastlane ios beta # TestFlight ๋ฐฐํฌ
fastlane ios release # App Store ๋ฐฐํฌ
fastlane ios screenshots # ์คํฌ๋ฆฐ์ท ์๋ ์์ฑ
fastlane ios build_for_testing # ํ
์คํธ ๋น๋fastlane ์ฃผ์ ๊ธฐ๋ฅ:
- ์๋ํ๋ ๋น๋ ๋ฐ ๋ฐฐํฌ
- App Store Connect ๊ด๋ฆฌ
- ์ธ์ฆ์ ๋ฐ ํ๋กํ ๊ด๋ฆฌ
- ์คํฌ๋ฆฐ์ท ์๋ ์์ฑ
- ์ฑ ๋ค์ด๋ก๋ ๋ฐ ์ค์น
- Google ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ
- ๊ถํ ์ค์ (ํธ์ ์๋ฆผ ๋ฑ)
- ์ถ์ ํญ์์ ํ์ฌ ์คํฐ๋ ์ธ์ ํ์ธ
- ์ถ์ ์ฒดํฌ ๋ฒํผ ํฐ์น
- ์ถ์ ์ํ ์๋ ์ ๋ฐ์ดํธ (์ถ์/์ง๊ฐ/๊ฒฐ์/๋๊ธฐ)
- ํต๊ณ ํญ์์ ๊ฐ์ธ ์ถ์๋ฅ ํ์ธ
- ๋ฌ๋ ฅ ๋ทฐ๋ก ์๋ณ ์ถ์ ํจํด ํ์ธ
- ์์ธ ์ด๋ ฅ ์กฐํ ๊ฐ๋ฅ
- ํ๋กํ ํญ์์ ๊ฐ์ธ ์ ๋ณด ํ์ธ
- ์ค์ ๋ฉ๋ด์์ ์ฑ ํ๊ฒฝ ์ค์
- ๋ก๊ทธ์์ ๋ฐ ๊ณ์ ๊ด๋ฆฌ
์ด ํ๋ก์ ํธ๋ MIT ๋ผ์ด์ ์ค ํ์ ๋ฐฐํฌ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ LICENSE ํ์ผ์ ์ฐธ๊ณ ํ์ธ์.
- iOS Lead Developer: ์์์ง (@Roy-wonji)
- iOS Developer: ํ์ํ (@honghoker)
- Main Branch: ํ๋ก๋์ ๋ฐฐํฌ์ฉ
- Develop Branch: ๊ฐ๋ฐ ํตํฉ ๋ธ๋์น
- Feature Branch: ๊ธฐ๋ฅ๋ณ ๊ฐ๋ฐ ๋ธ๋์น
- Develop ๋ธ๋์น์์ Feature ๋ธ๋์น ์์ฑ
- Feature ๋ธ๋์น์์ ๊ฐ๋ฐ ์งํ
- Feature โ Develop Pull Request
- ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ ์ถฉ๋ ํด๊ฒฐ ํ ๋จธ์ง
- Develop โ Main ๋ฐฐํฌ์ฉ Pull Request
- ๐ง ์ด๋ฉ์ผ: suhwj81@gmail.com
- ๐ ๋ฒ๊ทธ ์ ๊ณ : Issues
- ๐ก ๊ธฐ๋ฅ ์ ์: Discussions
- ๐ฑ App Store: DDD ์ถ์ ๋ค์ด๋ก๋






