티스토리 뷰

1. 멀티파트(Multipart)에 이해

 

멀티파트(Multipart)는 HTTP 프로토콜을 사용하여 웹 서버로 파일이나 데이터를 업로드할 때 사용되는 데이터 전송 방식 중 하나입니다. "멀티파트"라는 용어는 말 그대로 메시지가 여러 부분으로 구성되어 있음을 의미하며, 이러한 각각의 부분은 다른 유형의 데이터를 담을 수 있습니다.

 

HTTP 메시지에는 클라이언트가 전송하는 HTTP 요청, 그리고 서버가 반환하는 HTTP 응답이 있습니다.

 

텍스트 기반 HTTP 메세지
POST /example HTTP/1.1
Host: example.com
Content-Type: text/plain
Content-Length: 13
---- CLRF 빈줄 공백 --------
Hello, World!

 

 

바이너리 기반 16진수 HTTP 메세지
POST /example HTTP/1.1
Host: example.com
Content-Type: application/octet-stream
Content-Length: 5

\x48\x65\x6C\x6C\x6F

 

HTTP 메시지는 크게 시작 라인(start line), 헤더(headers), 그리고 바디(body) 세 부분으로 구성됩니다.

여기서 바디 부분은 실제 전송하려는 데이터를 담고 있고, 멀티파트 요청에서는 이 바디 부분에 텍스트 기반 데이터와 바이너리 데이터가 함께 포함될 수 있습니다.

 

 

이해를 돕기 위한 HTTP 예시

POST /submitForm HTTP/1.1
Host: tenco.com
Content-Type: multipart/form-data; boundary="boundary123"
Content-Length: [계산된 총 길이]

--boundary123
Content-Disposition: form-data; name="username"

길동
--boundary123
Content-Disposition: form-data; name="password"

1234
--boundary123
Content-Disposition: form-data; name="binaryData"; filename="data.bin"
Content-Type: application/octet-stream

01010101 01101100 01101100 01101111
--boundary123--

 

boundary="boundary123” 은 멀티파트 메시지의 각 부분을 구분하기 위한 문자열입니다.

그리고 2진수로 표현되어 있는 부분은 보통 16진수 인코딩 되어 전송이 됩니다(이해를 돕기 위해 01010로 2진수로 표현)

 

여기서 핵심은 ‘바디 부분에 텍스트 기반 데이터와 바이너리 데이터가 함께 포함 될 수 있다’ 입니다.

 

 

2. 스프링 프로젝트에서의 멀티파트 처리

스프링 프레임워크에서는 멀티파트 요청을 처리하기 위한 기능을 제공합니다.

스프링의 MultipartResolver 인터페이스는 멀티파트 요청을 파싱하고, 업로드된 파일폼 데이터에 접근할 수 있는 API를 제공합니다.

 

즉, 스프링 부트(Spring Boot) 프로젝트에서는 추가적인 설정 없이도 멀티파트 지원이 자동으로 활성화되며,

필요한 경우 application.properties 또는 application.yml 파일을 통해 멀티파트 관련 설정을 커스터마이즈할 수 있습니다.

 

 

멀티 파트 요청 처리 예시 코드

@PostMapping("/upload")
public String handleFileUpload(@RequestParam("name") String name,
                               @RequestParam("file") MultipartFile file) {
    if (!file.isEmpty()) {
        // 파일 처리 로직
    }
    // 추가 작업
    return "redirect:/success";
}

 

@RequestParam("file") MultipartFile file

@RequestParam 어노테이션을 사용하여 멀티파트 폼 데이터에서 업로드된 파일을 받아옵니다.

 

MultipartFile 인터페이스는 업로드된 파일에 대한 정보데이터에 접근할 수 있는 메서드를 제공합니다.

이번 프로젝트에서는 WebDataBinder 를 활용한 파싱 방식을 사용할 예정 입니다.(DTO)

 

 

3. 회원 가입시 파일 업로드 기능 구현

application.yml
spring:
  mvc:
    view: 
      prefix: /WEB-INF/view/ #JSP파일이 위치한 디렉토리 접두사를 설정합니다.
      suffix: .jsp #뷰 이름에 자동으로 추가될 파일 확장자를 설정합니다.
  servlet:
    multipart:
      max-file-size: 20MB #파일 최대 크기 20MB
      max-request-size: 20MB #멀티파트 전체 요청 크기 20MB제한
  • max-file-size: 기본값은 1MB입니다. 이는 단일 파일 업로드 시 최대 파일 크기를 의미합니다.
  • max-request-size: 기본값은 10MB입니다. 이는 멀티파트 요청의 전체 크기에 대한 최대값을 의미합니다.

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함