MoonServerClient 는 재시도, 지수 백오프, MoonServerException 기반의
타입드 에러를 내장한 의견 기반 Ktor HTTP 클라이언트 래퍼입니다.
- Kotlin 2.0.20, Compose Multiplatform 1.7.x, AGP 8.6.x, Gradle 8.10, Java 21.
- 접근 가능한 백엔드 (MoonDeveloper 백엔드 또는 자체 백엔드).
- 유효한
moonLicenseKey. - Koin 4.1.0.
(저장소 블록은 auth/ko.md §2 와 동일합니다.)
implementation("io.moondeveloper:moon-server-kmp:1.0.0")INTERNET권한 (샘플 매니페스트에 기본 포함).
- 특별한 capability 는 필요하지 않습니다. 모듈이 Ktor Darwin 엔진을 포함합니다.
import io.moondev.server.moonServerModule
startKoin {
modules(moonServerModule /*, ... */)
}어떤 Koin 스코프에서도 MoonServerClient 를 주입받을 수 있습니다.
class HealthStore(private val client: MoonServerClient) {
suspend fun ping(): String =
try {
client.get("/health")
} catch (e: MoonServerException) {
"down: ${e.code} ${e.message}"
}
}@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)
}- 모든 요청에
MoonServerException(code=401)— 인증 토큰 인터셉터를 확인하세요 (두 모듈이 함께 연결되어 있으면AuthProvider에서 토큰을 가져옵니다). - 느린 네트워크에서 타임아웃 — 클라이언트 설정 훅으로 요청당 타임아웃을 늘리세요. 기본값은 보수적입니다.
- iOS 의 "URLSessionTask suspended" 로그 — 보통 백그라운드 모드 충돌입니다. Apple 의 앱 라이프사이클 + URLSession 문서를 참조하세요.
- 기능별 리포지토리로 감싸 원시 경로 문자열을 숨깁니다.
- 샘플 참조:
ServerCallScreen.kt.