Spring 파일 업로드 ① - multipart/form-data 개념과 기본 설정
이번 포스트부터는 브라우저에 파일을 업로드하는 과정을 정리해보려고 합니다.
파일 업로드를 구현할 때 multipart/form-data를 사용한다고 배웠습니다.
하지만 왜 multipart를 사용하는지에 대해 구체적인 이유에 대해서는 설명듣지 못했습니다. 그래서 구글링해 찾아본 결과 그 이유는 다음과 같습니다.
- HTTP는 기본적으로 텍스트 기반 프로토콜이고 기본 form 전송방식은 문자열 데이터를처리하기 위한 구조
- 파일은 단순 문자열이 아니라 Binary 데이터이기 때문에 별도의 전송 방식이 필요함
이론적인 내용이라 처음에는 크게 와닿지 않을 수 있지만, 파일 업로드의 기본 원리를 이해하기 위해 이 정도는 짚고 넘어가겠습니다.
1. multipart 사용을 위한 환경 설정(application.properties,pom.xml)
Spring에서 파일 업로드 기능을 사용하려면 먼저 multipart 관련 설정을 활성화해야 합니다.
1.1 application.properties
먼저, application.properties에 아래와 같이 설정합니다.
spring.servlet.multipart.enabled=true
spring.servlet.multipart.location=/Users/../folder/upload/temp
spring.servlet.multipart.max-file-size=40MB
spring.servlet.multipart.max-request-size=40MB
spring.servlet.multipart.file-size-threshold=100MB
각 설정의 의미는 다음과 같습니다.
① spring.servlet.multipart.enabled
→ 멀티파트 파일 업로드 기능을 활성화 하는 설정입니다.
이 값이 False이면 MultipartFile로 파일을 받을 수 없습니다.
②spring.servlet.multipart.location
→ 업로드된 파일이 임시로 저장되는 경로(/Users/../folder/upload/temp )를 지정합니다.
파일은 브라우저에서 서버로 전송되면 먼저 이 경로에 저장된 뒤, transferTo()를 통해 최종 위치로 이동합니다.
③ spring.servlet.multipart.max-file-size
→ 파일 1개당 최대 허용 용량을 지정합니다.
여기서는 40MB로 설정했으므로 41MB 크기의 파일은 업로드되지 않습니다.
④ spring.servlet.multipart.max-request-size
→ 요청 전체의 최대 용량을 지정합니다.
여러 파일을 동시에 업로드할 경우, 전체 크기가 이 값을 초과하면 업로드가 제한됩니다.
⑤ spring.servlet.multipart.file-size-threshold
→ 파일을 메모리에 저장할지, 디스크에 저장할지 결정하는 기준값입니다. 이 값(100MB)보다 작으면 메모리에서 처리되고, 초과하면 디스크에 저장됩니다.
② ~ ⑤ 설정은 필수는 아니며, 프로젝트 상황에 따라 선택적으로 설정할 수 있습니다.
다만 spring.servlet.multipart.enabled는 multipart 기능을 사용하기 위해 반드시 필요합니다.
1.2 pom.xml에 Gson 의존성 추가
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
현재 단계에서는 Gson을 직접 사용하지는 않습니다.
하지만, 이후 uploadAjax 방식에서 서버 객체를 JSON 형태로 변환하기 위해 미리 추가해두었습니다.
그렇다면 Gson이 무엇일까요?
Gson은 자바 객체를 JSON 문자열로 변환해주는 라이브러리입니다.
브라우저는 자바 객체를 직접 이해할 수 없기 때문에,
파일 업로드 결과(예: 파일명, 경로 등)를 JSON 형태로 변환하여 전달해야 합니다.
즉,
자바 객체 ▶︎ JSON문자열 변환 ▶︎ (JSON 문자열) ▶︎ 자바 객체 변환
을 도와주는 도구가 바로 GSON입니다.
💭 마무리하며
이번 글에서는 multipart/form-data가 왜 필요한지, 그리고 Spring에서 이를 사용하기 위한 환경 설정 방법을 정리해보았습니다.
아직 이론적인 부분이라 완전히 와닿지는 않지만, 이후 구현 과정을 이해하기 위한 기초라고 생각하고 넘어가려 합니다.
다음 글에서는 form 기반 파일 업로드를 직접 구현해보겠습니다.
'Spring > multipart' 카테고리의 다른 글
| Spring 파일 업로드 ⑤ - 이미지 판별 & 썸네일 생성 + 업로드 결과 출력 (0) | 2026.03.26 |
|---|---|
| Spring 파일 업로드 ④ - 파일 크기, 확장자 제한 & UUID 파일 이름 처리 (0) | 2026.03.18 |
| Spring 파일 업로드 ③ uploadAjax – Ajax 이용하기 (0) | 2026.03.06 |
| Spring 파일 업로드 ② - uploadForm으로 업로드 구현하기 (0) | 2026.02.23 |