sharp는 이미지 프로세싱에 있어 사용되는 라이브러리로
서비스에서 이미지 업로드 기능을 지원하는 경우 이미지 사이즈를 줄이기 위해 자주 사용된다.
이번 포스팅에는 sharp 사용 시 마주친 오류와 어떻게 처리하였는지에 대해 정리해보겠다.
나의 경우 sharp를 업로드한 이미지를 조회 시 리사이징하기 위해 사용하고 있다.
CloudFront + Lambda@Edge 스택을 사용하여 업로드한 이미지 조회 시 sharp를 사용하여 리사이징 된 이미지를 생성하고 있다.
(참고: AWS 인프라 위에서 채팅 이미지 업로드부터 조회까지)
기능 오픈 이후 문제가 없었는데 갑자기 아래와 같이 VipsJpeg: Invalid SOS parameters for sequential JPEG 라는 오류 메세지가 나왔다.
관련해서 찾아보니 sharp github issue에 관련된 issue를 발견할 수 있었고 커미터인 lovell은 안드로이드 관련 버그일 것이라고 추정하고 있다.
덧붙여 이미지의 출처를 확신할 수 있다면 생성자에 옵션을 추가하는 방식으로 이 이슈를 단순하게 처리할 수 있다고 한다.
하지만 좀 더 아래로 내려보면 failOnError: false는 deprecated 되었으니 failOn: 'truncated' 를 쓰라고 안내해준다.
관련하여 테스트 코드와 truncated 옵션 테스트 용 이미지를 보니 failOn: 'truncated' 옵션은 짤린(truncated) 이미지가 아닌 이상 오류를 내지 않는 옵션인 것 같다.
(failOn: 'none' 옵션은 데이터 적으로 완전하지 않은 이미지여도 강제적으로 이미지 프로세싱 처리를 하도록 하는 옵션인 것 같다)
그래서 결과적으로는 아래와 같이 생성자에 failOn: 'truncated' 옵션을 추가해주니 더 이상 동일 오류가 발생하지 않았다.
const resizedImage = await sharp(s3Object.Body, { failOn: 'truncated' }) // <==
.rotate()
.resize({width})
.toBuffer();
'JS & TS > JS' 카테고리의 다른 글
Class method vs field function (0) | 2021.05.29 |
---|
댓글