@ModelAttribute: DTO 생성 및 Setter 기반 프로퍼티 주입
상위 맥락
02. 데이터 바인딩 전략 < 02. 요청 파라미터 바인딩 < 02. Spring MVC2 핵심 기술과 설계 < MVC < Spring < Web
핵심 정리
@ModelAttribute는 여러 요청 파라미터를 하나의 DTO 객체로 묶어 바인딩하는 전략입니다. 자료에서는 객체 생성, 프로퍼티 주입, Model 자동 등록이 하나의 파이프라인으로 이어진다고 설명합니다.
@RequestParam이 낱개 값을 받는 방식이라면, @ModelAttribute는 회원가입, 검색 조건, 수정 폼처럼 여러 필드를 하나의 객체로 응집시키는 방식입니다.
내부 처리 흐름
- 스프링이 DTO 객체를 생성합니다.
- 요청 파라미터 이름과 DTO 프로퍼티 이름을 비교합니다.
- setter 메서드를 호출해 값을 주입합니다.
- 바인딩이 완료된 객체를 컨트롤러 메서드 인자로 전달합니다.
- 필요하면 해당 객체가 Model에도 자동 등록됩니다.
자료에서는 기본 생성자와 setter 기반 주입이 전통적인 방식이라고 설명합니다. 기본 생성자가 없고 유일한 생성자가 있는 경우에는 생성자 파라미터를 통해 바인딩할 수 있으며, record를 활용한 불변 객체 바인딩도 언급됩니다.
장점
- 파라미터가 많은 요청을 DTO 하나로 정리할 수 있습니다.
- 컨트롤러 메서드 시그니처가 간결해집니다.
- 바인딩된 객체가 Model에도 자동 등록될 수 있어 뷰 렌더링과 연결됩니다.
주의할 점
DTO에 기본 생성자나 setter가 없으면 전통적인 @ModelAttribute 바인딩이 실패하거나 값이 들어가지 않을 수 있습니다. 자료에서는 JavaBeans 규약을 지키거나, 생성자 기반 또는 record 방식으로 설계를 명확히 해야 한다고 설명합니다.
한 문장 요약
@ModelAttribute는 여러 요청 파라미터를 DTO 객체로 자동 조립하고, setter 기반 프로퍼티 주입과 Model 자동 등록까지 연결하는 객체 단위 바인딩 전략입니다.
핵심 연결
@RequestParam와 함께 읽으면 좋습니다.