Lottie Inspector

dotLottie(.lottie) 완벽 정리 — JSON을 언제 갈아탈까

FORMAT

디자이너에게 받은 파일 확장자가 어느 날 .json에서 .lottie로 바뀌었다면, 이 글이 그 파일의 정체를 설명해 줍니다. dotLottie는 단순한 리네이밍이 아니라 구조가 다른 포맷입니다.

dotLottie는 ZIP이다

확장자를 .zip으로 바꿔 압축을 풀어 보면 정체가 바로 드러납니다.

my-animation.lottie
├── manifest.json        ← 포함된 애니메이션 목록과 메타데이터
├── animations/
│   ├── loading.json     ← 실제 Lottie 데이터 (Deflate 압축됨)
│   └── success.json
└── images/
    └── img_0.png        ← 래스터 에셋 (있는 경우)

핵심은 세 가지입니다.

압축률 실측

실제 프로젝트의 에셋 폴더를 변환했을 때의 전형적인 수치입니다.

에셋.json.lottie감소율
로딩 스피너 (단순 셰이프)18KB4KB-78%
온보딩 일러스트 (복잡 벡터)210KB58KB-72%
성공 체크 마이크로 인터랙션9KB3KB-67%
참고: 서버가 gzip/brotli 전송 압축을 이미 하고 있다면 네트워크 전송량 차이는 줄어듭니다. dotLottie의 진짜 이점은 앱 번들에 포함되는 정적 에셋 크기, 멀티 애니메이션, 에셋 관리에 있습니다.

런타임 지원 현황

플랫폼지원비고
@lottiefiles/dotlottie-web, dotlottie-wcWASM 렌더러 기반, 경량
iOSlottie-ios 4.3+DotLottieFile API로 로드
Androidlottie-android 6.x+zip 로드 API 활용
React Nativelottie-react-native 최신버전 확인 필요

정리하면 2024년 이후의 메이저 런타임은 모두 지원합니다. 문제는 사내에 남아 있는 구버전 런타임입니다. 마이그레이션 전에 각 앱의 Lottie 라이브러리 버전부터 확인하세요.

마이그레이션 체크리스트

마지막 항목이 가장 중요합니다. 변환한 파일과 원본을 Lottie Inspector에 나란히 넣고 배경·규격·재생을 비교하면 차이를 눈으로 확인할 수 있습니다. .lottie를 넣으면 내부의 모든 애니메이션이 각각 펼쳐집니다.

마이그레이션 실전기 — 에셋 수십 개를 옮기며 배운 것

제가 담당하는 iOS 앱에는 로딩 스피너부터 온보딩 일러스트까지 Lottie 에셋이 수십 개 쌓여 있었습니다. 한 번에 전부 .lottie로 바꾸는 대신 아래 순서로 진행했고, 결과적으로 이 순서 덕분에 사고를 피했습니다.

정리하면 변환 자체보다 변환 전후의 검증과 되돌릴 수 있는 구조가 마이그레이션의 본체였습니다. 에셋 개수가 많을수록 이 차이가 커집니다. 비교 검증에는 Lottie Inspector처럼 두 파일을 나란히 재생할 수 있는 도구를 쓰면 시간이 크게 줄어듭니다.

CDN에서 MIME 타입을 놓치면 생기는 일

가장 오래 헤맨 문제는 코드가 아니라 인프라였습니다. 로컬에서는 잘 재생되던 .lottie가 배포 후 웹에서만 로드에 실패했는데, 원인은 CDN이 .lottie 확장자를 몰라 Content-Type을 엉뚱한 값으로 내려보낸 것이었습니다. 더 골치 아픈 점은 그 잘못된 응답이 엣지 캐시에 그대로 저장된다는 것입니다. 서버 설정을 고친 뒤에도 캐시를 퍼지하기 전까지는 일부 지역에서 실패가 계속 재현되어, 원인을 찾고도 한참을 더 헤맸습니다. .lottie는 실체가 ZIP이므로 application/zip 계열로 매핑해 두고, 배포 전에 실제 응답 헤더를 curl -I로 한 번 확인하는 편이 안전합니다.