스프링 부트 AWS S3 연동 시 이미지 업로드 관련 오류 (해결)

youngjae-Kim·2023년 6월 19일
0

기존의 로컬에서 이미지 파일을 업로드하고 불러오는 로직으로 구현되어 있었다.

이를 배포 시 서버 스토리지(S3) 에서 가져와 사용할 수 있도록 S3 API 를 스프링 부트에 연동하여 이미지 업로드가 잘 되는지 테스트를 진행하였다.

처음 API 연동을 하는데 있어 어려움이 많았는데 @duswnsxnxn 께 많은 도움을 받았다.

구현한 내용에서 문제점은 다음과 같았다.

에러 로그

try-catch 의 예외를 IOException 으로 지정하여 예외를 던져주지 못해 에러 로그를 확인하지 못하고 있었음..
최상위 예외인 Exception 으로 catch 하여 에러 로그를 확인했다.
com.amazonaws.services.s3.model.AmazonS3Exception: The bucket does not allow ACLs (Service: Amazon S3; Status Code: 400; Error Code: AccessControlListNotSupported; Request ID: ECWDZKD95SFQNE7B; S3 Extended Request ID: Lyy8ya1kOYoj5oNlu6FQPFynTPTjpUahryB0uLqP5mxIbkVlAQ7HD4aLk1JzMJjDhLBz18e9xadnhGP/fEyQ9g==; Proxy: null)
이런 예외가 발생하였다.

발생하는 이유를 찾기 위해서는 자바 라이브러리를 계속 파고 들어가는 수 밖에 없는 한계가 있어서 정책 설정을 다시 보니

이미 퍼블릭 액세스를 허용한다고 설정 되어 있었지만
.withCannedAcl(CannedAccessControlList.PublicRead) 메서드로 인해 예외가 발생하는 것이었다.

그래서 권한 정책에 putObjectAcl 정책을 추가해주고 ACL 설정까지 활성화 해주어서야 이 메서드가 제대로 동작을 하였고

권한 정책 추가

ACL 활성화

ACL 설정을 비활성화 할 것을 AWS 에서 권장하니 메서드를 굳이 추가해줄 필요는 없다고 생각했다..

그래도 S3 연동을 하고 이미지 업로드를 해보면서 발생할 수 있는 문제에 대해 고민해볼 수 있는 시간이 되어서 좋았다.

profile
영원히 남는 기록, 재밌게 쓰자 :)

0개의 댓글