"μ½λ κ²μ λμ΄, 곡κ°μ΄ μ΄μΌκΈ°κ° λλ κ²½ν" λ°μ½λ ν λ²μΌλ‘ μ± μ λ±λ‘νκ³ , HomeKit μ‘°λͺ Β·μ¬μ΄λκ° λνμ ν¨κ» μμ§μ λλ€.
**λ루(LivingStory)**λ μμ΄λ€μ΄ λνμ± μ μ½μΌλ©° μ€μ 곡κ°μ μ‘°λͺ κ³Ό μ¬μ΄λκ° μ΄μΌκΈ°μ λ§μΆ° λ³νλ λͺ°μ ν λν μ½κΈ° μ±μ λλ€.
ISBN λ°μ½λλ₯Ό μ€μΊν΄ μ± μ λ±λ‘νκ³ , HomeKit μ°λ μ€λ§νΈ κΈ°κΈ°κ° λν μ₯λ©΄μ λ°λΌ λΉκ³Ό μ리λ₯Ό μ°μΆν©λλ€. μ½κΈ° μΈμ μ κΈ°λ‘νκ³ ν΅κ³λ₯Ό νμΈν μ μμ΄ μ½κΈ° μ΅κ΄ νμ±κΉμ§ μ§μν©λλ€.
| λ΄λΉμ | μν | λ΄λΉ νλ©΄ |
|---|---|---|
| Demian (λ°λ―Έμ) | UIKit κΈ°λ° νλ©΄ Β· Coordinator Β· λ€νΈμν¬ | μ¨λ³΄λ© Β· ν Β· μ€μΊλ |
| Ito (μ΄ν ) | SwiftUI κΈ°λ° νλ©΄ Β· λ°μ΄ν° κ³μΈ΅ | μ± νλ‘ν Β· μ± μ½κΈ° Β· ν΅κ³ |
- AVFoundation κΈ°λ° ISBN λ°μ½λ μ€μΊλ
- Kakao Book APIλ‘ λμ μ 보 μλ μ‘°ν (μ λͺ© Β· μ μ Β· νμ§)
- CoreDataμ μ± μꡬ μ μ₯ (BookRepository)
- λ±λ‘λ λνμ± μΊλ¬μ UI (UICollectionView + Custom FlowLayout)
- μ± λ³ νλ‘ν μμΈ νλ©΄
- λν μ½κΈ° μμ/μ’ λ£ κΈ°λ‘
- μ½κΈ° μΈμ λ³ μκ° μΈ‘μ (ReadingSessionRepository)
- Gemini AI κΈ°λ° λ νκ° λν μ§μ
- HMHomeManager κΈ°λ° μ€λ§νΈ κΈ°κΈ° κ²μ Β· λ±λ‘
- μ‘°λͺ μμ Β· λ°κΈ° Β· μ¬μ΄λλ₯Ό λν μ₯λ©΄μ λ§μΆ° μ μ΄
- λ°°κ²½ μμ μ¬μ (AVFoundation AudioPlayerService)
- μ΄ μ½κΈ° μκ° Β· μλ κΆμ Β· μΊλ¦°λ κΈ°λ° μ½κΈ° κΈ°λ‘
- StatCardViewλ‘ μκ°ν
Phase 1 (νμ¬) Phase 2 Phase 3 Phase 4 Phase 5
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
UIKit + MVC β SwiftUI ν΅ν© β MVVM + RxSwift β Combine μ ν β iOS 26 μμ±
Observable<T> UIHostingVC Input/Output @Published Liquid Glass
BaseVC Coordinator ViewModel SwiftUI 6
AppCoordinatorκ° νλ©΄ μ ν μ λ΄SceneDelegateβAppCoordinatorβ κ° νλ©΄ ViewControllerMainTabBarControllerλ‘ ν κΈ°λ° λ€λΉκ²μ΄μ
BookRepositoryProtocol/ReadingSessionRepositoryProtocolβ νλ‘ν μ½ κΈ°λ° μΆμνBookRepository/ReadingSessionRepositoryβ CoreData ꡬν체BookEntityΒ·ReadingSessionEntityΒ·ConversationEntityνμ₯
LivingStory-iOS/
βββ Application/
β βββ AppDelegate.swift
β βββ SceneDelegate.swift
β βββ MainTabBarController.swift
β βββ Coordinator/
β βββ AppCoordinator.swift
β βββ Coordinator.swift # Coordinator νλ‘ν μ½
β
βββ Core/
β βββ Components/ # μ¬μ¬μ© UI
β β βββ ReadingLogCalendar.swift # μ½κΈ° μΊλ¦°λ
β β βββ ReadingTimeFormatter.swift
β β βββ StatCardView.swift # ν΅κ³ μΉ΄λ
β β βββ CarouselCell.swift / FlowLayout
β β βββ PrimaryButton.swift
β β βββ RadialGlowView.swift
β βββ Consts/
β β βββ FontLiterals.swift
β β βββ GeminiPrompts.swift # AI ν둬ννΈ
β β βββ StringLiterals.swift
β β βββ SymbolLiterals.swift
β βββ Models/
β β βββ GeminiResponse.swift # AI μλ΅ λͺ¨λΈ
β β βββ LightingConfig.swift # μ‘°λͺ
μ€μ
β β βββ MusicCategory.swift # λ°°κ²½ μμ
λΆλ₯
β βββ Network/
β β βββ NetworkService.swift # URLSession κΈ°λ°
β β βββ NetworkError.swift
β β βββ Config.swift # API Key κ΄λ¦¬
β β βββ ISBN/
β β βββ ISBNLookupService.swift # Kakao Book API
β β βββ KakaoBookDTO.swift
β βββ Persistence/
β β βββ PersistenceController.swift # CoreData μ€ν
β β βββ NaruModel.xcdatamodeld # λ°μ΄ν° λͺ¨λΈ
β β βββ Repositories/
β β β βββ BookRepository.swift
β β β βββ ReadingSessionRepository.swift
β β βββ Extensions/
β β βββ BookEntity+Extensions.swift
β β βββ ReadingSessionEntity+Extensions.swift
β β βββ ConversationEntity+Extensions.swift
β βββ Protocols/
β β βββ BookRepositoryProtocol.swift
β β βββ ReadingSessionRepositoryProtocol.swift
β βββ Services/
β β βββ AudioPlayerService.swift # λ°°κ²½ μμ
μ¬μ
β β βββ GeminiService.swift # AI λν μλΉμ€
β βββ Storage/
β βββ UserData.swift
β βββ UserDefaultsWrapper.swift
β
βββ Model/
β βββ BookProfileModel.swift
β βββ ConversationProfile.swift
β βββ DeviceModel.swift # HomeKit κΈ°κΈ°
β βββ HomeDeviceType.swift
β βββ HomeModel.swift
β βββ ReadingSessionProfile.swift
β βββ RoomModel.swift
β
βββ Presentation/Screens/
β βββ Onboarding/ # λ°λ―Έμ λ΄λΉ (UIKit)
β βββ Home/ # λ°λ―Έμ λ΄λΉ (UIKit)
β βββ Scanner/ # λ°λ―Έμ λ΄λΉ (UIKit)
β βββ Book/ # μΊλ¬μ
λ·° (UIKit)
β βββ BookProfile/ # μ΄ν λ΄λΉ (SwiftUI)
β βββ Reading/ # μ΄ν λ΄λΉ (SwiftUI)
β βββ Statistics/ # μ΄ν λ΄λΉ (SwiftUI)
β βββ DeviceDiscovery/ # HomeKit κΈ°κΈ° κ²μ
β βββ My/ # λ§μ΄ νμ΄μ§
β
βββ Service/
[μ¬μ©μ]
β
β ISBN λ°μ½λ μ€μΊ
βΌ
[Scanner] βββ [ISBNLookupService] βββ Kakao Book API
β
βΌ
[BookRepository] βββ CoreData (BookEntity)
β
βΌ
[Home / Book μΊλ¬μ
]
β
β μ½κΈ° μμ
βΌ
[Reading μΈμ
] βββ [ReadingSessionRepository]
β
ββββ [HomeKit] μ‘°λͺ
Β·μ¬μ΄λ μ°μΆ
ββββ [AudioPlayerService] λ°°κ²½ μμ
ββββ [GeminiService] AI λ
νκ° λν
β
βΌ
[Statistics] μ½κΈ° ν΅κ³ μκ°ν
mainβ ν΅ν© λΈλμΉfeat/Β·fix/Β·refactor/Β·chore/β κΈ°λ₯ λ¨μ λΈλμΉ- PR κ·μΉ:
feat/#μ΄μλ²νΈ/κΈ°λ₯λͺ+ μ½λ 리뷰 νμ - μ»€λ° μ»¨λ²€μ : COMMIT_CONVENTION.md
| λ¬Έμ | μ€λͺ |
|---|---|
| MASTER_PLAN.md | 리ν©ν λ§ λ‘λλ§΅ (MVC β MVVM β Combine) |
| FEATURE_SPEC.md | μ 체 κΈ°λ₯ λͺ μΈμ |
| PROJECT_STRUCTURE.md | νλ‘μ νΈ κ΅¬μ‘° κ°μ΄λ |
| IMPLEMENTATION_COOKBOOK.md | ꡬν ν¨ν΄ λ μνΌ |
| GEMINI_API_KEY_SETUP.md | Gemini API ν€ μ€μ |
| COMMIT_CONVENTION.md | μ»€λ° μ»¨λ²€μ |


