Spring MVC를 사용하다 보면 @ModelAttribute 어노테이션을 자주 접하게 됩니다. 하지만 이 어노테이션의 정확한 역할과 활용법을 제대로 이해하지 못한 채 사용하는 경우도 많습니다. 이번 글에서는 @ModelAttribute가 무엇인지, 언제 사용하는지, 그리고 어떤 장점이 있는지 자세히 알아보겠습니다.
@ModelAttribute란?
@ModelAttribute는 Spring MVC에서 모델 데이터를 바인딩하고 초기화하는 데 사용되는 어노테이션입니다. 주로 컨트롤러의 메서드 파라미터나 메서드 자체에 적용되어 다음과 같은 역할을 수행합니다.
- 요청 데이터 바인딩: 클라이언트에서 전달된 요청 데이터를 자동으로 객체에 매핑합니다.
- 모델 데이터 추가: 뷰에서 사용할 수 있도록 모델에 데이터를 추가합니다.
- 폼 데이터 유지: 폼 데이터를 자동으로 바인딩하고 검증할 수 있도록 도와줍니다.
@ModelAttribute 사용법
1. 메서드 파라미터에 적용하기
컨트롤러 메서드의 파라미터에 @ModelAttribute를 사용하면 요청 데이터를 해당 객체에 자동으로 매핑할 수 있습니다.
@Controller
public class UserController {
@PostMapping("/register")
public String registerUser(@ModelAttribute User user) {
// user 객체는 요청 데이터를 자동으로 매핑받음
System.out.println("User: " + user);
return "success";
}
}
위 코드에서 User 객체는 클라이언트의 요청 파라미터 값을 자동으로 매핑받습니다.
2. 메서드에 적용하여 공통 모델 데이터 설정
@ModelAttribute를 컨트롤러의 특정 메서드에 적용하면, 반환되는 객체가 모든 뷰에서 사용될 수 있도록 모델에 자동 추가됩니다.
@Controller
public class GlobalController {
@ModelAttribute("commonData")
public String addCommonData() {
return "공통 데이터";
}
}
위 예제에서는 commonData라는 키로 "공통 데이터"가 모델에 자동 추가됩니다. 이렇게 하면 모든 뷰에서 commonData를 사용할 수 있습니다.
3. 기본 생성자 및 Setter 활용
@ModelAttribute를 사용하려면 바인딩할 객체에 기본 생성자와 Setter 메서드가 필요합니다.
public class User {
private String name;
private int age;
public User() {}
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
}
@ModelAttribute vs @RequestParam
@ModelAttribute는 객체 단위로 데이터를 바인딩하는 반면, @RequestParam은 단순한 요청 파라미터 값을 개별 변수에 매핑할 때 사용됩니다.
@PostMapping("/register")
public String registerUser(@RequestParam String name, @RequestParam int age) {
User user = new User();
user.setName(name);
user.setAge(age);
return "success";
}
위 코드와 같이 @RequestParam을 사용하면 객체가 아니라 개별 변수로 데이터를 받습니다.
@ModelAttribute의 장점
- 코드 간결화: 객체를 직접 바인딩하여 Setter를 따로 호출할 필요가 없습니다.
- 유지보수성 향상: 여러 개의 요청 파라미터를 객체 하나로 관리할 수 있어 가독성이 좋아집니다.
- 자동 검증과 바인딩: @Valid 및 BindingResult와 함께 사용하여 유효성 검사를 쉽게 적용할 수 있습니다.
@PostMapping("/register")
public String registerUser(@Valid @ModelAttribute User user, BindingResult result) {
if (result.hasErrors()) {
return "error";
}
return "success";
}
마무리
Spring MVC의 @ModelAttribute는 요청 데이터를 객체에 바인딩하고, 모델 데이터를 추가하는 강력한 기능을 제공합니다. 적절히 활용하면 코드의 가독성과 유지보수성이 향상되므로, 상황에 맞게 사용해보세요!
'Spring' 카테고리의 다른 글
서블릿(Servlet)의 생명주기(Lifecycle) (0) | 2025.02.20 |
---|---|
WebDataBinder (0) | 2025.02.20 |
Spring @RequestParam 완벽 가이드 (0) | 2025.02.20 |
메이븐(Maven)과 그래들(Gradle) 비교 (0) | 2025.02.19 |
1. Tomcat 설정 관련 (4) | 2025.01.20 |