LUMI_dev
Spring MVC #1. MVC 디자인 패턴/Servlet (서블릿)/Front Controller 본문
Spring MVC #1. MVC 디자인 패턴/Servlet (서블릿)/Front Controller
luminous_dev 2025. 1. 22. 21:57
1. MVC 디자인 패턴 (Model - View - Controller)
- Model : 데이터와 비즈니스 로직 담당 / 데이터베이스와 연동하여 데이터를 저장하고 불러오는 등 작업
- View : 사용자 인터페이스를 담당 / 사용자가 보는 화면과 버튼, 폼등을 디자인 및 구현
- Controller : Model, View 사이 상호작용 조정,제어 / 사용자의 입력을 Model에 전달, Model의 결과를 View에 업데이트
- 장점 : 소프트웨어 구성요소들을 분리하여 코드의 재사용성과 유지보수성 높임
2. Spring 공식 문서의 Spring MVC 설명
‘DispatcherServlet이 중앙에서 HTTP 요청을 처리해주는데 이는 Front Controller 패턴으로 설계되어있다’
= ‘Spring에서 MVC 디자인 패턴을 적용하여 HTTP 요청을 효율적으로 처리하고 있다’
그렇다면, DispatcherServlet은 무엇일까?
3. Servlet (서블릿)
: 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버 측 프로그램/ 사양
Q. 사용자가 (HTTP) API 요청 시 서버의 서블릿은 어떻게 동작하고 있을까?
1. 사용자 : Client(브라우저)를 통해 서버에 HTTP Request (=API 요청) 보냄
2. 요청을 받은 Servlet 컨테이너 : HttpServletRequest, HttpServletResponse 객체 생성
3. 설정된 정보를 통해 어떠한 Servlet에 대한 요청인지 찾음
4. 해당 Servlet에서 service 메서드를 호출 > 브라우저 요청 Method에 따라 doGet 혹은 doPost 등 메서드 호출
5. 호출한 메서드들의 결과를 그대로 반환 or 동적 페이지를 생성한 뒤 HttpServletResponse 객체에 응답을 담아 Client(브라우저)에 반환
6. 응답이 완료되면 생성한 HttpServletRequest, HttpServletResponse 객체 소멸
* HttpServletRequest, HttpServletResponse : 약속된 HTTP의 규격을 맞추면서 쉽게 HTTP에 담긴 데이터를 사용하기 위한 객체
4. Front Controller → Servlet 보완
서블릿을 사용하면 무수히 많은 서블릿 클래스를 구현해야 함
Spring은 DispatcherServlet을 사용하여 Front Controller 패턴 방식으로 API 요청 효율적으로 처리
Front Controller 패턴의 동작 과정
1. Client(브라우저)에서 HTTP 요청 들어오면 DispatcherServlet 객체가 요청을 분석함
2. DispatcherServlet, 분석 데이터 토대로 Handler mapping을 통해 Controller을 찾아 요청 전달
ex)
GET/api/hello | HelloController 의 hello() 함수 |
GET /user/login | UserController 의 login() 함수 |
GET /user/signup | UserController 의 signup() 함수 |
POST /user/signup | UserController 의 registerUser() 함수 |
Handler mapping 에는 API path (=URL) 와 Controller 메서드가 매칭
@RestController
public class HelloController {
@GetMapping("/api/hello")
public String hello() {
return "Hello World!";
}
}
이렇게 직접 Servlet을 구현하지 않아도 DispatcherServlet에 의해 간편하게 HTTP 요청을 처리할 수 있게 됨
Controller → [데이터(모델), view 정보 전달] → DispathcerServlet → [뷰에 모델 적용하여 응답] → Client
'스파르타 코딩 클럽 | 자바 심화 과정 > Spring Master (입문 주차)' 카테고리의 다른 글
IoC(제어의 역전)와 DI(의존성 주입) (0) | 2025.01.26 |
---|---|
Jackson이란? (0) | 2025.01.23 |
application.properties 및 포트 번호(server.port) 바꾸는 법 (0) | 2025.01.22 |
Lombok - #2. 사용방법 및 메모장 실습 예제 (0) | 2025.01.22 |
Lombok - #1. 정의 및 설치 (1) | 2025.01.22 |