뱅크샐러드, Koin에서 Hilt로 DI 마이그레이션… 런타임 크래시 해결
핵심 내용
뱅크샐러드가 Koin의 런타임 의존성 주입 문제를 해결하기 위해 Dagger Hilt로 마이그레이션을 진행했다.
자세히 보기
뱅크샐러드 안드로이드 팀은 클린 아키텍처 기반 앱의 런타임 크래시와 관리 난이도 상승 문제를 해결하기 위해 기존 DI 도구인 Koin을 Dagger Hilt로 마이그레이션했다. Koin은 Kotlin DSL과 런타임 주입 방식으로 러닝커브가 낮지만, 리플렉션 사용으로 인한 성능 저하와 컴파일 타임 검증 부재가 근본적인 한계로 작용했다.
특히 koin.get() 남용으로 인한 인스턴스 참조와 Entry Point 파악의 어려움은 QA 단계에서 걸러지지 않은 빈번한 크래시를 유발했다. 수백 개에 달하는 화면과 멀티 모듈 구조에서 의존성 가시성을 확보하기 위해 팀은 2021년 2분기 에픽으로 설정하고 체계적인 마이그레이션을 추진했다.
Hilt 도입의 핵심 이유
Hilt는 Annotation Processing을 통해 빌드 시점에 의존성 그래프를 검증하므로, Koin의 런타임 오류 위험을 제거한다. 주요 장점은 다음과 같다.
- 컴파일 타임 검증: 의존성 사이클이나 누락을 빌드 단계에서 즉시 발견한다.
- 성능 개선: 리플렉션 대신 생성된 Java Stub 파일을 사용하여 런타임 오버헤드를 줄인다.
- AAC ViewModel 지원: 별도 라이브러리 없이
@HiltViewModel어노테이션으로 ViewModel 주입이 가능하다.
마이그레이션 전략 및 모듈화 규칙
팀은 전체 코드베이스를 한 번에 변경하는 대신, 모듈 단위로 점진적으로 적용하는 전략을 채택했다. 11단계의 마이그레이션 플랜을 수립하고, PoC(Proof of Concept)를 통해 충돌 여부를 검증한 후 가이드라인을 배포했다.
Hilt 적용을 위한 모듈 명명 규칙과 구조는 다음과 같이 표준화되었다.
- Activity/Fragment:
@AndroidEntryPoint어노테이션으로 자동 주입 - ViewModel:
@HiltViewModel어노테이션 사용 - Module: 주입 대상에 따라
XXModule,RepositoryModule,UseCaseModule등으로 분리 - Scope:
@Singleton또는 커스텀 Scope를 명시하여 객체 생명주기를 관리
이 과정을 통해 뱅크샐러드는 의존성 주입의 안정성을 높이고, 테스트 코드 작성 및 리팩토링의 용이성을 확보했다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.