HTTP 요청 전체 흐름

브라우저에서 HTTP 요청이 시작되어 Tomcat → Spring Security → Spring MVC → (JPA 또는 MyBatis) → DB → (Thymeleaf 또는 REST API) 를 거쳐 응답이 반환되기까지의 흐름입니다.

sequenceDiagram actor Browser participant Connector participant CoyoteAdapter participant FilterChain as ApplicationFilterChain participant SecurityProxy as DelegatingFilterProxy participant SecurityChain as FilterChainProxy participant WrapperValve as StandardWrapperValve participant FrameworkServlet participant DispatcherServlet participant HandlerMapping participant Interceptor as HandlerInterceptor participant ArgumentResolver as HandlerMethodArgumentResolver participant Controller participant Service participant JpaRepository participant EntityManager participant MyBatisMapper as MyBatis Mapper participant DB participant ReturnValueHandler as HandlerMethodReturnValueHandler participant MessageConverter as HttpMessageConverter participant ViewResolver participant ThymeleafView Browser->>Connector: HTTP Request Connector->>CoyoteAdapter: service() CoyoteAdapter->>FilterChain: doFilter() FilterChain->>SecurityProxy: doFilter() SecurityProxy->>SecurityChain: doFilter() SecurityChain->>SecurityChain: doFilterInternal()에서 체인 선택 SecurityChain-->>FilterChain: 인증/인가 통과 FilterChain->>WrapperValve: invoke() WrapperValve->>FrameworkServlet: service() FrameworkServlet->>DispatcherServlet: doDispatch() DispatcherServlet->>HandlerMapping: getHandler() HandlerMapping-->>DispatcherServlet: HandlerExecutionChain DispatcherServlet->>Interceptor: preHandle() DispatcherServlet->>ArgumentResolver: resolveArgument() (@RequestBody DTO 바인딩) ArgumentResolver-->>DispatcherServlet: 컨트롤러 파라미터 준비 완료 DispatcherServlet->>Controller: handle() Controller->>Service: 비즈니스 로직 호출 alt JPA로 조회 Service->>JpaRepository: findBy() JpaRepository->>EntityManager: createQuery() EntityManager->>DB: SQL 실행 DB-->>EntityManager: ResultSet EntityManager-->>JpaRepository: Entity 매핑 JpaRepository-->>Service: Entity 반환 else MyBatis로 조회 Service->>MyBatisMapper: selectBy...() MyBatisMapper->>DB: SQL 실행 DB-->>MyBatisMapper: ResultSet MyBatisMapper-->>Service: DTO/VO 반환 end Service-->>Controller: 결과 반환 alt Thymeleaf View 반환 Controller-->>DispatcherServlet: ModelAndView DispatcherServlet->>Interceptor: postHandle() DispatcherServlet->>ViewResolver: resolveViewName() ViewResolver-->>DispatcherServlet: ThymeleafView DispatcherServlet->>ThymeleafView: render(model) ThymeleafView->>ThymeleafView: TemplateEngine.process() ThymeleafView-->>DispatcherServlet: HTML DispatcherServlet-->>Browser: HTTP Response (HTML) else REST API 반환 Controller-->>DispatcherServlet: Object / ResponseEntity DispatcherServlet->>ReturnValueHandler: handleReturnValue() ReturnValueHandler->>MessageConverter: writeWithMessageConverters() MessageConverter->>MessageConverter: JSON 직렬화 MessageConverter-->>DispatcherServlet: Response Body 작성 완료 DispatcherServlet-->>Browser: HTTP Response (JSON) end
# 계층 호출자 수신자 메서드 / 설명 방향
1 Tomcat Browser Connector HTTP Request
2 Tomcat Connector CoyoteAdapter service()
3 Tomcat CoyoteAdapter ApplicationFilterChain doFilter()
4 Spring Security ApplicationFilterChain DelegatingFilterProxy doFilter()
5 Spring Security DelegatingFilterProxy FilterChainProxy doFilter()
6 Tomcat ApplicationFilterChain StandardWrapperValve invoke()
7 Spring MVC StandardWrapperValve FrameworkServlet service()
8 Spring MVC FrameworkServlet DispatcherServlet doDispatch()
9 Spring MVC DispatcherServlet HandlerMapping getHandler()
10 Spring MVC HandlerMapping DispatcherServlet HandlerExecutionChain 반환
11 Spring MVC DispatcherServlet HandlerInterceptor preHandle()
12 Spring MVC DispatcherServlet HandlerMethodArgumentResolver resolveArgument() / DTO 바인딩
12-1 Spring MVC AbstractJackson2HttpMessageConverter Jackson ObjectMapper readValue() → DTO 객체 생성
12-2 Spring Validation WebDataBinder SmartValidator validate() → @Valid 검증
12-3 Spring MVC DispatcherServlet ExceptionHandler MethodArgumentNotValidException 처리
13 Spring MVC DispatcherServlet Controller handle()
14 Service Controller Service 비즈니스 로직 호출
15 Data Access Service (JPA 또는 MyBatis) 조회 분기 시작
15-J1 JPA Service JpaRepository findBy()
15-J2 JPA JpaRepository EntityManager createQuery()
15-J3 DB EntityManager DB SQL 실행
15-J4 DB DB EntityManager ResultSet 반환
15-J5 JPA EntityManager JpaRepository Entity 매핑
15-J6 JPA JpaRepository Service Entity 반환
15-M1 MyBatis Service Mapper selectBy…()
15-M2 DB Mapper DB SQL 실행
15-M3 DB DB Mapper ResultSet 반환
15-M4 MyBatis Mapper Service DTO/VO 반환
16 Service Service Controller 결과 반환
17 Response Controller DispatcherServlet 응답 분기 시작
17-V1 Spring MVC Controller DispatcherServlet ModelAndView 반환
17-V2 Spring MVC DispatcherServlet HandlerInterceptor postHandle()
17-V3 Thymeleaf DispatcherServlet ViewResolver resolveViewName()
17-V4 Thymeleaf ViewResolver DispatcherServlet ThymeleafView 반환
17-V5 Thymeleaf DispatcherServlet ThymeleafView render(model)
17-V6 Thymeleaf ThymeleafView ThymeleafView TemplateEngine.process()
17-V7 Thymeleaf ThymeleafView DispatcherServlet HTML 반환
17-V8 Spring MVC DispatcherServlet Browser HTTP Response (HTML)
17-R1 Spring MVC Controller DispatcherServlet Object / ResponseEntity 반환
17-R2 Spring MVC DispatcherServlet HandlerMethodReturnValueHandler handleReturnValue()
17-R3 Spring MVC HandlerMethodReturnValueHandler HttpMessageConverter writeWithMessageConverters()
17-R4 Spring MVC HttpMessageConverter HttpMessageConverter JSON 직렬화
17-R5 Spring MVC HttpMessageConverter DispatcherServlet Response Body 작성 완료
17-R6 Spring MVC DispatcherServlet Browser HTTP Response (JSON)