MVC 란 무엇일까?
웹 애플리케이션 개발을 위한 MVC 패턴 기반의 프레임워크이다.
MVC는 모델, 뷰, 컨트롤러로 이루어져있다.
MVC 패턴을 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리할 수 있다.
모델(Model) - 데이터
- 데이터를 저장한다.
- 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 관리한다.
- DAO ( 데이터 접근 객체 ) 클래스 , Service 클래스에 해당된다.
ex ) 상품 목록, 주문 내역 등등
뷰 (View)
- 모델이 처리한 데이터를 가지고, 사용자에게 출력할 화면을 만든다.
- 생성된 화면은 브라우저가 출력한다.
ex ) .JSP 파일
컨트롤러 (Controller)
- 클라이언트의 요청을 받았을 때, 그 요청을 실제로 수행하는 모델을 호출한다.
- 클라이언트가 보낸 데이터를 가지고, 모델을 호출할 때 데이터를 가공한다.
- 모델이 데이터에 관련한 업무를 완료하면 그 데이터를 뷰에게 전달한다.
ex ) url 매핑 등
스프링 MVC 의 구조는 아래와 같다.
1. 클라이언트의 요청이 Dispatcher Servlet에게 전달된다.
- FrontController와 같은 역할을 하는 Dispatcher Servlet
- 요청에 대한 선처리 작업 진행
2. DispatcheServlet은 HandlerMapping을 사용하여 클라이언트의 요청을 처리할 Controller를 찾는다.
3. DispatcherServlet은 핸들러 어댑터에게 요청의 전달을 맡긴다.
4. 핸들러 어댑터는 해당 컨트롤러를 호출한다.
5. Controller는 클라이언트 요청 처리 결과와 View페이지 정보를 담은 ModelAndView 객체를 반환한다.
6. DispatcherServlet은 ViewResolver로부터 응답 결과를 생성할 View 객체를 구한다.
7. View는 클라이언트에게 전송할 응답을 생성한다
DispatcherServlet.doDispatch() 의 로직
protected void doDispatch(HttpServletRequest request,
HttpServletResponse response) throws Exception {
HttpServletRequest processedRequest = request;
HandlerExecutionChain mappedHandler = null;
ModelAndView mv = null;
// 1. 핸들러 조회
mappedHandler = getHandler(processedRequest);
if (mappedHandler == null) {
noHandlerFound(processedRequest, response);
return;
}
//2.핸들러 어댑터 조회-핸들러를 처리할 수 있는 어댑터
HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
/**
* 3. 핸들러 어댑터 실행
* -> 4. 핸들러 어댑터를 통해 핸들러 실행
* -> 5. ModelAndView 반환 mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
*/
mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);
}
private void processDispatchResult(HttpServletRequest request,
HttpServletResponse response,
HandlerExecutionChain mappedHandler,
ModelAndView mv, Exception exception) throws Exception {
// 뷰 렌더링 호출
render(mv, request, response);
}
protected void render(ModelAndView mv, HttpServletRequest request,
HttpServletResponse response) throws Exception {
View view;
String viewName = mv.getViewName(); //6. 뷰 리졸버를 통해서 뷰 찾기,7.View 반환
view = resolveViewName(viewName, mv.getModelInternal(), locale, request);
// 8. 뷰 렌더링
view.render(mv.getModelInternal(), request, response);
}
참고 : https://emongfactory.tistory.com/121
인프런 - 스프링MVC1편
'Knowledge > CS' 카테고리의 다른 글
[CS] 인터럽트란? (0) | 2022.12.22 |
---|---|
[CS] JVM 이란? (0) | 2022.12.17 |
[CS] 스케줄링 알고리즘 (0) | 2022.12.13 |
[CS] 시분할 시스템이란? (0) | 2022.12.12 |
[CS] Overriding 과 Overloading의 차이점 (0) | 2022.12.09 |
댓글