Skip to content

Latest commit

 

History

History
78 lines (57 loc) · 2.39 KB

File metadata and controls

78 lines (57 loc) · 2.39 KB

moon-server-kmp 통합 가이드

MoonServerClient 는 재시도, 지수 백오프, MoonServerException 기반의 타입드 에러를 내장한 의견 기반 Ktor HTTP 클라이언트 래퍼입니다.

1. 사전 준비

  • Kotlin 2.0.20, Compose Multiplatform 1.7.x, AGP 8.6.x, Gradle 8.10, Java 21.
  • 접근 가능한 백엔드 (MoonDeveloper 백엔드 또는 자체 백엔드).
  • 유효한 moonLicenseKey.
  • Koin 4.1.0.

2. 저장소 + 의존성 추가

(저장소 블록은 auth/ko.md §2 와 동일합니다.)

implementation("io.moondeveloper:moon-server-kmp:1.0.0")

3. 플랫폼 설정

Android

  • INTERNET 권한 (샘플 매니페스트에 기본 포함).

iOS

  • 특별한 capability 는 필요하지 않습니다. 모듈이 Ktor Darwin 엔진을 포함합니다.

4. Koin 초기화

import io.moondev.server.moonServerModule

startKoin {
    modules(moonServerModule /*, ... */)
}

어떤 Koin 스코프에서도 MoonServerClient 를 주입받을 수 있습니다.

5. ViewModel / Store (MVI) 에서 사용

class HealthStore(private val client: MoonServerClient) {
    suspend fun ping(): String =
        try {
            client.get("/health")
        } catch (e: MoonServerException) {
            "down: ${e.code} ${e.message}"
        }
}

6. Compose UI 연동

@Composable
fun ServerScreen(store: HealthStore = koinInject()) {
    val scope = rememberCoroutineScope()
    var result by remember { mutableStateOf("") }
    Button(onClick = { scope.launch { result = store.ping() } }) { Text("Ping") }
    Text(result)
}

7. 자주 발생하는 문제

  • 모든 요청에 MoonServerException(code=401) — 인증 토큰 인터셉터를 확인하세요 (두 모듈이 함께 연결되어 있으면 AuthProvider 에서 토큰을 가져옵니다).
  • 느린 네트워크에서 타임아웃 — 클라이언트 설정 훅으로 요청당 타임아웃을 늘리세요. 기본값은 보수적입니다.
  • iOS 의 "URLSessionTask suspended" 로그 — 보통 백그라운드 모드 충돌입니다. Apple 의 앱 라이프사이클 + URLSession 문서를 참조하세요.

8. 다음 단계

  • 기능별 리포지토리로 감싸 원시 경로 문자열을 숨깁니다.
  • 샘플 참조: ServerCallScreen.kt.