소개
본 장에서는 AnyLink HTTP2 어댑터의 기본적인 동작방식에 대해서 설명합니다.
1. 개요
HTTP2 어댑터는 HTTP/2 프로토콜을 기반으로 하나의 커넥션에서 여러 HTTP 요청을 동시에 처리(Multiplexing)하는 기능을 지원합니다. HTTP/2의 스트림 기반 통신을 활용하여 효율적인 요청/응답 처리가 가능합니다.
|
현재 버전에서는 SSL/TLS를 지원하지 않으며, Cleartext(h2c) 모드만 지원합니다. |
2. 주요 기능
HTTP2 어댑터는 다음과 같은 기능을 제공합니다.
-
Multiplexing 지원 : 하나의 TCP 커넥션에서 여러 HTTP 요청을 동시에 처리할 수 있습니다.
-
Path 기반 거래 식별 : HTTP_PATH를 이용하여 하위 거래를 식별합니다.
-
자동 재연결 : 아웃바운드 엔드포인트의 커넥션이 끊어졌을 경우 자동으로 연결을 재시도합니다.
3. 환경 구성
AnyLink에서 HTTP2 어댑터를 사용하기 위해서는 다음과 같은 환경 구성이 필요합니다.
-
Java 버전
Java 17(JDK 17.0) 이상
-
Netty 라이브러리
HTTP2 어댑터는 Netty 기반으로 구현되어 있습니다.
4. 어댑터 동작방식
HTTP2 어댑터는 HTTP2 엔드포인트를 등록할 수 있으며, HTTP2 엔드포인트는 인바운드 엔드포인트와 아웃바운드 엔드포인트로 나뉩니다.
각 엔드포인트의 동작 방식은 다음과 같습니다.
-
인바운드
외부로부터 HTTP2 요청을 수신하고 응답을 반환합니다. Path 정보를 기반으로 거래를 식별하여 해당 거래의 서비스 플로우를 수행합니다.
-
아웃바운드
거래에서 HTTP2 아웃바운드 룰이 호출될 때 HTTP2 프로토콜을 통해 해당 요청 메시지를 외부 서버로 전송합니다.
5. 에러 처리
HTTP2 어댑터의 에러 처리 방식은 다음과 같습니다.
-
인바운드 거래에서 에러 발생 시 기본적으로 응답을 전송하지 않습니다.
-
에러 응답이 필요한 경우 에러 플로우를 설정하여 응답을 전송할 수 있습니다.
-
아웃바운드 스트림의 응답 Status Code가 200이 아닌 경우 해당 요청은 실패로 처리되며, 에러 시 Status Code는 500으로 응답합니다.
6. 커넥션 재연결
아웃바운드 엔드포인트의 커넥션이 끊어졌을 경우 자동으로 연결을 재시도합니다.
재연결 시 다음과 같은 로그가 출력됩니다.
[INFO] Connection closed
[INFO] receive connectionClosed signal.
[INFO] trying to recover HTTP2 connection...
[SEVERE] failed to connect to HTTP2 endpoint
[INFO] failed to connect. try again after 5 seconds...
[INFO] trying to recover HTTP2 connection...
[INFO] HTTP2 Client connection connected