10장. Undertow


10.1. Undertow Handler 소개

Undertow는 차단 작업 및 비차단 작업 모두에 사용하도록 설계된 웹 서버입니다. JBoss EAP 7에서 JBoss Web을 대체합니다. 일부 주요 기능은 다음과 같습니다.

  • 고성능
  • 임베딩 가능
  • Servlet 4.0
  • 웹 소켓
  • 역방향 프록시

라이프 사이클 요청

클라이언트가 서버에 연결하면 Undertow에서 a io.undertow.server.HttpServerConnection 을 생성합니다. 클라이언트에서 요청을 보내면 Undertow 구문 분석기에서 구문 분석한 다음 result io.undertow.server.HttpServerExchange 가 root 핸들러에 전달됩니다. root 핸들러가 완료되면 다음 네 가지 중 하나가 발생할 수 있습니다.

  • 교환이 완료됩니다.

    요청 및 응답 채널이 모두 완전히 읽거나 쓴 경우 교환은 완료된 것으로 간주됩니다. GET 및 HEAD와 같은 콘텐츠가 없는 요청의 경우 요청 측은 자동으로 완전히 읽은 것으로 간주됩니다. 핸들러가 전체 응답을 작성하고 응답 채널을 완전히 플러시한 경우 읽기 측면은 완전한 것으로 간주됩니다. 교환이 이미 완료된 경우에는 수행되지 않습니다.

  • 루트 핸들러는 교환을 완료하지 않고 정상적으로 반환됩니다.

    이 경우 HttpServerExchange.endExchange()를 호출하여 교환을 완료합니다.

  • root 핸들러가 Exception으로 반환됩니다.

    이 경우 응답 코드 500 이 설정되어 있으며 교환은 HttpServerExchange.endExchange()를 사용하여 종료됩니다.

  • 루트 핸들러는 HttpServerExchange.dispatch() 가 호출된 후 또는 비동기 IO가 시작된 후에 반환할 수 있습니다.

    이 경우 디스패치된 작업이 디스패치 실행자에 제출되거나 요청 또는 응답 채널에서 비동기 IO가 시작된 경우 이 작업이 시작됩니다. 두 경우 모두 교환이 완료되지 않습니다. 처리를 마칠 때 교환을 완료하는 것은 비동기 작업일 뿐입니다.

HttpServerExchange.dispatch() 를 가장 일반적으로 사용하는 것은 차단이 허용되지 않는 IO 스레드에서 실행을 차단할 수 있는 작업자 스레드로 이동하는 것입니다.

예제: 작업자 스레드로 디스패치

public void handleRequest(final HttpServerExchange exchange) throws Exception {
    if (exchange.isInIoThread()) {
      exchange.dispatch(this);
      return;
    }
    //handler code
}
Copy to Clipboard Toggle word wrap

호출 스택이 반환될 때까지 교환이 실제로 디스패치되지 않으므로 한 번에 둘 이상의 스레드가 교환에서 활성화되지 않도록 할 수 있습니다. 교환은 안전한 스레드가 아닙니다. 그러나 두 스레드가 한 번에 수정하지 않는 한 여러 스레드 간에 전달할 수 있습니다.

교환 종료

교환을 종료하는 방법에는 요청 채널을 완전히 읽고 응답 채널에서 shutdownWrites() 를 호출한 다음 HttpServerExchange.endExchange() 를 호출하여 교환을 종료할 수 있습니다. endExchange() 를 호출하면 Undertow는 콘텐츠가 아직 생성되었는지 확인합니다. 있는 경우 요청 채널을 드레이닝하고 응답 채널을 닫고 플러시합니다. 교환에 등록된 기본 응답 리스너가 없는 경우 Undertow는 각 응답에 기본 응답을 생성할 기회를 제공합니다. 이 메커니즘은 기본 오류 페이지가 생성되는 방법입니다.

Undertow 구성에 대한 자세한 내용은 JBoss EAP 구성 가이드에서 웹 서버 구성을 참조하십시오.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2026 Red Hat