MVC 란 Model-View-Controller의 약자로, 소프트웨어 디자인 패턴 중 하나 입니다.
MVC 패턴은 소프트웨어를 구성하는 요소들을 Model, View, Controller로 구분하여 각각의 역할을 분리합니다.
Model
- 데이터와 비즈니스 로직을 담당
- 데이터베이스와 연동하여 데이터를 저장하고 불러오는 등의 작업을 수행
View
- 사용자 인터페이스를 담당
- 사용자가 보는 화면과 버튼, 폼 등을 디자인하고 구현
Controller
- Model과 View 사이의 상호작용을 조정하고 제어
- 사용자의 입력을 받아 Model에 전달하고, Model의 결과를 바탕으로 View를 업데이트
Spring MVC
Spring MVC에 대한 자세한 설명은 상기 링크에서 자세히 확인할 수 있지만 쉽게 표현하면 "Spring에서 MVC 디자인 패턴을 적용하여 HTTP 요청을 효율적으로 처리하고 있다" 라고 이해하면 됩니다.
Spring MVC에 대한 공식문서 설명
The Spring Web model-view-controller (MVC) framework is designed around a DispatcherServlet that dispatches requests to handlers, with configurable handler mappings, view resolution, locale and theme resolution as well as support for uploading files. The default handler is based on the @Controller and
@RequestMapping annotations, offering a wide range of flexible handling methods. With the introduction of Spring 3.0, the @Controller mechanism also allows you to create RESTful Web sites and applications, through the @PathVariable annotation and other features.
스프링 웹 모델-뷰-컨트롤러(MVC) 프레임워크는 요청을 핸들러로 전달하는 DispatcherServlet을 중심으로 설계되어 있으며, 핸들러 매핑, 뷰 해상도, 로케일 및 테마 해상도, 파일 업로드 지원 등을 구성할 수 있습니다. 기본 핸들러는 @Controller 및 @RequestMapping 애너테이션을 기반으로 하며, 다양한 유연한 처리 방법을 제공합니다. 스프링 3.0의 도입으로 @Controller 메커니즘은 @PathVariable 애너테이션과 기타 기능을 통해 RESTful 웹사이트 및 애플리케이션을 생성할 수 있도록 지원합니다.
Spring MVC에 대해 자세히 이해하기 위해서는 몇 가지 개념에 대한 이해가 필요합니다. 바로 Servlet과 DispatcherServlet 입니다.
Servlet
자바 언어를 이용하여 웹 프로그램을 개발하기 위해 만든 표준 규약을 서블릿 규약이라고 하며, 이 규약에 따른 클래스(class)를 서블릿(servlet)이라고 합니다. 서블릿은 자바 언어로 구현되는 클래스 이기 때문에 자바 언어로 코드를 작성하고 바이트 코드로 컴파일하여 사용합니다. 내용이 복잡해보이지만 한 문장으로 줄여서 설명하자면 "클라이언트 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술" 을 말합니다.
Servlet 동작 방식
1. 사용자가 Client(브라우저)를 통해 서버에 HTTP Request 즉, API 요청을 합니다.
2. 요청을 받은 Servlet 컨테이너는 HttpServletRequest, HttpServletResponse 객체를 생성합니다.
3. 설정된 정보(web.xml)를 통해 어떠한 Servlet에 대한 요청인지 찾습니다.
4. 해당 Servlet에서 Service 메서드를 호출한 뒤 브라우저의 요청 Method에 따라 doGet 혹은 doPost 등의 메서드를 호출합니다.
5. 호출한 메서드들의 결과를 그대로 반환하거나 동적 페이지를 생성한 뒤 HttpServletResponse 객체에 응답을 담아 Client(브라우저)에 반환합니다.
6. 응답이 완료되면 생성한 HttpServletRequest, HttpServletResponse 객체를 소멸합니다.
Front Controller
모든 API 요청을 앞서 살펴본 서블릿의 동작 방식에 맞춰 코드를 구현한다면 무수히 많은 Servlet 클래스를 구현해야 합니다.
// 예시
http://localhost:8080/JSP/HelloServlet -> HelloServlet 클래스 실행
http://localhost:8080/JSP/AAA -> AAA 서블릿 클래스 실행
http://localhost:8080/JSP/BBB -> BBB 서블릿 클래스 실행
따라서 Spring은 DispatcherServlet을 사용하여 Front Controller 패턴 방식으로 API 요청을 효율적으로 처리하고 있습니다.
Front Controller 패턴 동작방식
1. Client(브라우저)에서 HTTP 요청이 들어오면 DispatchServlet 객체가 요청을 분석합니다.
2. DispatcherServlet 객체는 분석한 데이터를 토대로 Handler Mapping을 통해 Controller를 찾아 요청을 전달해 줍니다.
※ Handler Mapping에는 'API Path'와 'Controller' 메서드가 매칭되어 있음
3. Controller는 요청에 대한 처리를 완료 후 처리에 대한 결과 즉, 데이터(Model)와 View 정보를 DispatcherServlet에게 전달합니다.
4. DispatcherServlet은 ViewResolver를 통해 View에 Model을 적용하여 View를 Client에게 응답으로 전달합니다.
'Spring' 카테고리의 다른 글
[Spring] 정적 페이지와 동적 페이지 (2) | 2024.09.26 |
---|---|
[Spring] 3 Layer - Controller (0) | 2024.09.26 |
[Spring] Lombok 라이브러리란? (1) | 2024.09.25 |
[Spring] 테스트 코드 (0) | 2024.09.25 |
[Spring] IntelliJ Spring 프로젝트 세팅 (1) | 2024.09.25 |