All notable changes to Snapkit Asset Transform will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
기본 비디오 변환 기능 추가로 v2.0에서 제거되었던 일부 기능 복원.
새로운 파라미터 (6개):
- ✅
width- 비디오 너비 조정 (픽셀) - ✅
height- 비디오 높이 조정 (픽셀) - ✅
crop- 비디오 크롭 (형식:w:h:x:y) - ✅
flip- 좌우/상하 반전 (h,v,horizontal,vertical) - ✅
rotate- 회전 (90,180,270) - ✅
fps- 프레임레이트 조정 (1-60)
구현 세부사항:
- FFmpeg 필터 체인 구성으로 효율적 처리
- 메모리 효율적 설계 (t3a.medium에서 안정적 처리)
- 복합 변환 지원 (예:
width:1280,height:720,flip:h,rotate:90)
성능 영향:
- CPU 부하: +10-20% (허용 범위)
- 대역폭 절감: 리사이징 시 50-70% 파일 크기 감소
- 메모리: 기존과 동일 수준 유지
테스트 커버리지:
- 신규 테스트 31개 추가
- ffmpeg.util.test.ts: 15개
- video-transform-parser.test.ts: 16개
- 전체 테스트: 897개 통과
문서:
- CDN Transform Reference 업데이트
- 8가지 실제 사용 사례 추가
- 성능 및 제한사항 섹션 추가
Breaking Changes:
- ❌ 없음 (기존 기능 모두 유지)
Removed Features (11 parameters):
- ❌
resolution- 해상도 프리셋 (1080p, 720p, 480p, 360p) - ❌
width,height- 커스텀 크기 조정 - ❌
codec- 코덱 선택 (h264, h265, vp9, av1) - ❌
fps- 프레임레이트 조정 - ❌
quality- 품질 세밀 조정 (CRF 1-100) - ❌
bitrate- 비트레이트 세밀 조정 - ❌
start,end,duration- 시간 범위 편집 - ❌
thumbnailTime- 썸네일 시간 (thumbnail으로 통합)
Simplified Features (3 parameters only):
- ✅
format- 웹 호환 포맷만 (mp4, webm) - ✅
thumbnail- 썸네일/포스터 추출 - ✅
preview- 애니메이션 프리뷰 생성 (신규)
Impact:
- 코드 복잡도 63% 감소 (1,296 lines → 480 lines)
- API 표면적 79% 축소 (14 parameters → 3 parameters)
- 테스트 복잡도 75% 감소 (413 lines → 216 lines)
Migration: See docs/VIDEO_MIGRATION_GUIDE.md
Rationale:
- 복잡도 감소 및 유지보수성 향상
- 리소스 사용 예측 가능성 개선
- Shallow Features 전략으로 필수 기능에 집중
변경 내용:
- FFmpeg 버전을
6.1.2-r2로 명시적 고정 - Dockerfile의 builder와 runner 단계 모두 적용
- Alpine Linux 3.22.2 안정 버전 사용
Before:
RUN apk add --no-cache ffmpegAfter:
# 버전 고정: 6.1.2-r2 (Alpine 3.22 안정 버전)
RUN apk add --no-cache ffmpeg=6.1.2-r2Benefits:
- ✅ 재현 가능한 빌드 보장
- ✅ 예기치 않은 버전 업데이트로 인한 장애 방지
- ✅ 프로덕션 환경 안정성 향상
- ✅ 디버깅 및 문제 추적 용이
Technical Details:
- Alpine package:
ffmpeg=6.1.2-r2 - FFmpeg 공식 최신 버전: 8.0 (Alpine에서는 검증된 6.1.2 사용)
- 버전 정보:
ffmpeg version 6.1.2 Copyright (c) 2000-2024 - 설치 위치:
/usr/bin/ffmpeg
Disabled (code preserved for future):
- Model Transform 모듈 비활성화
- 파싱 로직은 유지, 변환 로직 미구현
- 라우팅에서 제외됨
Reason: 실제 사용 사례 없음, 구현 복잡도 높음, 리소스 집약적
Future: 비즈니스 요구사항 발생 시 재활성화 고려
- ✅ Dockerfile에 FFmpeg 설치 추가 (builder, runner 스테이지)
- ✅ README에 FFmpeg 설치 가이드 추가 (macOS, Ubuntu, Windows)
- ✅
preview파라미터 추가: 짧은 애니메이션 프리뷰 생성 (hover 효과용)- 기본 3초 프리뷰
- 1-10초 범위 커스텀 가능
- 작은 파일 크기 (320px 너비, 오디오 없음)
- ✅
docs/VIDEO_MIGRATION_GUIDE.md신규 작성- v1 → v2 마이그레이션 가이드
- 파라미터별 대안 제시
- 시나리오별 마이그레이션 예시
- ✅
docs/CDN_TRANSFORM_REFERENCE.mdVideo 섹션 전면 개편- Shallow Features 철학 명시
- 3가지 기능만 문서화
- 제거된 기능 및 대안 표 추가
- ✅
src/cdn/model/README.md신규 작성- 비활성화 이유 설명
- 향후 활성화 계획
- 참고 자료
- video-transform.types.ts: 14개 → 3개 파라미터로 간소화
- ffmpeg.util.ts:
- 제거: 7개 비디오 전용 함수
- 추가:
getPreviewArgs()함수 - 수정:
getVideoFormatArgs()mp4/webm만 지원
- video.service.ts: 285줄 → 208줄 (27% 감소)
- 복잡한 파라미터 우선순위 로직 제거
- 3가지 기능만 처리: 썸네일, 프리뷰, 트랜스코딩
- video-transform-parser.ts: 209줄 → 109줄 (48% 감소)
- 3개 파라미터 파싱만
- video-transform-parser.test.ts: 413줄 → 216줄 (48% 감소)
- 간소화된 테스트 케이스
- Dockerfile: FFmpeg 설치 명령 추가 (Alpine apk)
- cdn.module.ts: ModelModule import/export 주석 처리
| 항목 | Before (v1) | After (v2) | 변화 |
|---|---|---|---|
| 파라미터 개수 | 14개 | 3개 | 📉 79% 감소 |
| 코드 라인 | 1,296 | 480 | 📉 63% 감소 |
| FFmpeg 함수 | 15개 | 4개 | 📉 73% 감소 |
| 테스트 라인 | 413 | 216 | 📉 48% 감소 |
| 지원 포맷 | 7개 | 2개 | 📉 71% 감소 |
| 기능 범위 | 전문 편집 | 필수만 | 🎯 집중 |
| 유지보수 | 높음 | 낮음 | ✅ 개선 |
- Initial release with CDN multi-resource architecture
- Image, Video, Audio, Document, Font, Icon, Lottie, Model transform support
- ResourceProcessor interface for unified resource handling
- S3 integration with CloudFront CDN
- FFmpeg-based video/audio transformation
- Sharp-based image optimization
Legend:
- 🚨 Breaking Changes
- ✅ Added
- 🔧 Changed
- ⏸️ Deprecated
- ❌ Removed
- 🔒 Security
- 🐛 Fixed