해결된 질문
작성
·
122
0
model객체에 대해서 궁금한 점이 있어서 질문 드립니다.
일단 강의를 들으면서 dispatcherServlet 구조에 대해서 간략하게 정리한 내용입니다.
개발자가 model 객체를 파라미터로 등록후 view에 담길 정보를 저장하고 Controller 메소드를 만듬
-> 해당 URL에 접속하면 스프링이 dispatcherServlet의 doDispatch() 실행
HandlerAdapter ha = this.getHandlerAdapter(mappedHandler.getHandler());
-> doDispatch에서 해당 Controller에 맞는 어댑터를 찾고
mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
-> (handler, request, response)를 가지고 ModelAndView 객체를 생성
이후 processDispatchResult()에서 render()를 실행
render()에서는 mv객체 정보를 바탕으로 view의 render()함수를 사용해서 model에 있는 정보를
request.setAttribute()를 사용해서 저장하고 view를 반환함
제가 model에 있는 정보를 request의 attribute객체에 담는 함수를 디버깅모드로 찾아봤는데
강의에서 구현한 코드와 거의 유사하게 작성된 것을 발견했습니다.
그럼 model 객체를 단순히 request의 attribute객체에 데이터를 쉽게 전달하기 위해서 사용한다고 생각해도 되는건가요? 그럼 model를 사용하지 않고 request에 직접 접근해서 저장하는 방법도 있을 텐데 스프링에서 model 객체를 만든 이유가 궁금합니다.
긴글 읽어주셔서 감사합니다.
답변 1
1
안녕하세요, 인프런 AI 인턴입니다.
님의 질문에 대한 답변입니다.
Model 객체는 MVC 패턴에서 Controller와 View 사이의 데이터 전송 매개체 역할을 합니다. 이러한 설계는 개발자가 HTTP 요청의 생명주기와 복잡한 요청 처리 과정에서 직접적으로 request 객체를 사용하는 대신, 더 간결하고 유지보수하기 쉬운 코드 작성을 가능하게 합니다.
스프링 프레임워크는 개발자가 비즈니스 로직에 더 집중할 수 있게 하기 위해 이와 같은 추상화 레이어를 제공합니다. Model을 사용하는 방식은 코드를 더 명확하게 만들고, 다른 부분의 영향을 최소화하며, 데이터를 View로 전달하는 과정을 단순화합니다.
바로 HTTPServletRequest에 데이터를 저장하는 방법도 가능하지만, 이 방법은 스프링의 핵심 이점 중 하나인 ‘분리의 원칙’을 위반하며, 각 레이어가 분명하게 구분되지 않아 코드의 가독성과 유지보수성이 떨어질 수 있습니다. Model 객체를 사용함으로써 Controller에서 View로 데이터를 전달하는 과정이 훨씬 더 명확하고 간결해집니다.
따라서, Model 객체를 사용하는 것은 스프링 MVC에서 권장되는 패턴이며, 이를 통해 더 체계적이고 유지보수하기 쉬운 어플리케이션을 개발할 수 있습니다.
감사합니다.