Welcome! Everything is fine.

[Spring] Spring Boot에서 URI가 컨트롤러에 매핑되는 흐름 본문

Spring

[Spring] Spring Boot에서 URI가 컨트롤러에 매핑되는 흐름

개발곰발 2025. 9. 19.
728x90

URI란?

  • URI(Uniform Resource Identifier) : 인터넷 상의 자원을 식별하는 통합 자원 식별자.
  • 자원의 위치뿐만 아니라 이름이나 식별 정보를 포함하여 자원을 고유하게 지칭하는 문자열이다.
  • URI는 URL, URN의 상위 개념이다.

URI와 URL의 차이

  • URL(Uniform Resource Locator) : URI의 한 형태로, 네트워크상에서 자원의 위치와 접근 방법(프로토콜, 도메인, 경로 등)을 명시하는 규약.
  • 모든 URL은 URI이지만, 모든 URI가 URL은 아니다.

Spring Boot에서 URI가 컨트롤러에 매핑되는 흐름

이제 Spring Boot에서 URI가 컨트롤러에 매핑되는 흐름을 살펴보자. DispatcherServlet의 동작 방식이라고 봐도 무방하다.

참고 자료로 본 블로그에 있던 DispatcherServlet의 처리 과정 그림을 차근 차근 이해하기 위해 직접 그려봤다.

 

 

1. 사용자(클라이언트)로부터 요청이 들어오면, 가장 먼저 DispatcherServlet이 받는다.

  • DispatcherServlet은 HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임하는 프론트 컨트롤러이다.

2. HandlerMapping이 요청 URI와 매핑된 컨트롤러를 찾아준다.

  • HandlerMapping은 @RequestMapping, @GetMapping 같은 어노테이션 정보를 기준으로 어떤 컨트롤러가 처리할 수 있는지 결정한다.

3. HandlerAdapter가 요청 파라미터를 바인딩하고, 선택된 컨트롤러 메서드를 호출한다.

  • HandlerAdapter는 어댑터 패턴 개념을 차용하여, DispatcherServlet이 컨트롤러의 구현 방식에 구애받지 않고 요청을 위임할 수 있도록 한다.

4. HandlerAdapter가 컨트롤러를 호출한다.

  • 선택된 HandlerAdapter가 실제 RestController 메서드를 실행한다.
  • 실행 전에 @PathVariable, @RequestBody 등의 요청 파라미터 바인딩이 이루어진다.

5. 컨트롤러가 응답 데이터를 반환한다. (ResponseEntity, DTO 등)

  • 비즈니스 로직을 수행하기 위해 Service 계층을 호출하고, 필요 시 Repository를 통해 DB에 접근한다.
  • 이 반환값을 HandlerAdapter가 받는다.

6. HandlerAdapter가 ResponseEntity를 처리한다.

  • @RestController가 붙은 컨트롤러 메서드의 반환값은 뷰가 아닌 응답 본문으로 처리되며, JSON/XML 같은 형식으로 변환할 때는 HttpMessageConverter가 직렬화를 수행한다.
  • 뷰 템플릿이라면 ViewResolver가 화면을 렌더링한다.

7. 최종적으로 가공된 응답 객체를 DispatcherServlet에 다시 전달한다.

 

8. DispatcherServlet은 응답을 HTTP 응답으로 변환하여 클라이언트에 반환한다.

 

 

[ 참고 자료 ]

더보기