피드로 돌아가기
올리브영 테크블로그Backend
원문 읽기
AWS Lambda Image Resize 도입기
올리브영이 서버 기반 이미지 리사이징을 AWS Lambda + S3 트리거 방식으로 전환해 서버 부하 제거
AI 요약
Context
상품 이미지 업로드 기능에서 기본 이미지, 썸네일, 전시 이미지 등 다양한 크기의 리사이징이 필요했습니다. 기존에는 서버에 임시 파일을 생성하여 리사이징하는 방식을 사용했는데, 서버 부하, 속도, 비용 측면에서 개선이 필요했습니다.
Technical Solution
- S3 업로드 이벤트를 트리거로 Lambda 함수 자동 실행: S3에 이미지 PUT 시 Lambda 함수 즉시 호출
- sharp 라이브러리를 통한 이미지 리사이징: 200px 너비 기준으로 종횡비 유지하며 리사이징 수행
- Lambda 함수에 S3 접근 권한 부여: IAM 정책으로 s3:GetObject, s3:PutObject 권한 설정
- Lambda 함수 타임아웃 50초로 설정: 대용량 이미지 처리 시간 확보
- Lambda 메모리 512MB 할당: 4.1MB 용량 파일 처리 시 메모리 과부하 해결
- 무한 업로드 방지를 위해 S3 버킷 내 폴더 Prefix 분리: 입력 폴더(images)와 출력 폴더(Thumbnail) 경로 구분
- Node.js 의존성을 Lambda Layer로 관리: node_modules를 zip 압축해 Layer로 업로드하여 배포 아카이브 크기 감소
Impact
25MB까지의 이미지 파일 처리 가능(메모리 128MB → 512MB 증설 후)
Key Takeaway
S3 이벤트 기반 서버리스 함수는 서버에서 처리하던 동기적 작업(이미지 리사이징)을 자동화할 때 효과적이며, 트리거 설정과 IAM 권한 관리를 통해 서버 부하를 제거할 수 있습니다. 다만 같은 버킷에서 입출력할 경우 무한 트리거 루프를 방지하기 위해 폴더 Prefix 분리가 필수입니다.
실천 포인트
이미지 최적화가 필요한 e-커머스 플랫폼에서 Lambda + S3 트리거 패턴을 도입하면 서버에서 리사이징 로직을 제거할 수 있고, S3 내 폴더 Prefix를 분리하여 설정하면 무한 업로드 루프 없이 안정적으로 썸네일 자동 생성이 가능합니다.