사용자들이 이미지를 업로드할 때 백엔드 개발자들은 예상치 못한 문제에 직면하곤 합니다. JPEG 파일에 포함된 GPS 좌표, 촬영 기기 모델명, 시간 같은 민감한 EXIF(Exchangeable Image File Format) 메타데이터는 개인 정보 유출의 위험을 안고 있으며, ICC 프로파일 같은 색상 메타데이터도 그대로 저장될 수 있습니다. 또한, JPEG, PNG, GIF, WebP 등 다양한 이미지 형식이 뒤섞여 들어오면 저장, CDN(콘텐츠 전송 네트워크), 렌더링 파이프라인이 복잡해지는 문제가 발생합니다.
이러한 문제들을 해결하기 위해 'smol-image-processor'라는 단일 역할 마이크로서비스가 개발되었습니다. 이 서비스는 사용자가 이미지를 업로드하면 항상 WebP(웹피) 형식으로 변환하여 응답합니다. 변환 과정에서 Sharp(이미지 처리 라이브러리)의 기능을 활용해 EXIF, ICC 프로파일 등 불필요한 메타데이터를 자동으로 제거합니다. 다만, EXIF 오리엔테이션(orientation) 정보는 메타데이터 제거 전에 이미지 픽셀에 적용하여 이미지가 올바른 방향으로 표시되도록 처리합니다. 또한, 서비스는 '디컴프레션 밤(decompression bomb)' 공격(파일 크기는 작지만 디코딩 시 수억 픽셀로 팽창하는 이미지)과 수백~수천 프레임의 애니메이션 이미지로 인한 서비스 거부(DoS) 공격을 방지하기 위해 픽셀 수와 프레임 수를 제한하는 방어 레이어를 갖추고 있습니다. 애니메이션 GIF나 WebP는 애니메이션 WebP로 변환되며, PNG의 알파 채널(투명도)도 보존됩니다. 처리된 이미지의 너비, 높이, 크기, 애니메이션 여부, 페이지 수 등의 정보는 응답 헤더에 담겨 제공되므로, 별도의 메타데이터 추출 과정 없이 데이터베이스에 바로 저장할 수 있습니다. 이 서비스는 Bun 런타임과 Elysia HTTP 프레임워크, 그리고 Sharp(libvips 래퍼)를 사용하며, Docker(도커) 이미지로도 제공되어 쉽게 배포할 수 있습니다.
smol-image-processor와 같은 서비스는 사용자 이미지 처리의 복잡성을 크게 줄여줍니다. 개발팀은 다양한 이미지 형식과 메타데이터 처리 로직을 직접 구현할 필요 없이, 이 마이크로서비스를 활용하여 백엔드 시스템을 간소화하고 개발 시간을 단축할 수 있습니다. 특히 개인 정보 보호가 중요해지는 시대에 EXIF 메타데이터 자동 제거 기능은 서비스의 신뢰도를 높이는 데 기여합니다. 모든 이미지를 WebP로 표준화함으로써 저장 공간 효율성을 높이고, CDN 비용을 절감하며, 웹페이지 로딩 속도를 개선하여 사용자 경험을 향상시킬 수 있습니다. 이러한 통합 솔루션은 스타트업이나 소규모 팀이 효율적으로 이미지 처리 파이프라인을 구축하는 데 매우 유용할 것입니다.