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

gmldnjs0402님의 프로필 이미지
gmldnjs0402

작성한 질문수

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

Model 추가 - v3

view render 에 질문이 있습니다.

작성

·

636

1

[질문 내용]
강의 약 19분 00초에서 view.render()를 해줄 때 모델 객체도 같이 넘겨줘야한다 하셨는데... 모델 객체는 왜 같이 넘겨주어야 하나요?

이미 view는 어떤 페이지로 갈지 알고 있고, request 값은 createParamMap(request) 를 통해 넘어온 값을 재정의? 해주는걸로 생각하고 있는데, 모델객체가 왜 필요한지 잘 이해가 안갑니다.

답변 1

2

안녕하세요, gmldnjs0402 님. 공식 서포터즈 y2gcoder 입니다.

강의를 마저 진행하시다 보면 영한님의 깔끔한 설명으로 인해 더 이해가 쉬우실 것 같습니다. 제가 조심스럽게 설명을 드려보자면, 유연한 컨트롤러 구조를 위해 그렇습니다. 저희는 현재 MVC 프레임워크를 하나 직접 만들어보는 과정을 거치고 있습니다.

실제로 스프링 MVC을 사용해보셨으면 아시겠지만, 컨트롤러 클래스에서 받는 파라미터 타입과 return 타입은 매우 다양합니다. 요청 타입에서는 String 타입으로 받을 수도 있고, 자바 객체로 받을 수도 있고, ModelAndView로도 받을 수 있고, 또 나머지 다양한 객체 타입으로 받을 수 있습니다. 응답 또한 마찬가지 입니다. 저희는 컨트롤러를 개발할 때 아주 편리하게 사용할 수 있습니다.

이러한 유연한 구조는 MVC 패턴의 이름처럼 각 역할을 수행하는 객체를 나누었기 때문입니다. 아마 강의 초반에 보셨던 자료에서 Model 객체가 필요한 이유에 대해서 보셨을 것이라 생각합니다. Model 객체는 페이지에 같이 보낼 데이터를 담고 있는 객체 입니다. 이 Model 객체의 정보를 가지고 동적으로 페이지를 생성할 수 있게 됩니다.

또한 request 라는 서블릿 기술에 대한 의존성을 없애주기 때문에 프레임워크의 구조를 간단하게 만드는 효과가 있습니다. 만약 request 객체를 그대로 넘겨주도록 사용했다면 요청 객체의 기술, 타입에 따라 응답 처리를 해줘야 합니다. 그러면 컨트롤러 단에서 처리를 해줘야 할 것이고 컨트롤러 단에서 처리해줘야 할 코드가 많아집니다. Model이라는 객체를 따로 만들어주면 저희는 이제 Model이라는 객체에 정보를 넣어주기만 하면 컨트롤러 단에서는 그 다음 처리에 대해서는 신경쓰지 않아도 됩니다.

지금은 프레임워크를 직접 만들어보고 있는 입장에서 왜 빈 객체를 만들고 리턴해줘야 하는지 의문이 들 수 있다고 생각합니다. 다만 이렇게 프레임워크 입장에서 통일된 구조를 주면 사용하는 입장에서는 깊게 생각할 필요 없이 View 객체가 필요하면 View 혹은 뷰의 논리 이름만, 해당 페이지에 동적인 데이터가 필요하다면 Model 객체를 직접 만들어서 넣어주고 나면 그 다음 처리에 대해서는 신경쓸 필요가 없어지니 좀 더 간단한 개발이 가능해집니다. 저희가 MVC 프레임워크를 직접 만들고 있는 이유는 결국 스프링 MVC 를 잘 사용하기 위해서 배우는 것입니다. 아마 점점 프레임워크 버전이 올라가면서 컨트롤러 단의 코드가 어떻게 바뀌는지 보시면서 학습하신다면 더 유의미한 학습이 되실 거라 생각합니다 :)

감사합니다.

gmldnjs0402님의 프로필 이미지
gmldnjs0402

작성한 질문수

질문하기