Spring MVC

September 02, 2022

Spring_MVC

Table of Contents

MVC

MVC는 Model-View-Controller의 약자이며, 어플리케이션을 구성하는 요소를 역할에 따라 세 가지 모듈로 나누어 구분한 패턴이다. MVC의 핵심은 각 구성요소를 독립시킴으로써 각 팀으로 하여금 맡은 부분의 개발에만 따로 집중 할 수 있게하여 개발의 효율성을 높힐 뿐만 아니라, 개발 완료 후에도 유지보수성과 확장성을 보장한다.

  1. View에서 이벤트 수행
  2. Controller에서 수행할 메소드를 Model에 전송
  3. Model에서 메소드를 수행하고 결과물을 Controller에 반환
  4. Controller에서 반환받은 내용을 View로 변환
  5. View에서 이벤트 결과 확인

1. Model (모델)

어플리케이션의 데이터이며, 모든 데이터 정보를 가공하여 가지고 있는 컴포넌트이다.

  • 컨트롤러에서 수행할 내용을 받아 자바코드, SQL을 수행하고 결과물을 Controller로 반환한다.
  • 비즈니스 영역의 로직을 처리
  • 사용자가 이용하려는 모든 데이터를 가지고 있어야하며, View(뷰) 또는 Controller(컨트롤러)에 대해 어떠한 정보도 알 수 없어야 한다.

2. View (뷰)

시각적인 UI 요소를 지칭하는 용어이다.

  • 비즈니스 영역에 대한 프레젠테이션 뷰(즉, 사용자가 보게 될 화면, 대표적으로 JSP)를 담당
  • JSP화면에서 버튼을 누르거나 하는 이벤트를 수행하면 해당 정보가 Controller로 넘어가 메소드를 수행하고 난 뒤 결과물을 View로 가져와 수행한 내용을 확인하게 된다.

3. Controller (컨트롤러)

Model(모델)과 View(뷰)를 연결해주는 역할을 한다.

  • View에서 버튼 클릭 등의 이벤트를 수행했을 경우 Model에서 수행할 메소드와 파라미터를 보낸 뒤 Model에서 수행한 결과를 가져오면 그 내용을 View로 반환 하게 된다

4. Spring MVC

HandlerMapping

  • 요청을 직접 처리할 컨트롤러를 탐색한다.
  • 구체적인 mapping은 xml파일이나 java config 관련 어노테이션등을 통해 처리할 수 있다.

HandlerAdapter

  • 매핑된 컨트롤러의 실행을 요청한다.

Controller

  • 직접 요청을 처리하며, 처리 결과를 반환한다.
  • 결과가 반환되면 HandlerAdapter가 ModelAndView 객체로 변환되며, 여기에는 View Name과 같이 응답을 통해 보여줄 View에 대한 정보와 관련된 데이터가 포함되어 있다.

View Resolver

  • View Name을 확인한 후, 실제 컨트롤러부터 받은 로직 처리 결과를 반영할 View 파일(jsp)을 탐색한다.

View

  • 로직 처리 결과를 반영한 최종 화면을 생성한다.

MVC 패턴 동작 순서

  1. 클라이언트가 서버에 요청을 하면 front controller인 DispatcherServlet 클래스가 요청을 받는다.
  2. DispatcherServlet은 프로젝트 파일 내의 servlet-context.xml 파일의 @Controller 인자를 통해 등록한 요청 위임 컨트롤러를 찾아 메핑(mapping)된 컨트롤러가 존재하면 @RequestMapping을 통해 요청을 처리 할 메소드로 이동한다.
  3. 컨트롤러는 해당 요청을 처리한 Service(서비스)를 받아 비즈니스 로직을 서비스에게 위임한다.
  4. Service(서비스)는 요청에 필요한 작업을 수행하고, 요청에 대해 DB에 접근해야한다면 DAO에 요청하여 처리를 위임한다.
  5. DAO는 DB정보를 DTO를 통해 받아 서비스에게 전달한다
  6. Service는 전달받은 데이터를 컨트롤러에게 전달한다
  7. 컨트롤러는 Model(모델) 객체에게 요청에 맞는 View(뷰) 정보를 담아 DispatcherServlet에게 전송한다.
  8. DispatcherServlet은 ViewResolver에게 전달받은 View 정보를 전달한다.
  9. ViewResolver는 응답할 View에 대한 JSP를 찾아 DispatcherServlet에게 전달한다.
  10. DispatcherServlet은 응답할 뷰의 Render를 지시하고 뷰는 로직을 처리한다.
  11. DispatcherServlet은 클라이언트에게 Rending된 뷰를 응답하며 요청을 마친다.

5. 참고 자료


Written by @Beomgyu Kim

넥스트이노베이션의 기술, 문화, 뉴스, 행사 등 최신 소식 및 넥스트이노베이션이 겪은 다양한 경험을 공유합니다.