ModelAttribute vs RequestParam

백엔드&인프라 추종자·2025년 2월 18일

스프링 공부

목록 보기
1/35

Spring MVC에서 @ModelAttribute@RequestParam은 컨트롤러에서 요청 데이터를 바인딩하는 데 사용되지만, 사용 목적과 방식이 다릅니다. 각각의 차이점과 장단점을 정리해 보겠습니다.


1. @ModelAttribute vs @RequestParam 개념 비교

구분@ModelAttribute@RequestParam
용도객체의 필드에 요청 데이터를 바인딩단일 파라미터 값을 바인딩
적용 대상POJO 객체기본 데이터 타입 (String, int, boolean 등)
요청 데이터의 출처GET, POST 요청의 query parameter, form-dataGET 요청의 query parameter, POST 요청의 form-data
파라미터가 없을 경우객체의 필드는 기본값(null 또는 기본형 0)으로 설정required = true가 기본값이며, 파라미터가 없으면 예외 발생

2. @ModelAttribute 예제

@ModelAttribute는 요청 데이터를 객체에 바인딩하여 컨트롤러에서 처리할 수 있도록 합니다.

예제 코드

@Controller
@RequestMapping("/user")
public class UserController {

    @PostMapping("/register")
    public String registerUser(@ModelAttribute User user) {
        // user 객체에 폼 데이터 자동 매핑
        System.out.println(user.getName());
        System.out.println(user.getAge());
        return "success";
    }
}

요청 데이터 (POST 요청)

POST /user/register
Content-Type: application/x-www-form-urlencoded

name=John&age=25

결과

  • User 객체가 생성되고, name="John", age=25 값이 자동으로 매핑됨

장점

객체 단위로 데이터 바인딩이 가능하여 코드가 간결해짐
다양한 필드 값을 한 번에 처리 가능 (객체 내부에 포함된 필드도 자동 바인딩)
@InitBinder를 활용하여 커스텀 바인딩이 가능

단점

❌ 필요 없는 필드까지 매핑될 수 있어 보안상 주의가 필요
❌ 기본 생성자가 필요하며, Setter 메서드가 있어야 자동 바인딩이 가능
@RequestParam보다 속도가 약간 느릴 수 있음


3. @RequestParam 예제

@RequestParam단일 값을 요청 파라미터에서 추출하여 컨트롤러 메서드에서 사용할 수 있도록 합니다.

예제 코드

@Controller
@RequestMapping("/user")
public class UserController {

    @GetMapping("/info")
    public String getUserInfo(@RequestParam String name, @RequestParam int age) {
        // 개별 파라미터 값을 직접 받음
        System.out.println(name);
        System.out.println(age);
        return "user-info";
    }
}

요청 데이터 (GET 요청)

GET /user/info?name=John&age=25

결과

  • name = "John", age = 25로 컨트롤러 메서드의 개별 매개변수에 전달

장점

필요한 값만 받을 수 있어 보안 측면에서 더 유리
간단한 파라미터 처리에 적합
required=false 옵션을 사용하면 필수 여부를 선택할 수 있음

단점

❌ 많은 필드를 처리하려면 여러 개의 @RequestParam을 사용해야 하므로 코드가 지저분해질 수 있음
❌ 객체 단위로 처리할 수 없어 복잡한 요청 데이터 처리에는 부적합


4. @ModelAttribute vs @RequestParam 언제 사용할까?

상황추천 방식
여러 개의 필드를 포함한 객체 단위 데이터 처리@ModelAttribute
단순한 요청 파라미터 (예: id=1, name=John)@RequestParam
폼 데이터를 객체로 자동 매핑해야 하는 경우@ModelAttribute
특정 파라미터만 선택적으로 받고 싶은 경우@RequestParam

5. 결론

  • 단순한 요청 파라미터@RequestParam이 더 적합합니다.
  • 객체 단위로 요청을 처리해야 하는 경우에는 @ModelAttribute가 더 적절합니다.
  • 상황에 따라 두 가지를 적절히 혼합하여 사용하는 것이 좋습니다.
profile
AI 답변 글을 주로 올립니다.

0개의 댓글