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 MethodGET 요청이나 POST요청에서 사용GET, POSTPOST, PUT, PATCH 요청(body) 본문 처리
파라미터 바인딩 구분개별 파라미터 바인딩,
key1=value가 key1파라미터 변수값으로
DTO 객체 바인딩,
쿼리 스트링의 또는 Body의 key1=value 가 Java 객체의 field=value로
JSON => Java Object
content-typeapplicaiton/x-www-form-urlencodedapplication/x-www-form-urlencoded, multipart/form-dataapplication/json , application/xml 등

 

'WEB' 카테고리의 다른 글

[CSS] 중앙 정렬할 때 height를 100vh로 지정하는 이유  (3) 2025.08.04
Comments