์น๊ตฌ์ ํจ๊ป ๋ง๋๋ ๋ค์ด์ดํธ ์ต๊ด
MODY๋ ํผ์ ์ง์ํ๊ธฐ ์ด๋ ค์ด ๋ค์ด์ดํธ๋ฅผ ์น๊ตฌ์ ํจ๊ป ๊ธฐ๋กํ๊ณ ๊ณต์ ํ๋ ์์ ๋ค์ด์ดํธ ์๋น์ค์ ๋๋ค. ๊ทธ๋ฃน์ ์ฐธ์ฌํด ์์ฌ์ ์ด๋์ ์ฌ์ง์ผ๋ก ๊ธฐ๋กํ๊ณ , ๊ทธ๋ฃน ํผ๋์ ์ฃผ๊ฐ ํ๋์ ํตํด ์๋ก์ ์ต๊ด์ ํ์ธํ ์ ์์ต๋๋ค.
๊ทธ๋ฃน๊ณผ ๊ธฐ๋ก ๊ฒฝํ์ ์ค์ฌ์ผ๋ก ์ฑ๋ฆฐ์ง, ๊ฑด๊ฐ ๋ฐ์ดํฐ ์ฐ๋, ์์ ๊ธฐ๋ฅ์ ํจ๊ป ์ ๊ณตํฉ๋๋ค.
| Category | Stack |
|---|---|
| Language | Swift |
| UI | UIKit, SwiftUI |
| Architecture | Micro Feature Architecture, Clean Architecture |
| State Management | TCA, ReactorKit |
| Reactive | RxSwift, RxCocoa, RxRelay |
| Networking | Alamofire |
| Dependency Injection | Swinject |
| Layout | SnapKit |
| Image | Nuke |
| Service | Firebase, Kakao SDK |
| Project Generation | Tuist |
| Test | XCTest |
| CI/CD | GitHub Actions, Fastlane |
- KakaoยทApple ๋ก๊ทธ์ธ ๋ฐ ์จ๋ณด๋ฉ
- ๊ทธ๋ฃน ์์ฑยท์ฐธ์ฌยท์ด๋ยท๊ด๋ฆฌ
- ์์ฌยท์ด๋ ์ฌ์ง ๊ธฐ๋ก
- ๊ทธ๋ฃน ํผ๋ ๋ฐ ์ฃผ๊ฐ ํ๋ ํ์ธ
- ํ๋กํ ๋ฐ ์ฒด์ค ๊ด๋ฆฌ
- ์์ฌยท์ด๋ ๋ฆฌ๋ง์ธ๋์ ๊ธฐ๋ณธ ์๋ฆผ
- ๊ทธ๋ฃน ์ฑ๋ฆฐ์ง
- ๊ฑด๊ฐ ๋ฐ์ดํฐ ์ฐ๋
- ๋๊ธ ๋ฐ ์ฝ ์ฐ๋ฅด๊ธฐ
- ์ฑ๋ฆฐ์งยท๋๊ธ ๊ด๋ จ ์๋ฆผ
- ๊ธฐ๋ก ์์ธ ๋ฐ ์์ ์ํธ์์ฉ ํ์ฅ
MODY๋ Toss์ Micro Feature Architecture๋ฅผ ์ฐธ๊ณ ํด ๊ธฐ๋ฅ๋ณ ๋ชจ๋์ ๊ตฌ์ฑํ์ต๋๋ค. ๊ฐ ๊ธฐ๋ฅ์ ๊ตฌํ๊ณผ ์ธ๋ถ ๊ณ์ฝ์ ๋ถ๋ฆฌํ๊ณ , ๋ชจ๋ ๋ด๋ถ์์๋ Presentation, Domain, Data์ ์ฑ ์๊ณผ ์์กด์ฑ ๊ฒฝ๊ณ๋ฅผ ๋ช ํํ ํ๋ ๋ฐ ์ค์ ์ ๋์์ต๋๋ค.
Projects
โโโ App # ์ฑ ์ง์
์ , Composition Root, DI
โโโ Feature # ์ฌ์ฉ์ ๊ธฐ๋ฅ ๋จ์ Micro Feature
โโโ Core # Network, Auth, Camera, Notification, Image ๋ฑ ๊ธฐ๋ฐ ๊ธฐ๋ฅ
โโโ Domain # ์ฌ๋ฌ ๋ชจ๋์ด ๊ณต์ ํ๋ ๋๋ฉ์ธ ๋ชจ๋ธ๊ณผ ์ ์ฑ
โโโ DesignSystem # ๊ณตํต UI ์ปดํฌ๋ํธ, ๋์์ธ ํ ํฐ, ๋ฆฌ์์ค
โโโ Shared # Logger, Utility ๋ฑ ๊ณตํต ๋๊ตฌ
๊ธฐ๋ฅ ๋ชจ๋์ ํ์์ ๋ฐ๋ผ ์๋์ ๊ฐ์ ๋ ๋ฆฝ ํ๊น์ผ๋ก ๋ถ๋ฆฌ๋ฉ๋๋ค.
| Target | Responsibility |
|---|---|
Feature |
๊ธฐ๋ฅ์ ์ค์ ๊ตฌํ |
Interface |
์ธ๋ถ์ ๊ณต๊ฐํ ์ ๋ ฅยท์ถ๋ ฅ, Route |
Testing |
ํ ์คํธ์์ ์ฌ์ฌ์ฉํ ์ง์ ์ฝ๋ |
Tests |
๊ธฐ๋ฅ ๋จ์ ํ ์คํธ |
Demo |
๊ธฐ๋ฅ์ ๋ ๋ฆฝ์ ์ผ๋ก ์คํํ๊ณ ํ์ธํ๋ ๋ฐ๋ชจ ์ฑ |
Feature
โโโ Sources
โโโ Presentation # ํ๋ฉด, ์ฌ์ฉ์ ์ด๋ฒคํธ, ์ํ ํํ
โโโ Domain # ๋น์ฆ๋์ค ๊ท์น, UseCase, Repository ๊ณ์ฝ
โโโ Data # API, DTO, Repository ๊ตฌํ
โโโ Builder # ๊ธฐ๋ฅ ์์ฑ๊ณผ ์์กด์ฑ ์กฐ๋ฆฝ
- SwiftUI ๊ธฐ๋ฐ ๊ธฐ๋ฅ์ ์ฃผ๋ก TCA๋ก ์ํ์ Effect๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- UIKit ๊ธฐ๋ฐ ํ๋ฉด์ Coordinator๋ก ํ๋ฉด ์ ํ ์ฑ ์์ ๋ถ๋ฆฌํ๊ณ , ์ผ๋ถ ๊ธฐ๋ฅ์์ ReactorKit๊ณผ RxSwift๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๊ธฐ๋ฅ ์ธ๋ถ์์๋ ๊ตฌํ ํ๊น๋ณด๋ค
Interface์ ์์กดํ๋๋ก ๊ตฌ์ฑํด ๋ชจ๋ ๊ฐ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ท์ต๋๋ค.
DEV์ PROD ํ๊ฒฝ์ ๋ถ๋ฆฌํฉ๋๋ค.
| Environment | Purpose |
|---|---|
DEV |
๊ฐ๋ฐ ๋ฐ ๋ด๋ถ ๊ฒ์ฆ |
PROD |
์ด์ ๋ฐฐํฌ |
ํ๊ฒฝ๋ณ Bundle Identifier, API Base URL, Firebase ์ค์ , Kakao App Key๋ฅผ ๋ณ๋๋ก ๊ด๋ฆฌํด ๋น๋ ์ค์ ์ด ์๋ก ์์ด์ง ์๋๋ก ๊ตฌ์ฑํ์ต๋๋ค.
GitHub Actions์ Fastlane์ ์ด์ฉํด ํ๊ทธ ๊ธฐ๋ฐ ๋น๋ ๋ฐ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ฑํ์ต๋๋ค.
dev/**,prod/**: DEVยทPROD ์ฑ์ ๋น๋ํด TestFlight๋ก ๋ฐฐํฌdemo/**,design/**: FeatureยทDesignSystem ๋ฐ๋ชจ ์ฑ์ ๋น๋ํด Firebase App Distribution์ผ๋ก ๋ฐฐํฌ- ๋ฐฐํฌ ํ๊ทธ ๊ฒ์ฆ, ํ๊ฒฝ ์ค์ , Firebase ์ค์ , Tuist ๋ฐ Ruby ํ๊ฒฝ ๊ตฌ์ฑ ์๋ํ
- ์ธ์ฆ์์ Provisioning Profile ์ค์น, ๋น๋ ๋ฒํธ ๊ด๋ฆฌ, ์ฑ ๋น๋ ๋ฐ ์ ๋ก๋ ์๋ํ
- ํ์ดํ๋ผ์ธ ์์ยท์ฑ๊ณตยท์คํจ ๊ฒฐ๊ณผ๋ฅผ Slack์ผ๋ก ์๋ฆผ
Tests์ Testing ํ๊น ๊ตฌ์กฐ๋ฅผ ๊ฐ์ถ๊ณ ์์ต๋๋ค. 1.1.0๊น์ง๋ ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ์ง์คํ์ผ๋ฉฐ, ๋จ์ ํ
์คํธ์ ํ
์คํธ ์ง์ ์ฝ๋๋ ์ถํ ๋ณด๊ฐํ ์์ ์
๋๋ค.