본문 바로가기
카테고리 없음

Spring의 Model과 ModelAndView에 대하여

by Dodledd 2024. 7. 1.

오늘은 파이널 프로젝트 때 사용했던 기술중에 Model과 ModelAndView에 대해 알아보려고 한다.

 

왜 써야하는가?

우리는 클라이언트가 요청한 데이터를 MVC패턴에 의해 DB찍고 다시 controller로 값을 들고 온다.

그럼 우리가 controller에 있는 값을 .jsp페이지와 같은 클라이언트가 보는 View페이지를 그릴 때 필요한 값 보내야한다.

이 때 View 페이지로 보낼 수 있는 방법 중에 하나이다.

 

Model과 ModelAndView의 공통점

우선 둘 다 데이터를 담아서 view페이지로 보내주는 것이다.

그럼 뭐가 다를까?

Model과 ModelAndView의 차이점

간단한 Controller의 login 메서드를 보면 이해가 빠르다.

ModelAndView

@RequestMapping("login.me") //로그인
public ModelAndView loginMember(Member m, @RequestParam(value="recentLink", defaultValue="/") String recentLink, ModelAndView mv, HttpSession session, String saveId, HttpServletResponse response) {
    Member loginUser = memberService.loginMember(m);	
    if (loginUser == null) { // 아이디가 없는 경우
        mv.addObject("errorMessage", "일치하는 아이디를 찾을 수 없습니다.");
        mv.setViewName("member/login");

    }
    return mv;
}

ModelAndView를 mv로 선언하고 mv.addObject로 키, 값에 해당하는 데이터를 담아줬고

mv.setViewName으로 우리가 가야할 곳의 페이지를 선언해줬다.

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

 

페이지 명이 member/login인 이유는 spring을 사용하는 사람들은 알것이라고 생각한다.

(prefix와 suffix)

위와 같이 ModelAndView는 데이터와 우리가 가야할 주소까지 정해줄 수 있는 반면

Model

public String loadAlarm(@RequestParam("userNo") int userNo, Model model) {

    ArrayList<String> list = alarmService.loadAlarm(userNo);
    model.addAttribute("list", list);

    return "seller/customerInquerySendAlarm";
}

Model은 medel.addAtrribute로 데이터값만 담아줄 수 있다.

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

 

 

차이점은 이정도이다.

하지만 현재 개발 트렌드에서는 Spring MVC가 @Controller 어노테이션을 지원한 이후로 ModelAndView는 잘 사용되지 않으며 ModelAndView를 그대로 반환하는 것은 구식이라고 하는 것을 StackOverFlow에서 볼 수 있다.

https://stackoverflow.com/questions/7383622/spring-mvc-controllers-return-type