@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는
웹 폼 데이터 및 파일 업로드와 같이 여러 종류의 데이터를 처리하는 데 사용된다.
'Back-end' 카테고리의 다른 글
[SpringBoot] 파일 관련 라이브러리 - Apache Tika (feat. 파일 유효성 체크) (4) | 2024.03.13 |
---|---|
[IT] 소프트웨어 디자인 패턴 - MVC 패턴 (30) | 2024.02.15 |
[Java] String 배열 대신 HashSet을 이용하여 문자 찾기 (1) | 2024.01.19 |
[Java] OPEN JDK 1.8 설치 방법 (zip, msi) (0) | 2024.01.17 |
[Java] 자바 예외 처리 - Throw, Throws (1) | 2023.12.11 |