Back-end

[Spring] 데이터 전송 - @RequestBody, @RequestPart, JSON, multipart/form-data

somuxsomu 2024. 2. 1. 09:58

@RequestBody, @RequestPart, 

JSON, multipart/form-data

 

 

스프링 프로젝트에서 사용하는

데이터 전송 관련 어노테이션과,  데이터를 서버로 전송하는 인코딩 방식에

대해 정리를 해보았다.

 

 

먼저 스프링 프로젝트에서 사용하는 

데이터 전송 관련 어노테이션에 대해 알아보자.

 

 


데이터 전송 관련 어노테이션

 

@RequestBody 어노테이션은

 HTTP 요청의 본문(body)에 있는 데이터를 읽어와 해당 데이터를 메소드 파라미터에 바인딩한다.

주로 JSON 또는 XML과 같은 데이터 형식을 읽을 때 사용된다.

 

@RequestPart 어노테이션은 

multipart/form-data 형식으로 전송된 요청의 파트(part)를 읽어와 메소드 파라미터에 바인딩한다.

이것은 주로 파일 업로드와 함께 사용된다.

 

@Schema 어노테이션은 

스웨거 문서에서 스키마 정보를 지정할 때 사용된다.

API 문서화에 사용되며, 스키마의 형식, 설명, 예제 값 등을 지정할 수 있다.

 

예를들어, @Schema(implementation = CompanyDto.class)는

해당 API에서 반환되는 데이터의 스키마를 CompanyDto 클래스에 맞추겠다는 의미이다.

 


 

데이터를 서버로 전송하는데 사용하는 인코딩 방식에 대해 알아보자.

 

🔍 JSON 형식과 multipart/form-data 형식

 

multipart/form-data 형식

웹 폼 데이터와 파일 업로드와 같은 다양한 종류의 데이터를

서버로 전송하는 데 사용되는 인코딩 방식이다.

 

주로 웹 양식(form)을 통해

사용자가 제출하는 데이터를 처리하거나, 파일 업로드를 수행할 때

사용된다.

 

multipart/form-data 형식의 특징

1. 다중 파트(multipart) 메시지

 multipart/form-data는 여러 파트로 구성된 메시지를 생성한다,

각 파트는 서로 다른 종류의 데이터를 나타내며, 이들 파트는 구분자(boundary)를 사용하여 구분된다.

 

2. 파일 업로드

multipart/form-data는 파일을 서버로 업로드하는 데 유용하다.

각 파일은 별도의 파트로 전송되며, 해당 파트는 파일의 내용과 파일 이름 등의 메타 정보를 포함한다.

 

3. 웹 폼 데이터

폼 데이터도 파트로 전송된다.

각 입력 필드의 이름과 값이 해당 파트에 포함되며, 서버에서는 이 데이터를 읽어와 처리할 수 있다.

 

4. Content-Disposition 헤더

각 파트는 Content-Disposition 헤더를 사용하여,

해당 파트의 종류(파일 또는 폼 데이터)와 이름, 파일 이름 등의 메타 정보를 제공한다.

 

 

JSON 형식

JavaScript Object Notation (JSON)은 

Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷이다.

웹 어플리케이션에서 데이터를 전송할 때 일반적으로 사용한다.

서버에서 클라이언트로 데이터를 전송하여 표현하려거나 반대의 경우

 

데이터 표현

JSON은 키-값 쌍으로 데이터를 표현한다.

키는 문자열이며, 값은 문자열, 숫자, 불리언, 배열, 객체, null 등 다양한 데이터 유형을 가질 수 있다.

 

객체와 배열 

JSON은 객체와 배열을 포함하는데, 객체는 중괄호 {}로 표현되며 키-값 쌍을 포함하고,

배열은 대괄호 []로 표현되며 값의 리스트를 갖는다.

 

기본 데이터 유형

- 문자열 : 문자열은 큰따옴표로 묶어서 표현하며, 유니코드 문자를 지원한다.

- 숫자 : 정수 및 부동 소수점 숫자를 표현할 수 있다.

- 불리언 : true(참)와 false(거짓)를 표현할 수 있다.

- null : 빈 값을 나타낸다.

 

중첩 가능

JSON 객체나 배열 안에 또 다른 객체나 배열을 중첩하여 사용할 수 있다.

 

{
  "name": "John Doe",
  "age": 30,
  "isStudent": false,
  "hobbies": ["reading", "swimming"],
  "address": {
    "street": "123 Main St",
    "city": "Cityville"
  },
  "scores": [95, 88, 76]
}

 

위 예제에서

 

name, age, isStudent는 기본 데이터 유형이다.

hobbies와 scores는 배열이며, address는 중첩된 객체이다.

 

JSON은 여러 프로그래밍 언어에서 지원되는 표준 형식이며, 데이터를 쉽게 구조화하여 교환하고 해석할 수 있는 장점이 있다. 

JSON 데이터는 웹 API와 통신하거나, 설정 파일로 사용되는 등 다양한 상황에서 활용된다.

 

 

🔍 JSON 형식과 multipart/form-data 형식의 차이점

 

데이터 구조

JSON: JSON 형식은 데이터를 트리 구조로 표현하며, 필드 이름과 값 사이에 매핑되는 키-값 쌍을 사용한다.

multipart/form-data: 이 형식은 폼 필드와 파일을 포함하는 다중 파트 메시지로 데이터를 전송한다.

 

용도

JSON: 데이터를 구조화하여 전송하고 서버와 클라이언트 간에 구조적인 데이터를 교환하는 데 사용된다.

multipart/form-data: 웹 폼 데이터와 파일 업로드와 같은 다양한 종류의 데이터를 서버로 전송하는 데 사용된다 .

 

전송 방식

JSON: 일반적으로 HTTP 요청의 본문(body)에 JSON 데이터를 직렬화하여 전송한다.

multipart/form-data: 메시지가 여러 파트로 나누어져 각 파트가 서로 구분자로 구분되어 전송한다 .

 

데이터 표현

JSON: 데이터를 텍스트 형식으로 표현하며, 구조적인 정보를 나타내기 위해 중괄호와 쉼표 등을 사용한다 .

multipart/form-data: 바이너리 데이터와 텍스트 데이터를 혼합하여 메시지를 구성하며, 각 파트는 자체적인 헤더와 내용을 갖는다.

 

 


 

✅결론

 

JSON은

주로 구조화된 데이터 교환을 위해 사용되며,

 

multipart/form-data는

웹 폼 데이터 및 파일 업로드와 같이 여러 종류의 데이터를 처리하는 데 사용된다.