gengminy
갱미니의 코딩일지
gengminy
전체 방문자
오늘
어제
  • 분류 전체보기 (61)
    • 🚀 프로젝트 (16)
      • 🎸 고스락 티켓 (4)
      • 🌞 내친소 (5)
      • 🥁 두둥 (7)
    • 📡 백엔드 (31)
      • 🌱 Spring Boot (13)
      • 🐱 Nest.js (10)
      • ⭐ Node.js (8)
    • 🏭 Infra (11)
      • ⚙ 준비를 위한 준비 (2)
      • 🥑 AWS (3)
      • 🐳 Docker (3)
      • ⚡ Github Actions (3)
    • 🌊 프론트엔드 (1)
      • 🌌 React.js (1)
    • 😎 주저리 (2)

블로그 메뉴

  • 💻Github
  • 📸Instagram
  • ✨Blog

공지사항

인기 글

태그

  • JSON
  • springboot
  • OAuth
  • 네스트
  • oauth2
  • nest
  • 도커
  • github
  • 스프링
  • 깃헙액션
  • docker
  • SlackAPI
  • 스프링부트
  • 슬랙알림
  • AWS
  • JWT
  • Spring
  • nodejs
  • nestjs
  • GithubActions

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
gengminy

갱미니의 코딩일지

[Spring/Nginx] MultipartFile 최대 용량 설정하기 (MaxUploadSizeExceededException / Request Entity Too Large)
🚀 프로젝트/🌞 내친소

[Spring/Nginx] MultipartFile 최대 용량 설정하기 (MaxUploadSizeExceededException / Request Entity Too Large)

2022. 11. 1. 13:28

❌ 에러 상황

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
    '🚀 프로젝트/🌞 내친소' 카테고리의 다른 글
    • [Spring] RefreshToken + Redis 사용해서 자동 로그인 + 로그아웃 구현하기
    • [Spring] 스프링 스케쥴러 사용해서 일정 주기로 메소드 실행하기 (Scheduler)
    • [Spring] JPA + Lombok 사용할 때 @OneToOne 에서 발생하는 StackOverflowError 해결
    • [Spring] 문자 인증 구현하기 (Redis + 네이버 클라우드 플랫폼 SMS API)
    gengminy
    gengminy
    코딩

    티스토리툴바