107DAYS) [Main-Project] reviewImage Multipart 이용하여 S3에 저장

nacSeo (낙서)·2023년 3월 22일
0

FE 1분은 지역이 지방이라 오시지 못하고 1분은 월요일부터 연락 두절.. 그렇게 FE 1분과 BE 2분, 나까지 총 4명에서 스터디룸을 잡고 회의를 진행하고 코딩을 했다. 오전부터 저녁이 되기 전까지 잡고 있던 결과 ,, 결국 이미지 업로드를 해냈다!!! 아래는 구현하면서 만났던 에러들과 해결했던 방법들이다.

첫번째 만난 에러

Caused by: java.net.ConnectException: Host is down (connect failed)

처음에 버킷 권한 문젠가 해서 이것저것 시도해보고 정책 생성기에서 다음과 같은 문구가 뜨길래 해결하기 위해 이것저것 찾아보고 시도봤다.
Network Failure - verify permissions to access-analyzer:ValidatePolicy in IAM to use policy validation.

결국 도출해낸 해결방법은 com.amazonaws.sdk.disableEc2Metadata 설정을 안해준 것이다.
@SpringBootApplication 클래스에 간단히 다음과 같은 코드를 추가해주면 된다..

static {
	System.setProperty("com.amazonaws.sdk.disableEc2Metadata", "true");
}

또는 VM Option에 다음과 같이 설정해주면 된다.

이렇게 해두면 warning 로그가 발생하긴 하지만 실행은 된다. 만약 로그도 거슬린다면 application.yml 파일에

logging:
  level:
    com:
      amazonaws:
        util:
          EC2MetadataUtils: ERROR

다음과 같이 추가해주면 되겠다.

두 번째 에러

Process 'command '/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1

구글링을 통해 해당 에러를 해결하였다.
intellij - setting- build tools - gradle - build and run - intellij IDEA 둘 다 설정하면 해결!

세 번째 에러

Description:
Parameter 1 of constructor in com.mainproject.udog_server.s3.service.AWSS3UploadService required a bean of type 'com.mainproject.udog_server.s3.component.S3Component' that could not be found.
Action:
Consider defining a bean of type 'com.mainproject.udog_server.s3.component.S3Component' in your configuration.

정말정말 황당한 실수였는데 구글링해도 안나와서 골치아팠다... 에러 로그를 보면 S3Component 클래스에 문제가 있을 것 같아 코드를 하나하나 다 살펴봤는데 겨우겨우 찾아냈다........
S3Component 클래스에 @Component 애너테이션 빠져먹은 것 ,,, 😂😂

네 번째 에러

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 's3Config': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'cloud.aws.credentials.access-key' in value "${cloud.aws.credentials.access-key}"

이번에도 에러 로그를 통해 yml파일 credentials에 accesskey랑 secret키 잘못 넣은 걸 찾아냈다. 정말 에러에 시달리다 어이없는 실수가 많았던 것 같다 🥲 (멘탈 어떻게든 잡으려 했다)

그 뒤엔 실행이 잘 되었고 postman을 통해 테스트해봤다.
조마조마했는데 역시 문제가 발생했다.

postReview 때 body - form-data에 key로 body, value로 JSON 형식 데이터 key로 image, value로 png파일 넣어봤는데
415 에러가 발생했다.

원인은 나의 postman 숙련도 이슈다. 처음 이미지 업로드를 해보면서 테스트해보는 거다 보니 Content type을 설정 안해줬던 것이다 흑흑 ,,,
각각 application/json, image/png로 설정해줌으로써 해결하였다.

추가적으로 postDto에는 reviewImage가 없고(Controller에서 MultipartFile로 따로 받기 때문), responseDto에는 String으로 reviewImage를 받고 있어서 에러 발생했다.
이는 mapper 수정하여 해결하였다.

정말정말 수많은 에러밭에서 하나하나 내 힘으로 해결하고 보니 그 뿌듯함은 이루 말할 수 없다. 🥺 앞으로도 계속 개발자로 성장하면서 에러 메세지들을 만날텐데 그 때마다 정말 멘탈 터지지 말고 에러 로그만 잘 확인하자.. 문제 속에 답이 있는 느낌!

profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글