오류 원인 및 내용
프로젝트 코드를 파트별로 합치고 하나씩 기능이 구현되는지 확인 중,
용량이 큰 사진을 업로드했더니 발생된 오류이다.
구글링 해봤더니 application.properties에 설정을 추가하라고 했는데,
이렇게 수정하는 경우는 Boot를 사용하는 과정이고, 우리는 현재 Boot를 사용하지 않고 있기 때문에
이곳에 추가하는 것은 의미가 없다.
해결방안
<!-- MultipartFile 사용하기 위한 dependency / commons-fileupload, spring-web, commons-io-->
<!-- HTML 폼에서 실제 파일 업로드를 처리 -->
<!-- 멀티파트 데이터를 쉽게 처리할 수 있도록 도와줌 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!-- Spring MVC와 통합하여 HTTP 요청 및 응답을 관리 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<!-- 파일 작업을 용이하게 해줌 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
기존에 commons-fileupload 의존만 있었는데,
아래의 두 가지 의존도 추가했더니 오류는 발생되지 않았다.
다만 이 dependency들을 넣는다고 해서 업로드할 수 있는 용량이 늘어나는 것은 아니고,
spring-web이 없으면 파일 업로드를 위한 multipart 요청 처리가 제대로 이루어지지 않아서
용량이 큰 파일을 업로드 하는 경우 서블릿 컨테이너가 설정한 파일 크기 제한에 걸려 오류가 발생할 수 있다고 한다.
기본 파일 크기 제한은 1~2MB 정도라고 하며,
이 설정을 web.xml에 설정할 수 있다.
<servlet>
<servlet-name>ds</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<multipart-config>
<max-file-size>10485760</max-file-size> <!-- 최대 파일 크기: 10MB -->
<max-request-size>52428800</max-request-size> <!-- 최대 요청 크기: 50MB -->
<file-size-threshold>0</file-size-threshold> <!-- 메모리 내 임시 파일 크기 -->
</multipart-config>
</servlet>
multipart-config 설정을 통해 지정해줄 수 있다.
▼ 용량에 따른 value 설정
- 2MB : 2097152
- 5MB : 5242880
- 10MB : 10485760
- 50MB : 52428800