인프런 커뮤니티 질문&답변

스빈스빈별님의 프로필 이미지
스빈스빈별

작성한 질문수

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

Model과 @ModelAttribute에 대해 헷갈립니다

작성

·

219

0

안녕하세요! 너무 좋은 강의를 수강중입니다 ㅎㅎ 

다름이 아니라, MVC1까지만 수강한 상태에서 혼동이 생겨 질문합니다. 

@RequestMapping("/response-view-v2")
    public String responseViewV2(Model model){
        model.addAttribute("data","hello!");
        return "response/hello";
    }

Http 응답에서,  view를 리턴하는 과정에서 질문이 생겼습니다. 

이전의 controller method들의 경우, argument부분에 premitive type이 오면 @RequestParam이 생략된 것으로 인식되고, 객체가 있는 경우 @ModelAttribute가 생략된것으로 인식된다고 하셨습니다. 

그래서 MessageBody를 직접 가져오는 경우에서도, @ResponseBody를 생략하는 경우 @ModelAttribute가 생략된것으로 인식이 될 수 있으니 조심해야한다는 말이 있었습니다. 

1. 그런데 위의 코드의 경우, Model model이 들어오는데, 그럼 이것은 @ModelAttribute가 생략된 것으로 보는 것인가요?? 

2.  그런데 @ModelAttribute가 Method argument로 오는 경우에는, model로부터 argument를 받아와야 한다는 것을 명시하는 것으로 알고 있습니다.여기서 말하는 model이 위의 코드의 Argument로 오는org.springframework.ui.Model과 같은 것인가요? 

3. 

제가 찾아본 내용에의하면, @ModelAttribute가 method argument에 있는 경우, argument는 model로부터 얻어와야 하기 때문에, 만약 그것이 model에 존재하지 않았다면 먼저 인스턴스화하여 model에 추가하고, model에 존재한 때 부터는, argument의 필드를 매칭 네임에 따라 요청 parameters로부터 받아와야 한다고 했습니다. 

그런데 이 경우, 만약 Model model부분이 @ModelAttribute가 생략된 것으로 본다면, 어떻게 생각해야 할 지를 모르겠습니다. 

method argument에 Model이 온 경우에는 특별하게 @ModelAttribute가 생략된 것으로 보지 않아도 되는 걸까요? 

단순히, 렌더링할 때  Model에서 데이터를 가져와햐 하기 때문에, @ModelAttribute를 사용하는게 아닌 org.springframework.ui.Model 자체를 가져와서 , 뷰 렌더링에 필요한 데이터를 model에 세팅해 놓기 위함이라고 생각한다면 @ModelAttribute가 생략된 것으로 보지 않는게 나을 것만 같은데, 왜 그런것이 가능하게 해 두는 것인지도 잘 모르겠습니다. 

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 스빈스빈별님

Model model은 @ModelAttribute, @RequestBody 등과는 관계없는 객체입니다.

Model model은 특별하게 사용되는 파라미터입니다.

MVC에서 컨트롤러의 데이터를 View에 전달하기 위한 용도로 사용됩니다.

강의 앞에서 학습했듯이 원래는 ModelAndView 객체에 View에 넘길 데이터를 추가해야 합니다.

스프링에서는 이것을 좀 편리하게 파라미터로 받을 수 있게 지원해준다 생각하시면 됩니다.

감사합니다.

스빈스빈별님의 프로필 이미지
스빈스빈별

작성한 질문수

질문하기