Hilt에서 Koin으로??

수호·2025년 11월 28일
post-thumbnail

🚀 우리 팀의 기술 선택 여정

우리 팀은 Android와 iOS 두 플랫폼의 앱을 동시에 개발하는 것을 목표로 하고 있었다.
초기 계획은 Android는 Kotlin 기반의 네이티브 코드(Native Code) 로 개발하고,
iOS는 React Native 를 활용해 크로스 플랫폼으로 구현하는 방식이었다.

하지만 조사 과정에서 KMP(Kotlin Multiplatform)CMP(Compose Multiplatform) 을 알게 되었다.
Kotlin과 Compose만으로 iOS까지 개발이 가능하다는 점은,
iOS 전문 인력이 없는 우리 팀에게 매우 매력적인 선택지였다.
새로운 프레임워크(RN)를 학습하는 대신, 이미 익숙한 Kotlin과 Compose를 그대로 사용할 수 있었기 때문이다.

이에 따라 팀은 KMP 기반 개발로 전환하기로 결정하였다.
그러나 예상치 못한 문제가 하나 있었다 —
지금까지 Android에서 의존성 주입(Dependency Injection)을 위해 사용하던 Hilt
KMP 환경에서는 지원되지 않는다는 점이었다.

결국 우리는 Hilt → Koin으로의 전환을 결정하게 되었고,
이 과정을 통해 KMP 환경에 맞는 구조와 의존성 주입 방식으로 프로젝트를 새롭게 정비하게 되었다.

❌ 왜 Hilt(=Dagger)는 KMP에서 쓸 수 없나?

  1. Hilt/Dagger는 KSP/Annotation Processing 기반

    → KMP의 commonMain은 annotation processor를 사용할 수 없음

    → 즉, 공유 코드에서 Hilt 사용 자체가 불가능함

  2. IOS에서는 Hilt가 동장할 수 없음

    → Hilt는 안드로이드 프레임워크 의존

    → IOS Swift에서는 Hilt 객체를 생성할 수 없음

    → 그래서 KMP에서 IOS가 사용하는 DI 구조 자체가 깨짐

⭐️ KMP 공식 추천 DI = Koin

  1. Koin이 KMP를 공식 지원하는 이유

    → 공통 모듈(commonMain)에서 DI가 된다.

    • UseCase, Repository, Network 모두 공유 가능

    • Android/IOS 양쪽에서 같은 DI 구성 사용

      → IOS에서도 Kotlin 객체를 DI로 받아 사용 가능

    • Swift에서 바로 Koin으로 resolve 가능

    → Annotation Processor 없음 (런타임 DI)

    • KMP 환경에서 가장 안정적으로 동작
profile
처음부터 다시 시작!!

0개의 댓글