Logo wiki

AWS S3 이미지 업로드 실습 중 발생한 체크섬(CRC) 에러 해결 과정

March 4, 2025
2 min read
Table of Contents
index

S3에 이미지를 업로드하면 Lambda에서 리사이징해주는 실습에서 겪은 이슈 내용을 정리했습니다.

이슈

S3에 리사이징된 이미지를 올리는 EC2의 코드에서 순환 중복 검사 (CRC) 관련 에러가 났다.

Error

Please check whether you have installed the “@aws-sdk/crc64-nvme-crt” package explicitly.

원인

라이브러리쪽 이슈를 보니 개발자가 코멘트를 남겨놨었다. 이 이슈는 S3 객체가 체크섬을 포함한 상태로 업로드가 되면 발생할 수 있다.

체크섬(checksum)이란?

체크섬은 데이터를 해시 함수 또는 특정 함수 또는 알고리즘을 이용해 고유한 값을 생성한 후, 데이터가 변경되지 않았는지 검증하는 기법이다.

putObject.mjs
// S3 객체가 체크섬 정보와 함께 업로드
await client.putObject({ Bucket, Key, Body, ChecksumAlgorithm: ChecksumAlgorithm.CRC64NVME});
getObject.mjs
// -> 응답 헤더의 체크섬 정보를 기반으로 수신 측에서 데이터 무결성을 확인하려고 함
// -> 그러나 체크섬 계산에 필요한 의존성 패키지가 없어서 에러 발생
await client.getObject({ Bucket, Key }); // >=v3.732.0

전송된 데이터에 오류가 있는지 검증하기 위해 데이터에 체크섬을 포함해 전송하지만, 체크섬 검증에 필요한 라이브러리가 종속성에 명시되지 않았고, 응답의 체크섬을 검증하는 코드에서도 에러 처리가 되어 있지 않아 해당 에러가 발생했다.

해결

AWS 측에서 JavaScript로 AWS SDK를 사용하는 고객들이 설치 용량에 민감한다는 점을 고려하여 체크섬 검증을 위한 라이브러리(@aws-sdk/crc64-nvme-crt)를 기본 종속성에 포함하지 않았다.
이 패키지는 C로 작성된 네이티브 모듈을 포함하고 있어 설치 파일 크기가 크기 때문에, AWS는 이를 기본으로 포함하기보다는 필요한 고객이 수동으로 설치하도록 선택했다.

image

따라서 에러 처리를 한 코드가 배포되기 전에 해결하기 위해서 체크섬 라이브러리를 수동으로 설치했다.