반응형
Model, ModelAndView, ModelMap의 차이점 그리고 @ModelAttribute에 대해서 알아보자
📌 서론
스프링 프레임워크에서는 컨트롤러(Controller)에서 뷰(View)로 데이터를 전달하는 여러 가지 방법이 있다. 이번 포스트에서는 이러한 방법 중에서 스프링 MVC에서 사용되는 Model, ModelMap, ModelAndView의 사용에 대해 좀 더 상세하게 설명하도록 한다.
1. 스프링 부트의 모듈 이해하기
Model
- Model은 스프링 MVC에서 뷰 렌더링에 사용되는 데이터를 컨트롤러로부터 뷰로 전달하는 역할을 하는 기본 인터페이스다. 컨트롤러에서 Model 객체에 데이터를 추가하면, 이 데이터는 뷰로 전달되어 활용될 수 있다. Model에 데이터를 추가하고 싶다면, 'addAttribute' 메서드를 사용하면 된다. 예를 들어, 'model.addAttribute("message", "Hello, World!");' 처럼 사용할 수 있다. 또, 속성을 가진 맵을 Model 인스턴스와 합칠 수도 있다.
Model은 다음과 같이 사용할 수 있다.
@GetMapping("/showViewPage")
public String passParametersWithModel(Model model) {
Map<String, String> map = new HashMap<>();
map.put("spring", "mvc");
model.addAttribute("message", "Baeldung");
model.mergeAttributes(map);
return "view/viewPage";
}
ModelAndView
- ModelAndView는 스프링 MVC에서 뷰에 전달할 값을 포함하고, 어떤 뷰를 사용할지도 함께 지정할 수 있는 편리한 인터페이스다. 컨트롤러에서 ModelAndView 객체를 만들고 여기에 데이터와 뷰 이름을 설정한 다음 반환하면, 스프링 MVC가 이 정보를 사용해 뷰를 렌더링한다. 이 방식은 Model과 View를 한 번에 처리할 수 있어서 편리하다.
ModelAndView는 다음과 같이 사용할 수 있다.
@GetMapping("/goToViewPage")
public ModelAndView passParametersWithModelAndView() {
ModelAndView modelAndView = new ModelAndView("view/viewPage");
modelAndView.addObject("message", "Baeldung");
return modelAndView;
}
ModelMap
- ModelMap은 Model 인터페이스를 구현한 클래스로, 맵과 유사한 API를 제공한다. ModelMap을 사용하면 뷰 렌더링에 필요한 값을 전달하는데 사용되며, addAttribute 메서드를 통해 데이터를 추가할 수 있다. ModelMap의 장점은 값을 컬렉션으로 전달하고, 이들을 마치 맵 내에 있는 것처럼 처리할 수 있다는 것이다.
ModelMap은 다음과 같이 사용할 수 있다.
@GetMapping("/printViewPage")
public String passParametersWithModelMap(ModelMap map) {
map.addAttribute("welcomeMessage", "welcome");
map.addAttribute("message", "Baeldung");
return "view/viewPage";
}
2. 이 셋중에 어떤것을 선택해서 사용하는것이 좋을까?
Model, ModelAndView, ModelMap은 모두 스프링 MVC에서 뷰에 데이터를 전달하는 방법이지만, 각각의 사용 방법과 적용 상황에 따라 적절한 것을 선택할 수 있다.
Model과 ModelMap
- 이들은 단순히 데이터를 전달할 때 유용하다. Model은 컨트롤러에서 뷰로 데이터를 전달하는 가장 기본적인 방법이고, ModelMap은 맵과 유사한 API를 제공하여 데이터를 좀 더 유연하게 관리할 수 있다.
ModelAndView
- 뷰 이름과 데이터를 함께 전달해야 할 때 효과적이다. ModelAndView 객체를 생성하여 뷰 이름과 데이터를 설정한 후 반환하면, 스프링 MVC가 이를 이용해 뷰를 렌더링한다.
@ModelAttribute
- HTTP 요청 파라미터를 객체에 바인딩하거나 특정 메소드의 반환값을 모델에 추가하고 싶을 때 사용하면 좋다. 이 어노테이션은 메소드 파라미터나 반환값을 자동으로 모델에 추가해 준다.
3. 실용적인 사용 사례와 최적의 상황
Model: 간단한 데이터 전달
- Model은 컨트롤러와 뷰 사이의 데이터 전달을 위한 간단하고 직관적인 방법을 제공한다. REST API에서 클라이언트에게 JSON 데이터를 전달할 때 Model을 사용하면, 컨트롤러에서 생성된 데이터를 자동으로 JSON 형태로 변환하여 응답으로 전송할 수 있다. 이 방식은 데이터 구조가 단순하고, 뷰 로직이 복잡하지 않은 경우에 적합하다.
ModelAndView: 뷰와 데이터를 함께 전달
- ModelAndView는 뷰 이름과 함께 모델 데이터를 한 번에 처리할 수 있어서, 뷰와 데이터가 밀접하게 연관된 경우에 유용하다. 특히, 사용자 인터페이스 흐름이 중요한 웹 어플리케이션에서 페이지 리다이렉션과 동시에 특정 데이터를 전달해야 할 때 사용하면 좋다. 이를 통해 사용자에게 필요한 정보와 뷰를 동시에 제공할 수 있다.
ModelMap: 유연한 데이터 관리
- ModelMap은 맵과 유사한 API를 제공하여 데이터를 더 유연하게 관리할 수 있게 해준다. 예를 들어, 사용자별로 다른 데이터를 보여주는 대시보드나 동적으로 변하는 콘텐츠를 가진 웹 페이지를 구현할 때 유용하다. 이 방식을 사용하면 여러 소스에서 오는 데이터를 하나의 맵에 통합하고, 뷰에서 이를 효과적으로 활용할 수 있다.
반응형
'Spring 기초 > Spring 기초 지식' 카테고리의 다른 글
Spring: Maven과 Gradle의 차이 (0) | 2023.08.17 |
---|---|
SpringBoot: 인터셉터(interceptor)의 동작원리 (0) | 2023.08.13 |
Spring에서의 인스턴스 생성 비교: new 키워드 대 DI (0) | 2023.08.13 |
스프링에서의 데이터베이스 접근 방법: DAO, Mapper, 그리고 @Mapper 어노테이션 사용법 (0) | 2023.08.09 |
스프링에서 데이터 전달의 핵심: VO와 DTO의 이해 및 활용 (0) | 2023.08.09 |