..
@RequestBody vs @ModelAttribute 차이점
1. 개요 (Overview)
스프링 컨트롤러에서 클라이언트가 보낸 데이터를 객체로 받을 때 사용하는 두 어노테이션의 차이점을 정리합니다.
2. 핵심 차이 요약
| 구분 | @RequestBody | @ModelAttribute |
|---|---|---|
| 주 목적 | JSON/XML 데이터를 객체로 변환 | Form 데이터를 객체로 바인딩 |
| 미디어 타입 | application/json |
x-www-form-urlencoded |
| 동작 방식 | HttpMessageConverter 사용 |
리플렉션 및 Setter 사용 |
| Setter 필요 여부 | 불필요 | 필수 |
3. 동작 원리 상세
RequestBody
- MappingJacksonHttpMessageConverter 등이 동작하여 JSON 문자열을 파싱해 자바 객체로 변환합니다.
- 바인딩이 아닌 ‘변환’이므로, 필드에 직접 값을 꽂아 넣거나 생성자를 이용하므로 별도의 Setter가 없어도 동작합니다.
ModelAttribute
- HTTP 파라미터(Query String 등)를 하나하나 꺼내서 객체의 해당 필드에 바인딩합니다.
- 객체를 생성한 뒤 내부적으로 Setter를 호출하여 값을 할당하므로, 유효한 Setter 메소드가 반드시 존재해야 합니다.
최신 웹 환경에서 JSON 기반의 비동기 통신을 주로 한다면 @RequestBody를, 전통적인 HTML Form 제출이나 단순한 검색 조건을 처리한다면 @ModelAttribute를 사용하는 것이 적절합니다.