-
Spring MVC 간단 정리프로그래밍 언어/Spring 2023. 11. 20. 13:53
MVC란 Model View Controller의 준말로 코드를 model, view, controller로 각각의 역할을 분리하는 디자인 패턴입니다.
여기서 디자인 패턴이란 효율적으로 소프트웨어를 개발하기위한 여러가지 방법들을 일컫습니다.
간단하게, Model은 데이터와 비지니스 로직을 담당하고,
View는 사용자와 상호작용하는 인터페이스를,
Controller는 Model과 View를 조정하고 제어하는 중간다리 역할을 합니다.
MVC패턴의 이점은 프로그램의 구성요소를 3가지로 분리함으로써 코드의 재사용성과 유지보수성을 높이고, 개발자들의
협력을 좀 더 용이하게 합니다. 그래서 현재까지 많은 개발자들과 회사들이 MVC패턴을 디자인 패턴으로 이용하고 있습니다.
그렇다면 Spring MVC는 무엇일까요?
Spring MVC의 사전적 정의는 Servlet API를 기반으로 구축된 웹프레임워크로, 처음부터 Spring Framework에 Spring Web MVC라는 이름으로 포함되어 있었으나, 사람들의 편의상 Spring MVC로 더 널리 알려졌습니다.
Spring MVC가 하는 일은 'DispatcherServlet이 중앙에서 HTTP 요청을 처리해주는데 이는 Front Controller 패턴으로 설계 되어있다.' 라고 정의되어 있습니다.
Spring MVC가 하는 일을 정확히 이해하려면 DispatcherServlet과 Front Controller패턴에 대한 이해가 필요합니다.
일단, Servlet을 먼저 설명드려야겠죠.
Servlet이란 자바를 사용하여 웹페이지를 동적으로 생성하는 서버 측 프로그램이라고 할 수 있습니다.
이 서버측 servlet이 Client의 HTTP 요청(request)을 받아 일련의 과정을 통해 Client에게 응답(response)합니다.
아래 그림을 통해 이해를 도와드리도록 하겠습니다.
순서대로 분석해봅시다.
1. 요청: Client가 서버에게 HTTP요청(API 요청이라고도 할수 있습니다.)을 보냅니다.
2. 객체생성: 서버의 Web Container는 HTTPSevletRequest, HTTPServletResponse 객체를 생성합니다. 이는 HTTP의 표준을 맞추는 객체입니다.
3. Servlet 분석: 들어온 요청을 알맞은 Servlet에게 보냅니다.
4. 찾은 Servlet: 해당 Servlet에서 Service메서드를 호출한 후, 적절한 비지니스 로직을 실행합니다.
5. 요청에 대한 로직 결과를 HTTPSevletResponse 객체에 담아 Client에 반환합니다.
6. 응답: Client가 응답을 받으면 Request, Response객체는 소멸합니다.
자. 여기까지가 Servlet의 역할과 동작과정입니다.
DispatcherServlet과 Front Controller에 대한 설명으로 넘어가기 전에 한가지 생각해봅시다.
Client의 모든 API요청을 Servlet의 동작 방식에 맞춰 코드를 구현한다면 어떻게 될까요?
수많은 API요청을 알맞은 Servlet에 보내려면 그만큼 무수히 많은 Servlet이 필요할 것입니다. 그리고 이는 별로 효율적이지 못합니다.
여기서 등장하는 개념이 바로 DispatcherServlet과 Front Controller 패턴입니다.
1. Client가 보낸 HTTP요청을 서버의 DispatcherServlet 객체가 분석합니다.
2. DispatcherServlet객체는 분석한 요청을 토대로 Handler Mapping을 통해 Controller에게 전달합니다.
3. Controller는 요청에 대한 로직 처리 결과(Model과 View에 대한 정보)를 다시 DispatcherServlet에 전단합니다.
4. DispatcherServlet은 로직 처리결과를 바탕으로 View를 구성하여 Client에게 응답을 반환합니다.
여기까지 Spring MVC 에 대한 간단 정리였습니다.
'프로그래밍 언어 > Spring' 카테고리의 다른 글
API 게이트 웨이에 대해 파헤치기 (0) 2024.08.06 정규 표현식 정리 (0) 2023.11.29 1대N, N대1, N대M 관계에 대해 알아보자 (1) 2023.11.20 (2023-11-08 TIL) IoC와 DI에 대하여 (0) 2023.11.08 (2023-11-07자 TIL) 3계층 아키텍쳐에 대해 알아보자 (0) 2023.11.07