본문으로 건너뛰기

ReactiveCore

2. HttpHandler

  • HttpHandler는 HTTP 요청과 응답을 처리하기 위한 단일 메서드를 가진 간단한 인터페이스입니다.
    • HTTP 요청 처리를 위한 가장 기본적인 계약(contract)만 정의합니다.
  • 이 인터페이스는 의도적으로 최소한의 기능만 포함하고 있으며, 다양한 HTTP 서버 API를 추상화하는 것이 주요 목적입니다.
package org.springframework.http.server.reactive;

import reactor.core.publisher.Mono;

public interface HttpHandler {
Mono<Void> handle(ServerHttpRequest request, ServerHttpResponse response);
}

2.1 HttpHandler 어댑터

  • Spring WebFlux에서 HttpHandler는 HTTP 요청 처리를 위한 단일 메서드를 갖는 간단한 인터페이스입니다.
  • 하지만 Reactor Netty, Undertow, Tomcat 등의 서버들은 각자 고유한 API를 가지고 있습니다.
  • 이러한 서버 API를 HttpHandler와 연결하기 위해 어댑터 패턴을 사용합니다.

3. WebHandler

  • HttpHandler보다 약간 높은 수준의 웹 API입니다.
  • 요청을 여러 WebExceptionHandler, 여러 WebFilter, 그리고 단일 WebHandler 컴포넌트의 체인을 통해 처리하기 위한 범용 웹 API를 제공합니다.
  • 이를 기반으로 어노테이션 기반 컨트롤러나 함수형 엔드포인트와 같은 구체적인 프로그래밍 모델이 구축됩니다.
    • Spring WebFlux는 Spring MVC와 유사하게 프론트 컨트롤러 패턴을 중심으로 설계되었습니다.
    • 이 패턴에서는 중앙 WebHandler인 DispatcherHandler가 요청 처리를 위한 공통 알고리즘을 제공합니다.
    • DispatcherHandler 참고

3.1 WebHandler 인터페이스

package org.springframework.web.server;

import reactor.core.publisher.Mono;

public interface WebHandler {
Mono<Void> handle(ServerWebExchange exchange);
}

  • WebHandler는 ServerWebExchange라는 단일 인자를 받습니다.
  • ServerWebExchange는 HTTP 요청과 응답을 포함하여 웹 요청 처리에 필요한 모든 정보를 제공합니다.