200MB 모듈을 팀 단위로 해결하기: 당근 숏폼팀의 On-demand Dynamic Feature Module 도입
프론트엔드
200MB 모듈을 팀 단위로 해결하기: 당근 숏폼팀의 On-demand Dynamic Feature Module 도입
두줄요약
비디오 편집 모듈의 200MB 용량을 줄이기 위해 On-demand DFM을 도입했습니다. 기능 코드는 base에 두고 SO 파일만 분리해 글로벌 사용자 부담과 운영 복잡도를 함께 낮췄습니다.
문제 상황
- 비디오 편집 기능 추가로 숏폼 모듈 용량이 200MB까지 증가한 상황
- CDN 전환으로 40MB까지 줄였지만, 소수 기능을 전체 사용자에게 함께 설치시키는 부담 지속
- 글로벌 사용자와 다른 서비스에 영향 없이 팀 단위로 기능을 분리할 필요성 대두
원인 분석
- 필터, 이펙트, 스티커 등 리소스와 네이티브 라이브러리(SO) 비중이 큼
- DFM 도입 시 Hilt/DI, SplitCompat, SO 로딩, ABI·STL, R8 규칙 등 운영 제약 발생
- 코드와 SO를 모두 분리하려는 방식은 기술적 복잡도 대비 효율이 낮음
해결 방법
- Android App Bundle의 On-demand Delivery 기반 Dynamic Feature Module 도입
- 기능 코드는 base 모듈에 유지하고, 용량의 핵심인 SO 파일만 DFM으로 분리
- bundletool, SplitCompat, SplitInstallHelper, packaging 규칙으로 설치·로딩·검증 체계 구성
적용해볼 점
- 팀 단위 실험 기능은 글로벌 사용자 영향 범위부터 먼저 분리 검토
- DFM 적용 시 설치 여부, 로딩 실패, 네트워크 실패, 사이즈 검증까지 함께 설계
- 안정성, 독립성, 운영 효율성을 우선하는 구조 선택