T_era
Spring MVC 구조 및 동작 방식 본문
Spring은 MVC 패턴에 프론트 컨트롤러 패턴 및 어댑터 패턴이 적용된 구조를 채택하고 있다.
MVC 패턴 구조
요청 수신 시 Controller는 파라미터 정보를 확인하여 비즈니스 로직을 실행한다. 비즈니스 로직 수행 결과 데이터는 Model에 담겨 View로 전달된다. View는 Model의 데이터를 참조하여 화면을 렌더링한다.
실행 순서
- 클라이언트로부터 HTTP 요청(Request)을 수신한다.
- Handler 조회: Handler Mapping을 통해 요청 URL에 매핑된 Handler(Controller)를 조회한다.
- Handler를 처리할 Adapter 조회: Handler를 처리할 수 있는 Handler Adapter를 조회한다.
- Handler Adapter 실행 (handle): 적절한 어댑터가 존재한다면 Handler Adapter에게 요청을 위임한다.
- Handler 실행 (호출): Handler Adapter는 실제 Handler(Controller)를 호출하여 실행하고 결과를 반환받는다.
- Model And View 반환 (return): Handler Adapter는 Handler가 반환하는 정보를 ModelAndView 객체로 변환하여 반환한다.
- ViewResolver 호출 (알맞은 View 요청): View Resolver를 찾아 실행한다.
- View 반환: View Resolver는 View의 논리 이름을 물리 이름으로 변환하고 렌더링을 담당하는 View 객체를 반환한다.
- View 렌더링: View를 통해 화면을 렌더링한다.
요약
DispatcherServlet
- Spring MVC의 프론트 컨트롤러로서 Servlet의 한 종류이다. → Spring MVC의 핵심 기능이다.
- 클라이언트의 HTTP Request를 적절히 파싱하고 클라이언트에게 적절한 응답을 반환한다.
- 핸들러 목록 정보를 보유한다.
- 핸들러 어댑터 목록 정보를 보유한다.
HandlerAdapter
- 자신이 처리할 수 있는 Handler인지 확인하는 기능(Method)을 필요로 한다.
- 프론트 컨트롤러로부터 요청을 위임받았을 때 핸들러에게 요청을 지시하는 기능을 필요로 한다.
- 반환 시 Handler로부터 전달받은 결과를 적절한 응답 형태로 변환한다.
Handler
- 요청에 대한 실제 비즈니스 로직을 수행하는 기능을 필요로 한다.
Spring MVC의 주요 Interface
Spring MVC는 DispatcherServlet 코드의 직접적인 변경 없이 기능 변경 및 확장이 가능하다. 이는 기능 대부분이 Interface 형태로 설계되어 있기 때문이다. → 인터페이스를 구현(implements)하여 개발자가 정의한 클래스를 사용할 수 있다 (다형성).
- org.springframework.web.servlet.HandlerMapping
- org.springframework.web.servlet.HandlerAdapter
- org.springframework.web.servlet.ViewResolver
- org.springframework.web.servlet.View
ps)
Spring Framework의 복잡하고 내부적인 모든 구조를 상세히 파악할 필요는 없다.
이미 다수의 개발자 요구사항에 따라 다양한 인터페이스 구현체들이 존재한다.
그러나 전체적인 동작 방식을 이해하는 것은 문제 발생 시 원인 파악에 도움이 되며,
개발자가 구현하고자 하는 기능이 어떤 인터페이스를 확장해야 하는지 인지하는 데 필수적이다.
'Programing > Spring' 카테고리의 다른 글
| @RequestMapping 어노테이션 정리 (0) | 2025.05.06 |
|---|---|
| Spring 어노테이션 정리 (0) | 2025.05.06 |
| Spring Boot 로깅 및 Controller 어노테이션 요약 (0) | 2025.05.06 |
| Spring MVC View Resolver (1) | 2025.05.05 |
| Spring MVC Controller 구현 및 동작 방식 (0) | 2025.05.05 |