
Spring은 MVC(Model-View-Controller) 아키텍처를 기반으로 동작하는 웹 프레임워크
→ 사용자의 요청을 처리하고 응답을 반환하는 과정을 구조적으로 관리 가능
Spring은 크게 두 가지 아키텍처 패턴이 있음.
MVC(Model-View-Controller) 아키텍처는 웹 애플리케이션에서 역할을 분리하여 관리하는 패턴
DispatcherServlet) 요청을 가로챔과거 Java EE 시절 (Servlet 기반)에는 각 URL마다 개별 Servlet을 등록해야 했습니다.
→ Spring에서는 단일 Servlet (DispatcherServlet)이 모든 요청을 처리하도록 개선되었습니다.
java는 거대 웹 어플리케이션 프로젝트를 위해 Java EE라는 Java 웹 표준 기술을 만들었다.
GET /hello → HelloGetServletPOST /hello → HelloPostServletDELETE /world → WorldDeleteServlet
Spring 에서는 Servlet 을 URL 마다 정의하지 않고, 단일 Serlvet 만을 사용
GET /hello → DispatcherServlet → HelloGetControllerPOST /hello → DispatcherServlet → HelloPostControllerDELETE /world → DispatcherServlet → WorldDeleteController즉, DispatcherServlet이 중앙에서 모든 요청을 받아 처리!
2-0. EC2 서버에서 Tomcat이 처음 구동될때 2개의 Container가 생성
Servlet Container (ServletContext) : Tomcat 이 처음 구동 시, 가장 먼저 ServletContext 생성
Spring Container (ApplicationContext) : 실제로는 2개의 계층으로 이뤄져있다.
Servlet WebApplicationContext : Servlet 에서만 사용하는 Bean - @Controller, HandlerMapping, ViewResolver 등
쉬운 이해를 위해 Presentation Layer : Spring MVC 로직에 해당하는 객체들
- 구 servlet-context.xml
Root WebApplicationContext : 인프라, 비니니스 공통 Bean - @Service, @Repository, @Compoentn, @Configuration 등
쉬운 이해를 위해 Business Layer, Data Access Layer
- 구 root-context.xml
2-1. 클라이언트 요청이 들어오면?
DispatcherServlet이 요청을 받음2-2. DispatcherServlet 역할
2-3. Controller가 요청을 처리하고 Model 혹은 View 이름(String) 반환
@RequestMapping(method = RequestMethod.GET, value = "/")
public String index(Model model) {
model.addAttribute("name", "Aaron");
model.addAttribute("age", 10);
return "index.html"; // View 이름 반환
}
2-4. ViewResolver가 View를 렌더링
2-5. 최종 HTML이 클라이언트에게 반환됨
| 구성 요소 | 역할 |
|---|---|
| DispatcherServlet | 모든 요청을 받아서 적절한 Controller로 전달 |
| HandlerMapping | URL과 매칭되는 Controller 검색 |
| HandlerAdapter | 적절한 Controller 실행 |
| Controller | 요청을 받아 필요한 데이터(Model)와 View 이름 반환 |
| Model | Controller에서 View로 전달할 데이터 저장 |
| ViewResolver | View 이름을 실제 템플릿 파일로 매핑 |
| View | Model 데이터를 기반으로 최종 HTML 생성 |
| 특징 | 기존 Servlet 방식 (Java EE) | Spring MVC 방식 |
|---|---|---|
| 요청 처리 | URL마다 개별 Servlet 등록 | 단일 DispatcherServlet으로 관리 |
| 유지보수 | Servlet이 많아질수록 복잡 | Controller 단위로 정리 가능 |
| 뷰 처리 | JSP와 Servlet에서 직접 데이터 처리 | ViewResolver를 통한 템플릿 관리 |
| 응답 방식 | HTML, JSON 모두 직접 처리 | @ResponseBody 또는 ViewResolver 활용 |
즉, Spring MVC는 구조적인 요청/응답 처리를 위해 Front Controller를 활용하여 효율성을 극대화함!