1. 개요
- 프로필 이미지를 서버가 아닌 AWS S3에 저장하고, 보안상 안전하게 접근하기 위해 Presigned URL을 발급하는 기능을 구현함.
2. S3 Presigned URL 개념 및 장점
- 개념: AWS 자격 증명을 가진 서버가 특정 객체에 대해 일정 시간 동안만 접근을 허용하는 임시 URL을 서명하여 발급하는 방식.
- 장점
- S3 버킷을 퍼블릭으로 개방하지 않아도 되어 보안성이 높음.
- 서버의 자원을 거치지 않고 S3 리소스에 직접 접근하게 하여 서버 부하를 줄임.
- 유효 기간(Expiration)을 자유롭게 설정할 수 있음.
3. MultipartFile을 통한 이미지 업로드
- Controller: MultipartFile과 @RequestPart를 사용하여 이미지 파일을 전달받음.
- Service
- 파일의 고유성 보장을 위해 UUID를 활용한 S3 Key(저장 경로) 생성.
- S3 SDK의 PutObjectRequest를 사용하여 버킷에 파일 업로드.
- Presigned URL 생성: 업로드 완료 후, 해당 S3 Key를 기반으로 7일 유효 기간이 적용된 접근 URL 생성 및 DB 저장.
4. 트러블슈팅
문제 1: Postman으로 이미지 업로드 요청 시 404 오류 발생.
- 원인: @PostMapping의 URL 경로 문자열 끝에 오타가 있어 오류 발생.
- 해결: 컨트롤러의 매핑 경로에서 오타를 제거하여 Postman 요청 주소와 일치시킴.
문제 2: "서버에 문제가 발생했습니다" 메시지와 함께 이미지 업로드 실패.
- 원인: Postman의 form-data Key 이름을 넣지않음
- 해결: Postman의 Key 값을 서버 코드에서 정의한 이름 추가.