App 패키지 수
25개
- `Resource`, `Environment`, `TokenManager`, `ProfileManager` 같은 앱 공통 기능
- `...Interface` 계열은 계약용 인터페이스 모듈
- `MStoveBaseUI`, `RemoteConfig`, `RealtimeEventStream` 등도 포함
이 문서는 `mstove-ios` 안의 로컬 Swift Package들을 그룹별로 정리하고, 어디부터 보면 프로젝트 구조를 가장 빨리 이해할 수 있는지 안내하는 지도다.
2026-04-10
이 프로젝트는 하나의 거대한 앱 코드베이스가 아니라, `App`, `Core`, `Feature`라는 여러 부품 상자로 쪼갠 구조다. 그래서 “어떤 상자가 기반이고 어떤 상자가 기능인지”부터 알면 전체가 훨씬 쉬워진다.
flowchart TD
A[App packages]
B[Core packages]
C[Feature packages]
A --> A1[앱 공통 서비스 / 리소스 / 인터페이스]
B --> B1[네트워크 / 유틸 / 정책 / SDK 래퍼]
C --> C1[실제 화면 / 기능 조합]
25개
8개
18개
`MStoveV3Home`, `StreamingPlay`, `SGSSocialUI`, `Notice`, `QRLogin`처럼 실제 제품 기능이 들어 있는 층이다. 보통 이 계층이 가장 의존성이 많고, 가장 무겁다.
| 그룹 | 패키지 |
|---|---|
| App | `ABTest`, `Biometric`, `BlockUserInterface`, `CookieManager`, `Environment`, `GOTPLib`, `HomeTemplate`, `LocalNotificationManager`, `LoginState`, `MStoveBaseUI`, `MStoveChatManager`, `OTPServiceInterface`, `PerformanceTraceInterface`, `ProfileManager`, `RealtimeEventManagerInterface`, `RealtimeEventStream`, `RemoteConfig`, `RemoteNotification`, `Resource`, `SchemeInterface`, `SocialSchemeInterface`, `TinodeEventManager`, `TinodeServiceExtension`, `TokenManager`, `TokenManagerInterface` |
| Core | `MStoveBaseUtil`, `MStoveNetwork`, `MStoveNetworkInterface`, `MStovePolicy`, `MStoveSDKWrapper`, `MStoveSDKWrapperInterface`, `NotificationUtils`, `SGSSocialData` |
| Feature | `CharacterShop`, `Gamification`, `GamificationList`, `LanguageSetup`, `LoginHistory`, `MStoveV3EditProfile`, `MStoveV3Home`, `MStoveV3Login`, `Notice`, `OneTimeLogin`, `PlatformPopup`, `QRLogin`, `RemoteLogout`, `SGSSocialUI`, `SecondAuthenticationOTP`, `SocialScene`, `StoveGameString`, `StreamingPlay` |
| 패키지 | 로컬 의존성 | 외부 의존성 | 해석 |
|---|---|---|---|
| `Feature/SGSSocialUI` | 10 | 8 | 소셜 기능을 위한 상위 조합 모듈로 보인다. |
| `Feature/MStoveV3Home` | 12 | 5 | 앱 메인 허브 성격의 기능 모듈이다. |
| `Feature/StreamingPlay` | 11 | 5 | 실시간 재생 관련 무거운 상위 feature다. |
| `Feature/Gamification` | 10 | 2 | 로컬 조합이 강한 기능 모듈이다. |
| `App/MStoveChatManager` | 8 | 2 | App 계층 안에서도 꽤 무거운 관리 모듈이다. |
가장 먼저 어디를 보면 좋나?
`Core/MStoveBaseUtil`, `Core/MStoveNetwork`, `App/Resource`, `App/Environment`부터 보는 게 좋다. 이걸 알아야 feature 패키지 안의 import와 dependency가 읽힌다.
왜 Feature부터 바로 보면 안 되나?
Feature는 대부분 상위 조합 지점이라 이미 많은 기반 모듈을 끌고 온다. 기반 모듈을 모르면 feature는 “왜 이렇게 복잡하지?”만 남고 구조가 잘 안 보인다.
무거운 패키지는 무엇을 의미하나?
보통 여러 도메인을 묶는 상위 조합 계층이라는 뜻이다. 꼭 나쁜 것은 아니지만, 결합도가 커지고 변경 영향 범위가 넓어질 가능성은 있다.
이제 어떻게 논의하면 좋나?
다음부터는 패키지 하나를 잡고 “이 패키지는 무슨 역할인지, 누구를 의존하는지, 누가 이 패키지를 쓰는지, 외부 패키지는 왜 붙는지” 순서로 보면 된다.