❌ 에러 상황
org.springframework.web.multipart.MaxUploadSizeExceededException:
Maximum upload size exceeded;
nested exception is java.lang.IllegalStateException:
org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException:
The field multipartFiles exceeds its maximum permitted size of 1048576 bytes.
AWS S3 파일 업로드 중 발생한 문제
MaxUploadSizeExceededException
AWS S3 와 연동해서 파일을 업로드 할 때
http 413 이 뜨면서 허용된 파일 용량을 초과했다고 하는 에러이다
스프링의 내장 톰캣 서버에서 초기 설정 값은
1048576 bytes => 1MB 이다
🔍 Trouble Shooting 1
Spring Boot 설정 파일에서 최대 허용 용량을 설정해주면 된다
📝 application.yml
spring:
servlet:
multipart:
#file upload size
max-file-size: 3MB
spring.servlet.multipart.max-file-size: {원하는 크기} 로 설정해준다
우리 서버에서는 3MB 를 최대 크기로 하도록 설정했다
📝 GlobalExceptionHandler.java
/**
* 업로드 최대 용량을 초과했을 경우
*/
@ExceptionHandler({MaxUploadSizeExceededException.class})
protected ResponseEntity<ErrorResponse> handleMultipartException(MaxUploadSizeExceededException e) {
log.error("handleMaxUploadSizeExceededException", e);
final ErrorResponse response = ErrorResponse.of(ErrorCode.MAX_FILE_SIZE_EXCEEDED);
return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST);
}
보너스로 글로벌 에러 핸들러에서
관련 예외를 처리해주는 코드도 작성했다
이제 413 에러가 아닌 400 에러로 처리된다
❌ 또 다른 에러
이번에는 json 예외 메세지가 아니라 html 응답이 뜨면서
여전히 http 413 에러가 발생한다
이는 우리 서버에서 사용하고 있는 Nginx 에서
또한 최대 body size 를 제한하고 있기 때문이다
그렇기 때문에 Nginx 설정 파일도 바꿔줘야 한다
🔍 Trouble Shooting 2
📝 nginx.conf
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
client_max_body_size 4M;
...
Nginx 설정 파일에서
client_max_body_size {원하는 크기};
설정해주면 된다
spring 내장 tomcat 에서 3MB 를 최대로 하기로 했으니까
Nginx 에서는 넉넉하게 4MB 로 설정해주었다
역시 Nginx 에서도 초기 값은 1MB 이다
너무 큰 값을 주면 공격 위험이 있을 거 같아서
용량을 많이는 안주었다
이제 응답이 잘 된다
로컬이랑 AWS 개발 서버에서 모두 동작하는 것을 확인했따
'🚀 프로젝트 > 🌞 내친소' 카테고리의 다른 글
[Spring] RefreshToken + Redis 사용해서 자동 로그인 + 로그아웃 구현하기 (0) | 2022.11.14 |
---|---|
[Spring] 스프링 스케쥴러 사용해서 일정 주기로 메소드 실행하기 (Scheduler) (2) | 2022.11.05 |
[Spring] JPA + Lombok 사용할 때 @OneToOne 에서 발생하는 StackOverflowError 해결 (0) | 2022.09.24 |
[Spring] 문자 인증 구현하기 (Redis + 네이버 클라우드 플랫폼 SMS API) (0) | 2022.09.11 |