무작정 개발.Vlog

[Spring] Model, ModelAndView 차이점 (feat.ModelAndView를 지양하자)

by 무작정 개발
반응형

Spring framework, SpringBoot에서 사용하는 Model과 ModelAndView의 차이점에 대해 정리할 것이다.

스프링 개발을 진행할 때 Controller(컨트롤러)에서 파라미터를 모델로, 반환(return)은 View의 경로, 이름 등을 사용합니다.

필자 또한 Model, ModelAndView를 사용하였고, 국비 강의를 들을 때는 SpringBoot에서는 ModelAndView를 꼭 사용한다고 배웠습니다.

 

결론은?

들어가기 전에 앞서 과거에는 그랬으나 요즘 개발 트렌드에서는 ModelAndView를 잘 사용하지 않는다고 합니다.

  • ModelAndView는 @Controller 어노테이션을 사용하기 전부터 사용되었고, Spring MVC가 @Controller 어노테이션을 지원하기 시작한 후로 ModelAndView를 잘 사용하지 않는다고 합니다.
  • 또한 스택오버플로우(stackoverflow)에서도 ModelAndView를 직접 반환하는 것은 구식이라고 말합니다.

https://stackoverflow.com/questions/7383622/spring-mvc-controllers-return-type
https://stackoverflow.com/questions/7383622/spring-mvc-controllers-return-type
Spring - Model, ModelAndView의 차이점
Spring - Model, ModelAndView의 차이점


Model, ModelAndView의 차이점 및 예제

[ ModelAndView ] 예제

@Controller
@RequestMapping("/main")
public class BoardController {

    @RequestMapping(value = "/")
    public ModelAndView index() {
        ModelAndView mav = new ModelAndView();
        mav.addObject("name", "홍길동");
        mav.setViewName("main/index");

        return mav;
    }

    @RequestMapping(value = "/")
    public ModelAndView index() {
        ModelAndView mav = new ModelAndView();

        List<BoardDto> lists = boardService.getLists(start, end, searchKey, searchValue);
        mav.addObject("lists", list);
        mav.setViewName("main/index");

        return mav;
    }
}

[ Model ] 예제

@Controller
@RequestMapping("/main")
public class BoardController {

    @RequestMapping(value = "/")
    public String index(Model model) {
        model.addAttribute("name", "홍길동");

        return model;
    }

    @RequestMapping(value = "/")
    public String index(Model model) {
        model.addAttribute("lists", boardService.getLists(start, end, searchKey, searchValue));
        return "main/index";
    }
}

Model 방식(파라미터 방식)은 메서드에 파라미터로 넣어주고 String 형태로 반환한다.

  • Model에 값을 넣을 때 addAttribute() 사용

ModelAndVIew 방식(컴포넌트 방식)은 ModelAndView 객체를 생성해서 객체 형태로 반환한다.

  • 말 그대로 Model + View를 합쳐놓은 방식이다.
  • 값을 넣을 때는 addObject()를 사용하고, 값을 보낼 View를 세팅하는 것은 setViewName()을 사용한다.

Reference

인프런 QnA

 

ModelAndView와 Model 차이 - 인프런 | 질문 & 답변

안녕하세요! 김영한 강사님 늘 강의 잘 보고 있습니다@Model 와 @ModelAndView 차이가 궁금합니다.   addAttribute에 데이터를 담고 return으로 화면으로 이동하는 것과 setView를 지정해주고 addObject로 넘겨

www.inflearn.com

 

반응형

블로그의 정보

무작정 개발

무작정 개발

활동하기