피드로 돌아가기
Kotlin Compiler Plugin Cuts Android Startup Time by 30% in Expo SDK 56
Dev.toDev.to
Infrastructure

K2 Compiler Plugin 도입을 통한 Android 앱 구동 속도 30% 개선

Kotlin Compiler Plugin Cuts Android Startup Time by 30% in Expo SDK 56

Dan2026년 6월 18일9advanced

Context

Expo Modules의 기존 런타임 Reflection 기반 모듈 초기화 방식으로 인한 Android 앱 시작 시간 지연 발생. 특히 Record 변환 과정에서 @Metadata 바이너리 파싱과 Generic 타입 복원을 위한 과도한 CPU 비용 소모가 병목 지점으로 작용.

Technical Solution

  • K2 Compiler의 Intermediate Representation(IR)에 직접 접근하여 컴파일 단계에서 타입 메타데이터를 미리 처리하는 구조 설계
  • KSP나 kapt의 파일 추가 방식 한계를 극복하기 위해 IR 수정 기능을 활용하여 기존 클래스 내부에 최적화된 로직을 직접 주입
  • 런타임의 typeOf() 호출 및 @Metadata 파싱 과정을 컴파일 타임의 정적 분석으로 대체하여 Reflection 제거
  • @OptimizedRecord 어노테이션을 통한 선택적 최적화 경로 제공으로 하위 호환성 유지 및 성능 극대화
  • 코드 생성(Codegen) 방식의 디버깅 어려움과 빌드 복잡도를 회피하기 위해 컴파일러 플러그인 형태의 통합 솔루션 채택

Impact

  • Android 모듈 초기화 속도 약 70% 향상
  • Time to First Render 약 30% 감소 (797ms → 508ms)
  • Record 변환 성능 약 6배 개선
  • Cold Launch 시간 41% 단축 (93ms → 55ms)

Key Takeaway

런타임 오버헤드를 줄이기 위해 단순한 코드 생성(Codegen)을 넘어 컴파일러의 IR 단계에서 코드를 변형하는 방식이 개발자 경험(DX)과 성능이라는 두 가지 목표를 동시에 달성하는 강력한 전략임.


- 런타임 Reflection 비용이 임계치를 넘었는지 정밀 측정 - 단순 코드 생성 도구가 디버깅 및 빌드 파이프라인에 주는 영향을 검토 - Kotlin

2.0 이상 환경에서 IR 기반 컴파일러 플러그인을 통한 구조적 최적화 가능성 타진 - 필수 최적화 영역과 선택적 최적화 영역을 분리하여 점진적 마이그레이션 전략 수립

원문 읽기