..

@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를 사용하는 것이 적절합니다.