AWS S3 Presigned URL을 활용한 효율적인 클라이언트-서버 이미지 업로드 아키텍처

🤖 AI 추천

AWS S3를 사용한 이미지 업로드 구현 시 서버 부하를 줄이고 확장성을 높이고자 하는 백엔드 개발자 또는 클라이언트-서버 아키텍처 설계에 관심 있는 개발자에게 유용합니다.

🔖 주요 키워드

AWS S3 Presigned URL을 활용한 효율적인 클라이언트-서버 이미지 업로드 아키텍처

핵심 기술: 본 콘텐츠는 Inhu 프로젝트에서 AWS S3를 활용한 이미지 업로드 방식을 multer-s3에서 Presigned URL로 전환하며 겪었던 기술적 고민과 해결 과정을 공유합니다. 특히 클라이언트가 서버를 거치지 않고 S3에 직접 이미지를 업로드하도록 하는 createPresignedPost 기반의 Presigned URL 구현 방안을 중점적으로 다룹니다.

기술적 세부사항:
* 기존 방식의 문제점: multer-s3 사용 시 서버 대역폭 소모, 확장성 저하, 대용량 업로드 처리 어려움 등의 단점이 있었습니다.
* Presigned URL 도입: 서버가 S3 접근 권한을 미리 설정하여 클라이언트에게 전달하고, 클라이언트는 이를 통해 인증 없이 S3에 직접 업로드하는 방식입니다.
* Presigned URL 발급 방식:
* getSignedUrl: 사용이 간단하나 조건 제어가 어려움.
* createPresignedPost: Content-Type, 파일 용량 등 조건을 세밀하게 제어 가능하여 보안 및 안정성 확보에 유리.
* createPresignedPost 구현 예시: Node.js 환경에서 S3 클라이언트를 사용하여 Bucket, Key, Expires, Conditions (ACL, 용량, Content-Type)를 설정하여 Presigned URL을 발급하는 코드 스니펫을 제공합니다.
* 단일/다중 이미지 업로드: getPresignedUrl 함수와 getPresignedUrls 함수를 통해 각각 단일 및 다중 이미지 업로드를 위한 Presigned URL을 발급하는 로직을 설명합니다.
* 아키텍처 변경: 백엔드는 Presigned URL 발급만 담당하고, 프론트엔드는 이를 이용해 직접 S3에 업로드한 후, 업로드된 파일의 filePath만 DB에 저장하는 구조로 변경되었습니다.

개발 임팩트: 서버 부하를 획기적으로 줄이고 업로드 성능을 개선했습니다. 또한, 트래픽 및 용량 증가에 유연하게 대처할 수 있는 확장성 있는 파일 업로드 구조를 갖추게 되었습니다.

커뮤니티 반응: (원문에서 언급되지 않았습니다.)

톤앤매너: 실무 경험을 바탕으로 구체적인 문제 상황과 해결 과정을 상세하게 설명하는 실용적인 톤입니다.

📚 관련 자료