Recent Posts
Recent Comments
Today
Total
관리 메뉴

Free Code

[Spring] ModelAndView 란? Model 과의 차이점 (Model, ModelAndView, ModelMap) 본문

카테고리 없음

[Spring] ModelAndView 란? Model 과의 차이점 (Model, ModelAndView, ModelMap)

reecoder 2024. 5. 4. 21:37

 

MVC (model - view -controller) 는 사용자 인터페이스, 데이터 및 논리제어를 구현하는데 널리 사용되는 소프트워에 디자인 패턴입니다. 소프트 웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있습니다.

모델 : 데이터와 비즈니스 로직을 관리합니다.

뷰: 레이아웃과 화면을 처리합니다. 사용자가 접하는 부분입니다.

컨트롤러 : 이름과같이 모델과 뷰로 명령을 전달하는 역할을 합니다.

 

 

예시를 들면, 사용자가 웹의 어떠한 페이지를 가기위해 클릭을 합니다. 그러면 그 요청이 컨트롤러를 타게 됩니다.

컨트롤러는 사용자의 입력을 받아들여 적절한 처리를 위해 모델을 조작합니다. 모델은 해당 웹 애플리케이션의 데이터와 비즈니스 로직을 관리합니다. 컨트롤러는 모델을 통해 사용자의 요청을 처리하고, 필요한 경우 추가적인 비즈니스 로직을 수행하는 서비스 계층을 호출할 수도 있습니다. 처리 결과는 다시 모델을 통해 업데이트되며, 이 업데이트된 데이터는 뷰에 전달됩니다. 뷰는 모델로부터 받은 데이터를 사용자가 이해할 수 있는 시각적 형태로 변환하여 화면에 표시합니다.

이러한  과정을 통해 사용자의 요청들이 MVC 패턴을 통해 수행됩니다.

 

 

 

Model, ModelAndView, ModelMap은 스프링 프레임워크에서 컨트롤러 -> 뷰로 데이터를 전달할때 사용되는 방법들입니다.

 

 


 

Model

 

Model은 데이터를 컨트롤러로부터 뷰로 전달, 뷰를 렌더링하는데 사용되는 기본 인터페이스 입니다. 

컨트롤러에서 데이터를 Model 객체에 추가하면 이 Model 객체는 뷰로 전달되어 뷰에서 사용될 수 있습니다.

 

Model에 데이터를 추가하는 방법은 addAttribute 메서드를 사용합니다.

 

예시)

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class MyController {
    @RequestMapping("/model.do")
    public String model(Model model) {
    
    	String str = "Model 객체를 사용하였습니다.";
        
        model.addAttribute("str", str);
        return "view/model"; // JSP or Thymeleaf 페이지 이름
    }
}

 

jsp 에서 str의 값을 확인할 수 있습니다.

<input type="text" value="${str }"/>

ModelAndView

 

ModelAndView는 Model과 마찬가지로 데이터를  뷰로 전달하는데 추가적으로 뷰페이지의 이름까지 같이 전달하는 객체입니다.

즉, 어떤 뷰를 사용할지도 함께 지정할 수 있는 인터페이스입니다. 이 인터페이스를 사용하면 스프링 MVC에 필요한 모든 정보를 한번에 반환 할 수 있습니다. ModelAndView 객체를 생성하고 이 객체에 데이터와 뷰 이름을 설정한 후 컨트롤러에 반환하면 스프링 MVC는 이 ModelAndView 객체를 사용하여 뷰를 렌더링 합니다.

 

예시)

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.stereotype.Controller;

@Controller
public class MyController {
    @RequestMapping("/modelAndView.do")
    public ModelAndView modelAndView() {
        
        String str = "ModelAndView 객체를 사용하였습니다.";
        
        ModelAndView modelAndView = new ModelAndView("view/ModelAndView"); // 뷰페이지저장
        modelAndView.addObject("str", str);
        
        // setViewName 을 사용해서 뷰페이지 저장
        // modelAndView.setViewName("view/ModelAndView");
        
        return modelAndView;
    }
}

 

Model과 같이 jsp에서 값을 확인할 수 있습니다.


ModelMap

 

ModelMap 은 Model 인터페이스를 구현한 클래스로 Map과 유사한 API를 제공합니다.

Model 인터페이스와 마찬가지로 ModelMap도 뷰를 렌더링하는데 사용되는 값을 전달하는데 사용됩니다.

그리고 Model과 마찬가지로 ModelMap에 데이터를 추가하려면 addAtrribute 메서드를 사용합니다.

ModelMap은 값을 컬렉션으로 저장하고, 이러한 값들을 마치 Map(key, value)처럼 처리할 수 있다는 장점을 가집니다.

 

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class MyController {
    @RequestMapping("/modelMap.do")
    public String modelMap (ModelMap modelMap) {
    
        modelMap.addAttribute("username", "User1"); // 키와 값 형태로 뷰에 전달.
        modelMap.addAttribute("email", "user1@example.com");
        
        return "view/modelMap"; // 뷰 이름 반환
    }
}

 

 

 

출처

https://developer.mozilla.org/ko/docs/Glossary/MVC

 

MVC - MDN Web Docs 용어 사전: 웹 용어 정의 | MDN

MVC (모델-뷰-컨트롤러) 는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴입니다. 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고

developer.mozilla.org