Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 윤성우의 열혈 자료구조
- insertion sort
- 윤성우 열혈자료구조
- Selection Sorting
- Graph
- C 언어 코딩 도장
- list 컬렉션
- stream
- Algorithm
- buffer
- R
- Stack
- 알기쉬운 알고리즘
- s
- 메모리구조
- Serialization
- 이스케이프 문자
- JSON
- 이것이 자바다
- 혼자 공부하는 C언어
- C programming
- datastructure
- coding test
Archives
- Today
- Total
Engineering Note
[WEB] @RequestParam, @ModelAttribute, @RequestBody 차이와 HTTP POST 요청 정리 본문
WEB
[WEB] @RequestParam, @ModelAttribute, @RequestBody 차이와 HTTP POST 요청 정리
Software Engineer Kim 2025. 10. 4. 19:21스프링에서 HTTP 메세지를 처리할 때 자주 사용하는 어노테이션 @RequestParam, @ModelAttribute, @RequestBody와 HTTP POST 요청에 대해 정리하려고 합니다. 먼저 클라이언트에서 HTTP POST 요청을 전송할 때 사용되는 form 데이터와 json/xml에 대해 정리하고 스프링 어노테이션을 정리하겠습니다.
POST 요청의 본문(body)에 데이터를 넣을 때, 가장 흔하게 사용되는 두 가지 포장방식(content-type)과 그 특징은 다음과 같습니다.
POST 요청 전송 방식
1. Form Data(폼 데이터)
클라이언트에서 HTML <form> 태그를 사용할 때 기본적으로 사용되거나, 파일 업로드를 위해 사용됩니다.
| Content-Type | 특징 | 스프링 연관 어노테이션 |
| application/x-www-form-urlencoded | 가장 기본적인 폼 데이터. 데이터가 $key1=value\&key2=value2$처럼 URL 쿼리 문자열과 같은 형태로 인코딩되어 Body에 들어갑니다. 간단한 키-값 쌍 전송에 사용됩니다. | @RequestParam, @ModelAttribute (DTO 바인딩 시) |
| multipart/form-data | 파일 업로드를 위해 사용됩니다. 하나의 Body 안에 텍스트 데이터와 파일(Binary)을 여러 파트(Part)로 나누어 전송합니다. | @RequestPart, @RequestParam |
2. JSON/XML (API Payload)
최근 REST API 통신에서 가장 일반적으로 사용되는 방식입니다.
| Content-Type | 특징 | 스프링 연관 어노테이션 |
| application/json | 가장 널리 사용되는 API 데이터 형식. 계층적 구조를 가진 복잡한 데이터를 전송하는데 최적화되어 있으며, 서버에서 객체(DTO)로 쉽게 변환됩니다. 파일(Binary)전송은 어렵습니다. Javascript Object(JSON) 형태로 BODY에 전송 | @RequestBody |
3. 핵심 차이
POST 요청에서 Form Data와 JSON Body를 사용하는 것은 어떤 목적으로 데이터를 보낼지에 따라 다릅니다.
| 구분 | Form Data (application/x-www-form-urlencoded) | JSON Body(application/json) |
| 전송 목적 | HTML 폼 제출, 간단한 키-값 쌍전송 | REST API를 통한 구조화된 객체 데이터 전송 |
| 데이터 형식 | $key1=value\&key2=value2$ (단순 평면 구조) | { "key1":"value1", "key2":{ "nested":"data"} } (계층적 구조 가능) |
| 파일 전송 | multipart/form-data 사용 시 가능 | 불가능 (별도의 Base64 인코딩 필요) |
| 스프링 처리 | @RequestParam을 사용하여 개별 필드로 받거나, @ModelAttribute를 DTO에 매핑 시킬 수 있음(@ModelAttribute 생략 가능) | @RequestBody를 사용하여 통째로 객체(DTO)로 받음 |
스프링에서 HTTP message 받기
1. @RequestParam, @ModelAttribute, @RequestBody 차이
| Spring 어노테이션 | @RequestParam | @ModelAttribute | @RequestBody |
| HTTP Method | GET 요청이나 POST요청에서 사용 | GET, POST | POST, PUT, PATCH 요청(body) 본문 처리 |
| 파라미터 바인딩 구분 | 개별 파라미터 바인딩, key1=value가 key1파라미터 변수값으로 | DTO 객체 바인딩, 쿼리 스트링의 또는 Body의 key1=value 가 Java 객체의 field=value로 | JSON => Java Object |
| content-type | applicaiton/x-www-form-urlencoded | application/x-www-form-urlencoded, multipart/form-data | application/json , application/xml 등 |
'WEB' 카테고리의 다른 글
| [CSS] 중앙 정렬할 때 height를 100vh로 지정하는 이유 (3) | 2025.08.04 |
|---|
Comments