MVC패턴

mingggkeee·2022년 4월 19일
0

MVC(Model-View-Controller) Pattern

  • 어플리케이션의 확장을 위해 Model, View, Controller 세가지 영역으로 분리
  • 컴포넌트의 변경이 다른 영역 컴포넌트에 영향을 미치지 않는다.(유지보수성)
  • 컴포턴트 간의 결합성이 낮아 프로그램 수정이 용이(확장성)

Model

  • 어플리케이션 상태의 캡슐화
  • 상태 쿼리에 대한 응답
  • 어플리케이션의 기능 표현
  • 변경을 View에 통지

View

  • 모델을 화면에 시각적으로 표현
  • 모델에게 업데이트 요청
  • 사용자의 입력을 Controller에 전달
  • Controller가 View를 선택하도록 허용

Controller

  • 어플리케이션의 행위를 정의
  • 사용자 액션을 모델 업데이트와 매핑
  • 응답에 대한 View 선택

Spring MVC 구성요소

  • DispatcherServlet(Front Controller)
    • 모든 클라이언트의 요청을 전달받음
    • Controller에게 클라이언트의 요청을 전달하고, Controller가 리턴한 결과값을 View에게 전달하여 알맞는 응답 생성
  • HandlerMapping
    • 클라이언트의 요청 URL을 어떤 Controller가 처리할지를 결정
    • URL과 요청 정보를 기준으로 어떤 핸들러 객체를 사용할지 결정하는 객체이며, DispatcherServlet은 하나 이상의 핸들러 매핑을 가질 수 있음
  • Controller
    • 클라이언트의 요청을 처리한 뒤, Model을 호출하고 그 결과를 DispatcherServlet에 알려준다.
  • ModelAndView
    • Controller가 처리한 데이터 및 화면에 대한 정보를 보유한 객체
  • ViewResolver
    • Controller가 리턴한 뷰 이름을 기반으로 Controller의 처리 결과를 보여줄 View를 결정
  • View
    • Controller의 처리결과를 보여줄 응답화면을 생성

Spring MVC 요청 흐름도

Spring MVC 구현

  1. web.xml에 DispatcherServlet 등록 및 Spring 설정파일 등록하기
  2. 설정파일에 HandlerMapping 설정
  3. Controller 구현 및 Context 설정 파일을 servlet-context.xml에 등록
  4. Controller와 JSP의 연결을 위해 View Resolver 설정
  5. JSP 코드 작성

Spring Web Application의 동작 원리

  1. 웹 어플리케이션이 실행되면 WAS에 의해 web.xml이 로딩
  2. web.xml에 등록되어 있는 ContextLoaderListener(Java Class)가 생성. ContextLoaderListener Class는 ServletContextListener interface를 구현하고 있으며, ApplicationContext를 생성하는 역할 수행
  3. 생성된 ContextLoaderListener는 root-context.xml을 로딩
  4. root-context.xml에 등록되어있는 Spring Container가 구동. 이 때 비즈니스로직(Service)에 대한 부분과 DAO, VO 객체들이 생성된다.
  5. Client로 부터 Request가 들어옴
  6. DispatcherServlet이 생성. DispatcherServlet은 FrontController의 역할 수행.
    Client로부터 요청 온 메시지를 분석하여 알맞은 PageController에게 전달하고 응답을 받아 요청에 따른 응답을 어떻게 할지 결정. 실질적인 작업은 PageController에서 이루어짐
  7. DispatcherServlet은 servlet-context.xml을 로딩
  8. 두번째 Spring container가 구동되며 응답에 맞는 PageController들이 동작. 이 때 첫번째 Spring Container가 구동되면서 생성된 DAO, VO, Service 클래스들과 협업하여 알맞은 작업을 처리
profile
만반잘부

0개의 댓글