수원대학교 재학생을 위한 시간표 & 강의평가 서비스입니다. Kotlin Multiplatform (Android + iOS) 기반으로 개발되고 있습니다.
| Category | Stack |
|---|---|
| Language | Kotlin 2.2, Swift |
| UI | Compose Multiplatform 1.10 |
| Architecture | MVI + Clean Architecture |
| DI | Koin 4.1 |
| Database | Room 2.7 (KMP) |
| Remote | Firebase (GitLive KMP) |
| Widget | Glance (Android), WidgetKit (iOS) |
단일 composeApp 모듈 구조:
com.chukchukhaksa.mobile/
├── common/ # 디자인시스템, 확장함수, KMP 플랫폼 코드
├── data/ # Repository 구현
├── di/ # Koin DI 모듈
├── domain/ # UseCase, Repository 인터페이스
├── local/ # Room DB, DataStore
├── presentation/ # 화면 (MVI 패턴)
├── remote/ # Firebase 데이터소스
└── widget/ # 위젯 (Android Glance / iOS WidgetKit)
git clone https://github.com/your-org/cchaksa-kmp.git
cd cchaksa-kmp키 값은 Notion에서 확인할 수 있습니다.
local.properties에 추가 (gitignore 됨):
KAKAO_NATIVE_APP_KEY=노션에서_확인한_키_값iosApp/Configuration/Config.xcconfig에 추가 (gitignore 됨):
KAKAO_NATIVE_APP_KEY=노션에서_확인한_키_값
# Android
./gradlew assembleDebug
# iOS (Simulator)
./gradlew linkDebugFrameworkIosSimulatorArm64
# 이후 Xcode에서 iosApp.xcworkspace 열고 빌드MVI + Clean Architecture 패턴을 사용합니다.
Presentation (MVI) → Domain (UseCase) → Data (Repository)
↓ ↓
ViewModel + State/SideEffect Local (Room/DataStore)
Remote (Firebase)
각 화면은 [Feature]State, [Feature]SideEffect, [Feature]ViewModel 구조를 따릅니다.
로깅은 Napier를 사용합니다. 디버깅 시 Logcat(Android) / Xcode 콘솔(iOS)에서 아래 태그로 필터링할 수 있습니다.
| Tag | 용도 |
|---|---|
CchWebView |
웹뷰 컴포저블 — 로드 / 네비게이션 등 생명주기 |
WebViewHolder |
웹뷰 인스턴스 홀더 — 재사용 / 생성 / 해제 |
WebViewPreloader |
웹뷰 프리로드 |
WebViewUserAgent |
웹뷰 User-Agent 구성 |
WebConsole |
웹 페이지의 console.log 를 네이티브 로그로 출력 |
BridgeAction |
JS ↔ 네이티브 브릿지 액션 |
| Tag | 용도 |
|---|---|
HttpClient |
HTTP 요청 / 응답 로깅 (디버그 빌드 전용) |
ExchangeWebSession |
웹 세션 쿠키 재교환 |
SessionApi |
세션 API 호출 |
UserApi |
유저 API 호출 |
| Tag | 용도 |
|---|---|
AppLifecycle |
앱 포그라운드 / 백그라운드 전환 |
App |
앱 전역 (포그라운드 토큰 갱신 등) |