1. MVC란?

MVC란 Model View Controller(모델 뷰 컨트롤러)의 약자로 애플리케이션을 세 가지의 역할로 구분한 소프트웨어 디자인 패턴, 개발 방법론이다.

 

Model : 애플리케이션의 데이터들을 의미하며, 사용자들에게 보이는 것에 대해 신경 쓰지 않으며 순수 public 함수로 이루어진다. 

View : 화면을 보여주는 역할로 모델의 데이터를 전달받아서 사용자에게 보여준다.

Controller : 화면의 처리 기능과 Model과 View를 연결시켜주는 역할을 한다.

 

사용자가 Controller를 조작하면 Controller는 Model을 통해 데이터를 가져오고 그 데이터를 바탕으로 View를 제어해 사용자에게 전달된다.

 

 

<출처 - https://commons.wikimedia.org/wiki/File:MVC-Process.svg>

 

2. Spring MVC 프로젝트

1) 프로젝트 구조

 

  • JAVA 파일 : JAVA로 작성된 Controller, Service, DAO 파일들이 위치해있다.

  • webapp : 웹 관련 디렉토리. html, css, js, jsp 파일과 웹 애플리케이션 구동에 필요한 xml 설정 파일들이 위치해있다.

  • spring : spring 설정 파일들이 위치해있다. (spring 컨테이너 생성 위함)

  • views : jsp 파일들이 위치해있다.

  • web.xml : 웹 설정 파일

  • pom.xml : Maven 설정 파일, Maven은 프로젝트 관리 도구로 필요한 라이브러리를 pom.xml에 정의하면 자동으로 라이브러리가 다운받아진다.

 

2) 프로젝트 구성 요소

구성요소 역할
DispatcherServlet Client의 요청을 전달 받아 요청에 맞는 handler로 요청을 보내고 Controller가 return한 결과값을 View에 전달하여 알맞은 응답을 생성한다.
HandlerMapping Client의 요청 url과 Controller를 매핑시킨다.
Controller Client의 요청을 처리한 뒤, 결과를 DispatcherServlet에 전달한다.
ModelAndView Controller가 처리한 결과 정보와 View 정보가 담겨있다.
ViewResolver Controller가 처리한 결과를 생성할 View를 결정한다.
View Controller의 처리 결과 화면을 설정한다.

 

3. Spring MVC 처리 과정

1) 일반적인 Spring MVC

<출처 - https://grokonez.com/spring-framework/spring-mvc-rest-difference-between-controller-and-restcontroller>

  • 클라이언트(Client)가 서버(Server)에 어떤 요청(Request)을 하면 Spring의 DispatcherServlet 클래스가 요청을 가로챈다. (web.xml에서 서블릿 매핑)

  • DispatcherServlet은 HandlerMapping정보를 참조하여 해당 요청을 처리하기 위한 Controller를 찾는다. (servlet-context.xml에서 @Controller 등록)

  • HandlerMappring에 매핑된 Controller가 존재하면 @RequestMapping을 통해 요청을 처리할 메서드로 이동한다.

  • Controller는 해당 요청을 처리할  Service를 받아 비즈니스 로직을 Service에 위임한다.

  • Service는 요청에 필요한 작업을 수행하고, 요청에 대해 DB에 접근이 필요하다면 DAO에 처리를 위임한다.

  • DAO는 mybatis 설정 등을 이용하여 SQL 쿼리를 날려 DB의 정보를 받아 Service에 다시 돌려준다.

  • Service는 모든 로직을 끝내고 결과를 Controller에게 넘긴다.

  • 결과를 받은 Controller는 반환해야 될 View 정보를 Model 객체에 담아 DispatcherServlet에게 전달한다.

  • DispatcherServlet은 ViewResolver에게 전달받은 View 정보를 전달한다.

  • ViewResolver는 응답할 View에 대한 JSP를 찾아 DispatcherServlet에게 전달한다.

  • DispatcherServlet은 응답할 View에게 Render를 지시하고 View는 응답 로직을 처리한다.

  • DispatcherServlet은 클라이언트에게 Rendering 된 View를 응답한다.

 

2) Restful Spring MVC

<출처 - https://grokonez.com/spring-framework/spring-mvc-rest-difference-between-controller-and-restcontroller>

  • 일반적인 Spring MVC 패턴과는 달리 Response를 Controller가 직접 처리한다.
  • HTTP Request에 의해 Controller가 호출되고 Service가 로직을 수행하고 결과를 Controller에 전달하는 과정은 위의 과정과 동일하다.
  • Controller는 return 값을 xml 또는 json 형태로 반환한다.
  • 요청에 대한 결과는 DispatcherServlet을 거치는 것이 아니라, Request가 왔던 곳으로 바로 Response 된다.

 

 

 

틀린 부분 있으면 댓글로 말씀해주세요. 수정하겠습니다!

+ Recent posts