FarmersAndFarmmunity / farmers

0 stars 0 forks source link

Enhancement 101 [병합 금지 ❌] #106

Closed Kim-youngjae closed 1 year ago

Kim-youngjae commented 1 year ago

📌 관련 이슈

closed #101

✨ 과제 내용

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

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

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

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

  1. 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 설정까지 활성화 해주어서야 이 메서드가 제대로 동작을 하였고

[권한 정책 추가]

image

[ACL 활성화]

image

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

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

📸 스크린샷(선택)

에러 로그

image

📚 레퍼런스 (또는 새로 알게 된 내용) 혹은 궁금한 사항들

Kim-youngjae commented 1 year ago

테스트 및 공부를 목적으로 발행한 PR 입니다. 참고만 해주시고 병합 하시면 안됩니다...!!