Spring MVC 작동원리

-
클라이언트 요청
- 사용자가 브라우저 또는 다른 HTTP 클라이언트에서 URL을 입력하거나 API 요청을 전송하면, 이 요청이 서버로 전달됩니다.
-
디스패처 서블릿(DispatcherServlet)
- spring MVC 애플리케이션의 핵심 구성 요소인 DispatcherServlet이 모든 요청을 받아들이는 프론트 컨트롤러 역할을 합니다.
- 클라이언트의 요청이 들어오면, DispatcherServlet이 요청을 처리하는 첫 번째 진입점입니다.
- 서블릿 컨테이너안에 서블릿이 있고 DispatcherServlet은 서블릿의 종류 중 하나이다. 서블릿 컨테이너는 tomcat이나 jetty가 될 수 있다.
-
핸들러 매핑(Handler Mapping)
- DispatcherServlet은 요청을 처리할 핸들러를 찾기 위해 HandlerMapping을 사용합니다.
- @Controller 또는 @RestController로 정의된 클래스에서 URL 매핑과 일치하는 메소드를 찾아냅니다. 이 때, @RequestMapping, @GetMapping, @PostMapping 등의 어노테이션을 사용하여 URL과 HTTP 메서드에 따라 핸들러를 결정합니다.
-
핸들러 어댑터(Handler Adapter)
- 핸들러를 찾으면, HandlerAdapter가 요청을 해당 핸들러(컨트롤러 메서드)로 전달하여 실행합니다.
- HandlerAdapter는 핸들러가 다양한 유형일 수 있기 때문에, 각 핸들러를 적절하게 처리할 수 있는 어댑터 역할을 합니다.
-
컨트롤러에서 비즈니스 로직 처리
- 컨트롤러(Controller) 메서드는 비즈니스 로직을 처리하고, 결과 데이터를 생성합니다.
- 이때 데이터를 가공하거나, 서비스 계층을 호출하여 데이터를 처리합니다.
-
뷰 리졸버(View Resolver) 또는 HTTP 응답 생성
- 컨트롤러에서 반환된 값은 뷰(View)나 응답(Response)로 변환됩니다.
- 만약 @RestController 또는 @ResponseBody를 사용했다면, 반환된 데이터는 JSON 또는 XML로 직렬화되어 응답 본문에 포함됩니다.
- 일반적인 @Controller는 JSP나 Thymeleaf와 같은 템플릿 엔진을 통해 HTML 뷰로 변환됩니다.
- 이 때 ViewResolver가 반환된 논리적인 뷰 이름을 실제 뷰 파일로 변환합니다.
-
뷰 렌더링 또는 응답 생성
- 뷰(View)를 사용할 경우, JSP, Thymeleaf 등의 템플릿 엔진이 최종 HTML 페이지를 생성합니다.
- API 응답일 경우, @ResponseBody 또는 @RestController가 JSON 형식으로 응답을 만들어 반환합니다.
-
HTTP 응답 반환
- 최종적으로 렌더링된 HTML 또는 JSON 응답이 DispatcherServlet을 거쳐 클라이언트에게 HTTP 응답으로 전달됩니다.
Tomcat
스프링은 Tomcat을 사용한다.
spring mvc는 외장 tomcat, spring boot는 내장 tomcat을 사용한다.
이 둘의 차이점은 뭐가 있을까?
운영 환경
-
Spring MVC의 외장 Tomcat:
- 외장 Tomcat 서버는 대규모 애플리케이션 서버 환경에 적합합니다. 서버 설정을 세부적으로 관리할 수 있으며, 여러 애플리케이션을 같은 서버에서 동시에 구동할 수 있습니다.
- 운영 중인 여러 애플리케이션을 관리하고 유지보수하는 데 용이합니다.
-
Spring Boot의 내장 Tomcat:
- 내장 Tomcat은 마이크로서비스 또는 단일 애플리케이션 배포에 적합합니다. 각 애플리케이션이 독립적으로 실행되며, 개별 애플리케이션이 자체 서버를 구동하므로 간편하게 운영할 수 있습니다.
- 빠른 개발, 배포, 독립적인 서비스 운영에 적합합니다.