피드로 돌아가기
Dev.toMobile
원문 읽기
KMP 프로젝트에서 Ktor 클라이언트를 활용해 Android와 iOS 간 네트워킹을 플랫폼별 엔진으로 구현하는 과정을 안내합니다
KMP Native UI networking with Ktro
AI 요약
Context
Kotlin Multiplatform으로 Android와 iOS를 동시에 개발할 때, 각 플랫폼의 HTTP 클라이언트 엔진을 공통 코드에서 추상화하여 사용하는 구조가 필요합니다. 기존엔 플랫폼별 코드를 각각 작성해야 했으나, KMP의 expect/actual 메커니즘을 활용하면 이 문제를 해결할 수 있습니다.
Technical Solution
- Ktor 클라이언트 라이브러리를 toml 파일에 정의하여 BOM 방식으로 버전을 관리합니다
- HttpClientFactory.create() 함수를 통해 HttpClientEngine을 주입받아 공통 모듈에서 HttpClient를 생성합니다
- Android는 OkHttp 엔진을 사용하도록 androidMain 소스셋에 의존성을 추가합니다
- iOS는 Darwin 엔진을 사용하도록 nativeMain 소스셋에 의존성을 추가합니다
- Koin 의존성 주입 프레임워크로 platformModule을 expect/actual로 선언하여 플랫폼별 모듈을 등록합니다
Impact
소스 코드의 80% 이상을 공통 모듈(commonMain)에서 작성할 수 있어 Android와 iOS 간 유지보수 비용이 크게 감소합니다.
Key Takeaway
Clean Architecture의 데이터 레이어에서 HttpClientEngine을 추상화하면 플랫폼별 HTTP 클라이언트 구현을 공통 코드에서 완벽하게 분리할 수 있습니다.
실천 포인트
KMP 프로젝트에서 Ktor HTTP 클라이언트를 Koin DI와 함께 적용 시, HttpClientEngine을 expect/actual로 분리하고 플랫폼별(Android-OkHttp, iOS-Darwin) 의존성을 개별 소스셋에 추가하는 방식으로 네이티브 네트워킹을 구현할 수 있습니다