안녕하세요. 이미지 공유 사이트를 개발 중인데 고민이 돼서 질문글을 올리게 되었습니다.
현재는:
AWS S3 Presigned URL로 이미지 업로드하고, 업로드 완료 후 Lambda에서 비동기로 리사이징합니다.
프론트엔드에서 이미지 목록 조회 시 리사이징이 완료되지 않은 경우, fallback으로 원본을 요청해서 보여주도록 구현되어 있습니다.
이제 다음과 같은 구조로 바꾸는 것을 고민 중입니다:
DB에 이미지 변환 완료 여부 (
status
컬럼)를 추가하여 리사이징 상태를 관리업로드 시 클라이언트에서 프로그레스 바를 표시 (S3 presigned URL 업로드 시 onUploadProgress 사용)
이미지 목록 조회 시에는 리사이징 완료(
status = 'ready'
)된 데이터만 조회 (복합 인덱스 사용 고려)프론트엔드에서는 폴링 방식으로 상태를 확인하여 리사이징 완료시 썸네일 표시 전환
고민 중인 장단점은 다음과 같습니다:
1번 방식 (현재 fallback 방식)
장점:
업로드 직후 사용자가 즉시 피드에서 이미지를 볼 수 있다.
단점:
리사이징 전에는 원본을 보여주므로 초기 로딩 속도가 느릴 수 있고, 다른 썸네일과 해상도 차이가 발생 (UX 일관성 손상 가능성)
클라이언트에서 fallback 렌더링 로직(img, video 등 처리) 구현 복잡
2번 방식 (상태 관리 방식)
장점:
이미지 목록의 UX 일관성이 보장된다.
리사이즈 실패시 쉽게 모니터링 및 장애 추적 가능
단점:
목록 조회 쿼리에 status 조건이 추가되어 쿼리 성능 저하 우려 (복합 인덱스 추가시 완화 가능)
리사이징 실패시 업로드 실패로 처리 → 사용자 입장에선 업로드 실패로 인식
이미지 업로드 시 더 오래걸림.
이런 상황에서 어느 방식이 적합한지 고민해봤지만 잘 모르겠어서 질문드립니다.
검색해도 잘 나오지 않는데 상태관리 방식도 잘 사용하는 방식인가요?
https://aws.amazon.com/ko/blogs/networking-and-content-delivery/resizing-images-with-amazon-cloudfront-lambdaedge-aws-cdn-blog/
Lambda@Edge 를 사용해서 리사이징 결과를 CDN 캐시로 남겨두는 건 어떠신가요? 따로 상태관리를 하지 않아도 되고 1번 방식에서 S3 저장 공간을 더 절약할 수 있어요
답글
pink102557
2025.06.11답변 너무 감사합니다!
Lambda@Edge를 사용하는 방법도 생각해봤는데 람다 리사이징시 10초까지도 걸리는데
그럼 첫번째 접근하는 사람은 너무 오래걸리지 않을까 하는 생각도 해봤는데 괜찮을까요?