Sharp를 950배 빠르게 만든 방법 (그리고 Bun이 Anthropic에 합류한 후 중요한 이유)
Source: Dev.to
Sharp의 문제점
Sharp은 수천 개의 프로덕션 앱에서 사용되는 검증된 이미지 라이브러리이지만, 현대 서버리스 및 고동시성 환경에서는 다음과 같은 여러 제한점이 있습니다:
- 기본적으로 HEIC 지원이 없음
- libvips를 소스에서 빌드해야 함
- AWS Lambda용 커스텀 Docker 레이어 필요
- 복잡한 CI/CD 파이프라인
- 메타데이터 추출이 느림 (전체 이미지를 디코딩)
- 동시 부하가 걸리면 무겁고, 서버리스에 최적화되지 않음
이러한 문제로 이미지가 많은 애플리케이션에서 처리 속도가 느려지고, 서버 비용이 증가하며, 사용자 경험이 저하되었습니다.
bun-image-turbo 소개
Bun과 Node.js를 위해 처음부터 Rust 기반으로 만든 이미지 처리 라이브러리입니다.
- 100 % 오픈 소스, MIT 라이선스, 영구 무료
- 한 줄 명령으로 설치:
npm install bun-image-turbo
- 커스텀 빌드나 컴파일 필요 없음
- HEIC 네이티브 지원 포함
벤치마크
| 작업 | Sharp | bun-image-turbo | 향상 |
|---|---|---|---|
| WebP 메타데이터 | 3.4 ms | 0.004 ms | 950× 빠름 |
| JPEG 메타데이터 | 0.1 ms | 0.003 ms | 38× 빠름 |
| PNG 메타데이터 | 0.08 ms | 0.002 ms | 40× 빠름 |
| 50 동시 작업 | 160 ms | 62 ms | 2.6× 빠름 |
| 변환 파이프라인 | 19.1 ms | 12.2 ms | 1.6× 빠름 |
| HEIC 지원 | ❌ (커스텀 빌드) | ✅ 네이티브 | — |
메타데이터 추출
Sharp은 차원을 읽기 위해 전체 이미지를 디코딩합니다:
10 MB 이미지 → 10 MB 디코드 → 가로/세로 추출 → 완료 (3.4 ms)
bun-image-turbo는 헤더 바이트만 읽습니다:
10 MB 이미지 → ~100 바이트 헤더 읽기 → 가로/세로 추출 → 완료 (0.004 ms)
다운스케일링 전략
대규모 다운스케일링 시 bun-image-turbo는 각 단계마다 최적의 필터를 사용해 점진적으로 반으로 줄입니다:
| 스케일 팩터 | 알고리즘 |
|---|---|
| > 4× 다운스케일 | Box (빠르고 평균값이 좋음) |
| 2–4× 다운스케일 | Bilinear (빠르고 품질도 충분히 좋음) |
- GitHub:
- npm:
제공되는 기능
| 기능 | 이점 |
|---|---|
| 메타데이터 추출 | 950× 빠름 |
| 동시 작업 | 2.6× 빠름 |
| 변환 파이프라인 | 1.6× 빠름 |
| HEIC 지원 | 네이티브, 커스텀 빌드 불필요 |
| Blurhash | 내장 |
| 가격 | 영구 무료 |
시작하기
npm install bun-image-turbo
질문이 있으면 레포지토리 이슈에 댓글을 남겨 주세요. 이 라이브러리가 도움이 되었다면 레포지토리에 ⭐를 눌러 주세요.