@ModelAttribute: DTO 생성 및 Setter 기반 프로퍼티 주입

상위 맥락

02. 데이터 바인딩 전략 < 02. 요청 파라미터 바인딩 < 02. Spring MVC2 핵심 기술과 설계 < MVC < Spring < Web

핵심 정리

@ModelAttribute는 여러 요청 파라미터를 하나의 DTO 객체로 묶어 바인딩하는 전략입니다. 자료에서는 객체 생성, 프로퍼티 주입, Model 자동 등록이 하나의 파이프라인으로 이어진다고 설명합니다.

@RequestParam이 낱개 값을 받는 방식이라면, @ModelAttribute는 회원가입, 검색 조건, 수정 폼처럼 여러 필드를 하나의 객체로 응집시키는 방식입니다.

내부 처리 흐름

  1. 스프링이 DTO 객체를 생성합니다.
  2. 요청 파라미터 이름과 DTO 프로퍼티 이름을 비교합니다.
  3. setter 메서드를 호출해 값을 주입합니다.
  4. 바인딩이 완료된 객체를 컨트롤러 메서드 인자로 전달합니다.
  5. 필요하면 해당 객체가 Model에도 자동 등록됩니다.

자료에서는 기본 생성자와 setter 기반 주입이 전통적인 방식이라고 설명합니다. 기본 생성자가 없고 유일한 생성자가 있는 경우에는 생성자 파라미터를 통해 바인딩할 수 있으며, record를 활용한 불변 객체 바인딩도 언급됩니다.

장점

  • 파라미터가 많은 요청을 DTO 하나로 정리할 수 있습니다.
  • 컨트롤러 메서드 시그니처가 간결해집니다.
  • 바인딩된 객체가 Model에도 자동 등록될 수 있어 뷰 렌더링과 연결됩니다.

주의할 점

DTO에 기본 생성자나 setter가 없으면 전통적인 @ModelAttribute 바인딩이 실패하거나 값이 들어가지 않을 수 있습니다. 자료에서는 JavaBeans 규약을 지키거나, 생성자 기반 또는 record 방식으로 설계를 명확히 해야 한다고 설명합니다.

한 문장 요약

@ModelAttribute는 여러 요청 파라미터를 DTO 객체로 자동 조립하고, setter 기반 프로퍼티 주입과 Model 자동 등록까지 연결하는 객체 단위 바인딩 전략입니다.

핵심 연결

@RequestParam와 함께 읽으면 좋습니다.