์จ๋๋ฐ์ด๋ ์ฌ์ฉ์์ ๊พธ์คํ ๊ธฐ๋ก์ ํตํด ์ฑ์ฅ์ ๋๋ iOS ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค. ์ฌ์ฉ์๋ ๋งค์ผ์ ๊ฐ์ , ์ด๋, ์ต๊ด ๋ฑ์ ๊ธฐ๋กํ ์ ์์ผ๋ฉฐ, ์ค์ ํ ๋ชฉํ๋ฅผ ๋ฌ์ฑํด๋๊ฐ๋ฉฐ 'ํ๋ฃจ ๋๋ฌด'๋ฅผ ํค์ฐ๋ ์๊ฐ์ ์ธ ๊ฒฝํ์ ํ ์ ์์ต๋๋ค.
๋จ์ํ ๊ธฐ๋ก์ ๋์ด, ์ฌ์ฉ์๊ฐ ์์ ์ ์ถ์ ๊ฐ๊พธ๊ณ ์ฑ์ฅํ๋ ์ฆ๊ฑฐ์์ ๋๋ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
- ์์ ๋ก๊ทธ์ธ: ์นด์นด์ค ๋ฐ Apple ๊ณ์ ์ ํตํ ๊ฐํธํ ํ์๊ฐ์ ๋ฐ ๋ก๊ทธ์ธ์ ์ง์ํฉ๋๋ค.
- ์จ๋ณด๋ฉ: ์ฌ์ฉ์ ๋ง์ถคํ ๊ฒฝํ์ ์ํด ์ด๊ธฐ ์ค์ (๋๋ค์, ์ฃผ ๊ธฐ๋ก ํ์ , ๋ชฉํ ์ค์ ๋ฑ) ๊ณผ์ ์ ์๋ดํฉ๋๋ค.
- ๊ธฐ๋ก ๊ด๋ฆฌ:
- ํ๋ฃจ ๊ธฐ๋ก: ๊ทธ๋ ์ ๊ฐ์ , ์๊ฐ, ์ฌ์ง์ ํจ๊ป ๊ธฐ๋กํฉ๋๋ค.
- ์ด๋ ๊ธฐ๋ก: ๋ค์ํ ์ด๋ ์ข ๋ฅ(๋ฌ๋, ์จ์ดํธ ๋ฑ)์ ์ธ๋ถ ํญ๋ชฉ(์๋ชจ ์นผ๋ก๋ฆฌ, ์๊ฐ, ๊ฑธ์ ์ ๋ฑ)์ ๊ธฐ๋กํฉ๋๋ค.
- ์ต๊ด ๊ธฐ๋ก: ๋ง๋ค๊ณ ์ถ์ ์ต๊ด์ ๋ฑ๋กํ๊ณ , ์๋ฆผ ์ค์ ๋ฐ ๋ฌ์ฑ ์ฌ๋ถ๋ฅผ ์ฒดํฌํฉ๋๋ค.
- ๋ฉ์ธ ํ๋ฉด:
- ์ฌ์ฉ์์ ๋ชฉํ ๋ฌ์ฑ๋ฅ ์ ๋ฐ๋ผ ์ฑ์ฅํ๋ 'ํ๋ฃจ ๋๋ฌด'๋ฅผ ์๊ฐ์ ์ผ๋ก ์ ๊ณตํฉ๋๋ค.
- ํ๋จ ์ํธ(Bottom Sheet)๋ฅผ ํตํด ์ ํํ ๋ ์ง์ ๊ธฐ๋ก์ ํ์ธํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- ์บ๋ฆฐ๋: ์๋ณ/์ฃผ๋ณ ์บ๋ฆฐ๋๋ฅผ ํตํด ๊ณผ๊ฑฐ์ ๊ธฐ๋ก์ ํ๋์ ๋ณผ ์ ์์ผ๋ฉฐ, ๊ธฐ๋ก ์ข ๋ฅ๋ณ ํํฐ๋ง ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ๋ชฉํ ์์คํ
:
- ์ฌ์ฉ์๊ฐ ์ง์ ๋ชฉํ ๊ธฐ๊ฐ(10์ผ, 20์ผ, 30์ผ)์ ์ค์ ํฉ๋๋ค.
- ๋ชฉํ ๋ฌ์ฑ ์ ๋ฆฌํฌํธ๋ฅผ ์ ๊ณตํ์ฌ ์ฑ์ทจ๊ฐ์ ๊ณ ์ทจํฉ๋๋ค.
- ์๋ฆผ: Firebase Cloud Messaging(FCM)์ ํ์ฉํ์ฌ ๊ธฐ๋ก ์๋ฆผ, ๋ชฉํ ์ค์ ์๋ฆผ, ์์คํ ๊ณต์ง ๋ฑ ๋ค์ํ ํธ์ ์๋ฆผ์ ์ ๊ณตํฉ๋๋ค.
- ์ค์ : ํ๋กํ ์ ๋ณด(๋๋ค์, ์์ผ) ์์ , ์๋ฆผ ์์ ์ฌ๋ถ ์ค์ , ์ฝ๊ด ํ์ธ ๋ฐ ๋ฌธ์ํ๊ธฐ ๋ฑ์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์ด ํ๋ก์ ํธ๋ Clean Architecture๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณ๋์์ผ๋ฉฐ, ๊ฐ ๊ณ์ธต์ ๋ค์๊ณผ ๊ฐ์ ์ญํ ์ ์ํํฉ๋๋ค.
- Presentation Layer:
- MVVM-C (Model-View-ViewModel-Coordinator) ํจํด์ ์ ์ฉํ์ต๋๋ค.
- View: SwiftUI๋ฅผ ์ฌ์ฉํ์ฌ UI๋ฅผ ์ ์ธ์ ์ผ๋ก ๊ตฌ์ฑํฉ๋๋ค.
- ViewModel: View์ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ , UseCase๋ฅผ ํตํด ๋น์ฆ๋์ค ๋ก์ง์ ์คํํฉ๋๋ค.
- Coordinator: ํ๋ฉด ์ ํ ๋ฐ Navigation ๋ก์ง์ ์ค์์์ ๊ด๋ฆฌํ์ฌ View์ ์์กด์ฑ์ ๋ฎ์ถฅ๋๋ค.
- Domain Layer:
- Entity: ์ฑ์ ํต์ฌ ๋น์ฆ๋์ค ๋ชจ๋ธ์ ์ ์ํฉ๋๋ค. (e.g.,
User,Record,Goal) - UseCase: ํน์ ๋น์ฆ๋์ค ๋ก์ง์ ์บก์ํํฉ๋๋ค. ViewModel์ ์ด UseCase๋ฅผ ํธ์ถํ์ฌ ์์ ์ ์ํํฉ๋๋ค.
- Repository (Protocol): ๋ฐ์ดํฐ ์์ค์ ๋ํ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ์ฌ Data Layer์์ ์์กด์ฑ์ ๋ถ๋ฆฌํฉ๋๋ค.
- Entity: ์ฑ์ ํต์ฌ ๋น์ฆ๋์ค ๋ชจ๋ธ์ ์ ์ํฉ๋๋ค. (e.g.,
- Data Layer:
- Repository (Implementation): Domain Layer์ ์ ์๋ Repository ํ๋กํ ์ฝ์ ๊ตฌํํฉ๋๋ค.
- Network:
Alamofire๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์์ API ํต์ ์ ๋ด๋นํฉ๋๋ค. - Data Source:
Keychain(ํ ํฐ ๊ด๋ฆฌ),UserDefaults๋ฑ ๋ก์ปฌ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํฉ๋๋ค.
- UI Framework:
SwiftUI - Concurrency:
Async/Await(Swift Concurrency) - Reactive Programming:
Combine - Networking:
Alamofire - Authentication:
KakaoSDK,AuthenticationServices(Sign in with Apple) - Push Notifications & Analytics:
Firebase(FCM, Analytics) - Dependency Management:
Swift Package Manager
RecordManagment/
โโโโ AppDelegate.swift # Firebase, Notification ์ค์
โโโโ Analytics/ # Firebase Analytics ๊ด๋ฆฌ
โโโโ Assets.xcassets/ # ์ฑ ์์ด์ฝ, ์ด๋ฏธ์ง ๋ฑ ๋ฆฌ์์ค
โโโโ Data/
โ โโโโ Repository/ # Domain์ Repository ํ๋กํ ์ฝ ๊ตฌํ์ฒด
โ โโโโ Network/ # ๋คํธ์ํฌ ํต์ (Alamofire, Manager)
โโโโ Domain/
โ โโโโ Entity/ # ํต์ฌ ๋น์ฆ๋์ค ๋ชจ๋ธ
โ โโโโ Repository/ # ๋ฐ์ดํฐ ๊ณ์ธต์ ์ธํฐํ์ด์ค (Protocol)
โ โโโโ UseCase/ # ๋น์ฆ๋์ค ๋ก์ง
โโโโ Extensions/
โ โโโโ Common/ # Foundation, UIKit ํด๋์ค ํ์ฅ
โ โโโโ Components/ # ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ SwiftUI View ์ปดํฌ๋ํธ
โ โโโโ Modifier/ # ViewModifier ์ ์
โโโโ Presentation/
โ โโโโ Coordinator/ # ํ๋ฉด ๋ค๋น๊ฒ์ด์
๊ด๋ฆฌ
โ โโโโ View/ # SwiftUI ๋ทฐ
โ โโโโ ViewModel/ # ๋ทฐ์ ์ํ ๋ฐ ๋ก์ง ๊ด๋ฆฌ
โโโโ Resources/
โโโโ Font/ # ์ปค์คํ
ํฐํธ