T_era

Spring MVC 구조 및 동작 방식 본문

Programing/Spring

Spring MVC 구조 및 동작 방식

블스뜸 2025. 5. 5. 16:34

Spring은 MVC 패턴에 프론트 컨트롤러 패턴 및 어댑터 패턴이 적용된 구조를 채택하고 있다.

MVC 패턴 구조

요청 수신 시 Controller는 파라미터 정보를 확인하여 비즈니스 로직을 실행한다. 비즈니스 로직 수행 결과 데이터는 Model에 담겨 View로 전달된다. View는 Model의 데이터를 참조하여 화면을 렌더링한다.

실행 순서

  1. 클라이언트로부터 HTTP 요청(Request)을 수신한다.
  2. Handler 조회: Handler Mapping을 통해 요청 URL에 매핑된 Handler(Controller)를 조회한다.
  3. Handler를 처리할 Adapter 조회: Handler를 처리할 수 있는 Handler Adapter를 조회한다.
  4. Handler Adapter 실행 (handle): 적절한 어댑터가 존재한다면 Handler Adapter에게 요청을 위임한다.
  5. Handler 실행 (호출): Handler Adapter는 실제 Handler(Controller)를 호출하여 실행하고 결과를 반환받는다.
  6. Model And View 반환 (return): Handler Adapter는 Handler가 반환하는 정보를 ModelAndView 객체로 변환하여 반환한다.
  7. ViewResolver 호출 (알맞은 View 요청): View Resolver를 찾아 실행한다.
  8. View 반환: View Resolver는 View의 논리 이름을 물리 이름으로 변환하고 렌더링을 담당하는 View 객체를 반환한다.
  9. 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의 복잡하고 내부적인 모든 구조를 상세히 파악할 필요는 없다.
이미 다수의 개발자 요구사항에 따라 다양한 인터페이스 구현체들이 존재한다.
그러나 전체적인 동작 방식을 이해하는 것은 문제 발생 시 원인 파악에 도움이 되며,
개발자가 구현하고자 하는 기능이 어떤 인터페이스를 확장해야 하는지 인지하는 데 필수적이다.