Intro
Python의 Django가 MTV(Model-Template-View) 패턴을 따르듯
Java 기반의 Spring Boot는 MVC(Model-View-Controller) 패턴을 따릅니다.
이전 글에서는 프로젝트 초기 세팅과 서버 첫 실행까지 다뤘습니다.
이번에는 본격적인 기능 구현에 앞서 Spring Boot의 핵심 구조인 MVC 패턴이 무엇인지, 어떤 원리로 동작하는지 가볍게 짚고 넘어가겠습니다.
MVC 패턴이란?
MVC는 Model–View–Controller의 약자로 애플리케이션을 세 가지 책임으로 분리해 구조화하는 디자인 패턴입니다.
- Model: 데이터와 비즈니스 로직을 담당합니다.
예: DB 테이블과 매핑되는 @Entity, Repository, 서비스 로직 등 - View: 사용자에게 보여지는 화면(UI)를 담당합니다.
Spring Boot에서는 Thymeleaf, Mustache, 혹은 API 응답(JSON) 자체가 View 역할을 하기도 합니다. - Controller: 사용자의 요청을 받아 적절한 Model을 호출하고, 처리된 결과를 View에 전달합니다.
즉 요청과 응답을 연결하는 중간 다리 역할을 합니다.
Spring Boot에서는 단지 @Controller 하나만 만들어도 사용자의 요청이 곧바로 처리됩니다.
하지만 그 내부에서는 다양한 컴포넌트들이 요청과 응답을 주고받으며 복잡한 과정을 자동으로 처리하고 있습니다.
이 구조를 정확히 이해하려면 먼저 Servlet이 무엇인지부터 알아야 합니다.
Servlet이란?
Servlet은 Java 기반의 웹 서버에서 클라이언트의 요청을 받아 처리하고
응답을 반환하는 자바 클래스입니다.
좀 더 정확히 말하자면,
“HTTP 요청과 응답을 처리하기 위한 Java 표준 API이며,
웹 서버(Tomcat 등)와 Java 애플리케이션 사이의 인터페이스 역할을 수행한다.”
원래 Servlet은 Java EE(현 Jakarta EE) 표준에서 정의된 개념입니다.
우리가 클래스를 하나 만들어 등록하면, 그 자체가 하나의 서블릿이 됩니다.
즉, Java 웹 애플리케이션의 기본 처리 단위라고 볼 수 있습니다.
Spring Boot도 결국 Servlet 위에서 동작합니다.
우리가 작성하는 @Controller 역시 결국 Servlet 위에서 작동하는 추상화된 구조인 셈이죠.
DispatcherServlet이란?
Spring Boot에는 메인 서블릿 클래스로 모든 HTTP 요청을 가장 먼저 처리하는 DispatcherServlet이 존재합니다.
이는 요청을 받아 적절한 컨트롤러에 전달하고 처리 결과를 다시 사용자에게 응답으로 전달하는 중앙 제어기입니다.
즉 Spring MVC의 흐름을 총괄하는 Front Controller라고 할 수 있습니다.
MVC는 어떤 흐름으로 요청을 처리할까?
이제 저희는 Servlet이 뭔지, Spring Boot 제공하는 메인 Servlet 클래스는 DispatcherServlet인걸 알았습니다.
이를 기반으로 위 그림을 참고하여 MVC가 어떤 흐름으로 요청을 처리하는지 정리해보겠습니다.
- DispatcherServlet: 요청을 받아 응답까지 전체 흐름을 조율하는 중앙 처리기
- HandlerMapping: 어떤 URL 요청을 어떤 컨트롤러가 처리할지 결정
- HandlerAdapter: 실제 컨트롤러 메소드를 호출해주는 역할
- ViewResolver: 컨트롤러의 결과를 보여줄 뷰(View)를 결정
요청 처리 순
- 클라이언트가 URL을 통해 요청을 보냅니다.
- DispatcherServlet이 요청을 받아, HandlerMapping을 통해 어느 컨트롤러가 처리할지 찾습니다.
- DispatcherServlet은 HandlerAdapter에게 실제 요청 처리를 맡깁니다.
- HandlerAdapter는 해당 Controller를 호출해 요청을 전달합니다.
- Controller는 비즈니스 로직을 처리한 뒤, 반환할 View 이름을 반환합니다.
- DispatcherServlet은 ViewResolver를 통해 실제 View 파일을 찾습니다.
- View에 전달할 데이터를 Model에 담아 함께 전달합니다.
- 최종적으로 View가 사용자에게 **응답(Response)**으로 반환됩니다.
Spring Boot에서 요청을 처리하는 MVC 흐름은 겉으로는 간단해 보이지만,
내부적으로는 Servlet기반의 구조 위에서 DispatcherServlet이 중심이 되어 다양한 컴포넌트와 협력하여 작동합니다.
이 흐름을 이해하면 단순히 @Controller에 @GetMapping을 붙이는 이유가 아닌
왜 그런 설계를 했는지, 우리가 어디에 어떤 책임을 가져야 하는지에 대한 깊이를 가지게 됩니다.
'웹 프로그래밍 > Spring Boot' 카테고리의 다른 글
[Spring Boot] CRUD 간단 구현 (2) | 2025.05.13 |
---|---|
[Spring Boot] 기본적인 폴더 구조와 domain을 선택한 이유 (0) | 2025.05.08 |
[Spring Boot] 시작하기 - 환경 세팅 (0) | 2025.05.06 |