피드로 돌아가기
KMP Native UI networking with Ktro
Dev.toDev.to
Mobile

KMP 프로젝트에서 Ktor 클라이언트를 활용해 Android와 iOS 간 네트워킹을 플랫폼별 엔진으로 구현하는 과정을 안내합니다

KMP Native UI networking with Ktro

Saad Alkentar2026년 3월 30일20intermediate

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) 의존성을 개별 소스셋에 추가하는 방식으로 네이티브 네트워킹을 구현할 수 있습니다

원문 읽기