Nuwa Project - AWS S3 (Issue)
AWS S3에 관련해서 설정 하는 부분은 많은 분들이 너무 설명을 잘 해주신 블로그가 많기에 저는 이 부분을 넘기고
제가 코드를 만지던 도중 생겼던 오류에 대해 작성하려고 합니다.
Bucket cannot have ACLs set with ObjectOwnership's BucketOwnerEnforced setting
분명 AWS S3를 정책 편집기로 Public이 가능하게 정책을 설정 했습니다.
그런데 코드를 돌려보니 해당 오류가 지속해서 나왔습니다.
이곳 저곳에서 찾아보니 BucketOwnerEnforced 설정과 출동하는 ACL 설정을 시도 했다고 합니다.
그래서 ACL 설정을 하는 코드가 어디에 있지? 하고 찾아보니
amazonS3.putObject(new PutObjectRequest(bucketPath, fileName, inputStream, objectMetadata)
.withCannedAcl(CannedAccessControlList.PublicRead));
해당 코드에서 .withCannedAcl로 PublicRead 설정을 해주는 것을 발견 할 수 있었습니다.
그래서 해당 코드를 삭제하고 실행을 했는데...
이번엔 다른 오류가 발생을 했습니다.
The XML you provided was not well-formed or did not validate against our published schema
XML의 형식이 올바르지 않다??
이건 또 무슨 오류인가 했습니다...
저는 정상적으로 값을 넘겼다고 생각을 했고 해당 XML의 형식이 올바르지 않게 동작을 할 이유가 없다고 생각을 하고
무엇이 문제일까 고민을 하던 도중..!
bucketPath 부분을 유심히 쳐다보기 시작했습니다.
여기서 잘못 넘어가는 부분은 path 부분 밖에 없을 것이다라고 생각을 했고 다시 한번 코드를 전체적으로 살펴봤습니다.
아니나 다를까.. 제 예상이 맞았습니다. path를 조립하는 부분에서 enum으로 값을 넘겨왔는데
.getType()을 해주지 않고 그대로 사용하고 있어서 /test 이런 식으로 붙어야 하는 경로가
TEST 이런 형식으로 붙었기에 문제가 발생을 했던 것이였습니다.
해당 path를 수정을 해주고 실행을 해본 결과 정상적으로 이미지 업로드에 성공을 했습니다.
** 처음 Acl 설정을 다시 넣어주고 진행을 했는데 동작을 하는거에 무엇이 문제였나 생각을 해봤습니다.
그런데 yml 설정에서
region:
static: 지역
auto: false
이런 식으로 작성을 했었는데.. auto: false <- 얘 때문에 값에 제대로 맵핑이 되지 않아 오류가 발생을 했습니다..
(동일한 상황에 테스트를 해본 결과 해당 부분을 제거하니 모두 정상동작을 하여 .. 저는 이 문제라고 생각합니다.)
그리고 포스트맨으로 값 테스트를 하는데 계속해서 타입오류가 나오기 시작했습니다.
@RequestPart(name = "fileList") List<MultipartFile> multipartFileList,
@RequestPart(name = "fileRequestDto") FileRequestDto fileRequestDto
저는 다음과 같이 dto와 같이 받고 있었는데 뭐가 문제일까 생각을 했습니다.
그런데.. dto는 application/json 타입으로 가야하는데 숨겨져있던 content-type을 발견했습니다.
타입이 auto로 되어 있어서 octet_stream 타입으로 전송이 되고 있어서 문제가 발생을 했습니다.
해당 부분을 application/json 타입으로 변경하니 정상적으로 동작 했습니다.