Spring

Spring @ModelAttribute 어노테이션 완벽 가이드

초코너무조코 2025. 2. 20. 11:34
728x90

 

Spring MVC를 사용하다 보면 @ModelAttribute 어노테이션을 자주 접하게 됩니다. 하지만 이 어노테이션의 정확한 역할과 활용법을 제대로 이해하지 못한 채 사용하는 경우도 많습니다. 이번 글에서는 @ModelAttribute가 무엇인지, 언제 사용하는지, 그리고 어떤 장점이 있는지 자세히 알아보겠습니다.

@ModelAttribute란?

@ModelAttribute는 Spring MVC에서 모델 데이터를 바인딩하고 초기화하는 데 사용되는 어노테이션입니다. 주로 컨트롤러의 메서드 파라미터나 메서드 자체에 적용되어 다음과 같은 역할을 수행합니다.

  1. 요청 데이터 바인딩: 클라이언트에서 전달된 요청 데이터를 자동으로 객체에 매핑합니다.
  2. 모델 데이터 추가: 뷰에서 사용할 수 있도록 모델에 데이터를 추가합니다.
  3. 폼 데이터 유지: 폼 데이터를 자동으로 바인딩하고 검증할 수 있도록 도와줍니다.

@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의 장점

  1. 코드 간결화: 객체를 직접 바인딩하여 Setter를 따로 호출할 필요가 없습니다.
  2. 유지보수성 향상: 여러 개의 요청 파라미터를 객체 하나로 관리할 수 있어 가독성이 좋아집니다.
  3. 자동 검증과 바인딩: @Valid 및 BindingResult와 함께 사용하여 유효성 검사를 쉽게 적용할 수 있습니다.
@PostMapping("/register")
public String registerUser(@Valid @ModelAttribute User user, BindingResult result) {
    if (result.hasErrors()) {
        return "error";
    }
    return "success";
}

마무리

Spring MVC의 @ModelAttribute는 요청 데이터를 객체에 바인딩하고, 모델 데이터를 추가하는 강력한 기능을 제공합니다. 적절히 활용하면 코드의 가독성과 유지보수성이 향상되므로, 상황에 맞게 사용해보세요!

728x90

'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