Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바 9의 HTTP/2 클라이언트 API란? 특징과 사용법 완벽 정리

HTTP/2 클라이언트 API 소개

자바 9에서 새롭게 도입된 HTTP/2 클라이언트 API는 기존 HTTP/1.1 대비 뛰어난 성능 개선을 제공하며, 서버 푸시(Server Push) 이벤트까지 지원합니다. 덕분에 웹사이트를 더욱 효율적이고 빠르게 탐색할 수 있습니다.

특이한 점은 HTTP/2 클라이언트가 jdk.incubator.httpclient라는 이름의 인큐베이터(incubator) 모듈 형태로 제공된다는 것입니다. 인큐베이터 모듈이란 아직 정식 기능으로 확정되지 않아, 향후 자바 버전에서 변경 사항이 생길 수 있는 실험적 모듈을 의미합니다. 이 모듈은 모든 공개 API를 담고 있는 jdk.incubator.http 패키지를 외부로 노출합니다.

JShell에서 HTTP/2 클라이언트 활성화하기

HTTP/2 클라이언트를 사용하려면 먼저 인큐베이터 모듈을 활성화해야 합니다. JShell 실행 시 --add-modules 옵션에 httpclient 모듈을 지정하면 간단히 해결됩니다.

C:\>jshell -v --add-modules jdk.incubator.httpclient
| Welcome to JShell -- Version 9.0.4
| For an introduction type: /help intro

실습 예제

다음 예제는 JShell에서 HTTP 클라이언트 객체를 생성하고, 구글 사이트로 GET 요청을 전송한 뒤 응답 상태 코드와 본문을 확인하는 전체 과정입니다.

jshell> import jdk.incubator.http.*;

jshell> HttpClient httpClient = HttpClient.newHttpClient();
httpClient ==> jdk.incubator.http.HttpClientImpl@534df152
| created variable httpClient : HttpClient

jshell> HttpRequest httpRequest = HttpRequest.newBuilder().uri(new URI("https://www.google.com")).GET().build();
httpRequest ==> https://www.google.com GET
| created variable httpRequest : HttpRequest

jshell> HttpResponse httpResponse = httpClient.send(httpRequest, HttpResponse.BodyHandler.asString());
httpResponse ==> jdk.incubator.http.HttpResponseImpl@609cd4d8
| created variable httpResponse : HttpResponse

jshell> System.out.println(httpResponse.statusCode());
403

jshell> System.out.println(httpResponse.body());
(응답 본문 문자열 출력)

예제 코드 단계별 설명

1. HttpClient 생성HttpClient.newHttpClient() 메서드를 호출해 기본 설정값을 가진 클라이언트 인스턴스를 만듭니다.

2. HttpRequest 빌드HttpRequest.newBuilder()로 요청 빌더를 얻은 뒤, 대상 URI를 지정하고 .GET(), .build()를 호출해 불변(immutable) 요청 객체를 완성합니다.

3. 요청 전송 및 응답 수신httpClient.send() 메서드로 동기 방식 요청을 보내고, HttpResponse.BodyHandler.asString()을 지정해 응답 본문을 문자열로 변환해 받습니다.

4. 결과 확인statusCode()로 HTTP 상태 코드를, body()로 실제 응답 내용을 출력합니다. 위 예제에서는 403 상태 코드가 반환된 것을 확인할 수 있습니다.

참고: 자바 11에서의 변화

인큐베이터 상태였던 이 API는 피드백을 거쳐 자바 11에서 표준으로 승격되어 java.net.http 패키지에 정식 포함되었습니다. 따라서 실무 프로젝트에서는 자바 11 이상 환경에서 별도 모듈 추가 없이 바로 사용하는 것이 좋습니다.