Spring MVC란?
웹 계층에 서블릿(Servlet) API를 기반으로 클라이언트의 요청을 처리하는 모듈이 있는데 이를 스프링 웹 MVC(spring-web-mvc)
또는 스프링 MVC
라고 한다.
서블릿(Servlet)이란?
- 서블릿은 클라이언트의 요청을 처리하도록 특정 규약에 맞춰 Java 코드로 작성하는 클래스 파일이다.
- 아파치 톰캣(Apache Tomcat)은 이러한 서블릿들이 웹 애플리케이션으로 실행할 수 있도록 해주는 서블릿 컨테이너(Servlet Container) 중 하나이다.
- Spring MVC 내부에서는 서블릿을 기반으로 웹 애플리케이션을 동작하며, 스프링 부트는 기본적으로 아파치 톰캣이 내장되어 있다.
MVC란?
-
Model(모델)
- 처리한 작업의 결과 데이터를 클라이언트에게 응답을 돌려주어야 하는데, 이때 클라이언트에게 응답으로 돌려주는 작업의 처리 결과 데이터를 Model이라 한다. (데이터, Business Logic 포함)
- Business Logic : 요청 사항을 처리하기 위해 Java 코드로 구현한 것
- 모델의 규칙
- 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야만 함
- 뷰나 컨트롤러에 대해서 어떠한 정보도 알지 말아야 함
- 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야 함
-
View(뷰)
- Model을 이용하여 웹 브라우저와 같은 애플리케이션의 화면에 보이는 리소스(Resource)를 제공하는 역할을 한다.
- HTML 페이지 출력
- PDF, Excel 등의 문서 형태로 출력
- XML, JSON 등 특정 형식의 포맷으로 변환
- 뷰의 규칙
- 모델이 가지고 있는 정보를 따로 저장해서는 안됨
- 모델이나 컨트롤러와 같이 다른 구성 요소를 몰라야 함
- 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야 함
-
Controller(컨트롤러)
- 컨트롤러는 클라이언트 측의 요청을 직접적으로 전달받는 엔드포인트(Endpoint)로써 Model과 View의 중간에서 상호작용을 해주는 역할을 한다.
- 클라이언트 측의 요청을 전달받아 비즈니스 로직을 거친 후, Model 데이터가 만들어지면, 이 Model 데이터를 View로 전달하는 역할을 한다.
- 컨트롤러의 규칙
- 모델이냐 뷰에 대해서 알고 있어야 함
- 모델이나 뷰의 변경을 모니터링해야 함
Spring MVC 동작 과정
dispatcherServlet
이 FrontController
역할을 하면서 들어온 요청을 받는다.
- FrontController : 앞쪽에서 처리하는 컨트롤러를 두는 패턴
- 받은 요청을
Handler Mapping 전략
에 의해 controller를 조회
한다.
dispatcherServlet
이 HandlerAdapter
를 통해 controller를 선택
한다.
HandlerAdapter
가 httpRequest를 controller 함수 파라미터에 맞게 변환
한다.
controller
가 Service, Repository, Database를 통해 나온 결과 모델과 view name
을 만든다.
- DispatcherServlet이
ViewResolver에 view name과 모델 전달
ViewResolver가 특정한 view를 찾아준다.
(jsp view, json view, thymeleaf view 등)
- ViewResolver : Model이 View를 반환하는데 어떤 View를 만들어 낼지 처리
참고
https://ittrue.tistory.com/234
https://cocoon1787.tistory.com/733