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

Java 9 HTTP/2 클라이언트 API 완벽 정리: HttpClient, HttpRequest, HttpResponse

HTTP/2란 무엇인가?

HTTP/2는 기존 HTTP 프로토콜의 최신 버전입니다. 이 버전의 핵심 개선 사항은 서버와 클라이언트 간에 데이터가 어떻게 프레임화되고 전송되는지에 초점을 맞추고 있다는 점입니다. Java 9에서는 새로운 HTTP/2 프로토콜을 지원하기 위해 HTTP 클라이언트, 요청(Request), 응답(Response)을 각각 담당하는 별도의 클래스들을 제공합니다.

새로운 API를 활용하면 HTTP 연결을 더욱 쉽게 유지 관리할 수 있고, 통신 속도가 빨라지며, 별도의 서드파티 라이브러리 없이도 반응성이 뛰어난 애플리케이션을 개발할 수 있습니다.

HTTP 연결을 처리하는 세 가지 핵심 클래스

Java 9의 새로운 HTTP 클라이언트 API는 다음 세 가지 클래스를 통해 HTTP 연결을 처리합니다.

  • HttpClient: 요청의 생성 및 전송을 담당하는 클래스입니다.
  • HttpRequest: HttpClient를 통해 전송할 요청 객체를 구성하는 데 사용됩니다.
  • HttpResponse: 전송된 요청에 대한 응답 결과를 보관합니다.

실전 코드 예제

아래 코드 예제는 특정 URL로 요청을 보내고 응답을 받아오는 과정을 보여줍니다.

// HttpClient 객체 생성
HttpClient httpClient = HttpClient.newHttpClient();
System.out.println(httpClient.version());

// HttpRequest 빌드 (지정된 URI에 대한 GET 요청 생성)
HttpRequest httpRequest = HttpRequest.newBuilder()
.uri(new URI("https://www.tutorialspoint.com/"))
.GET()
.build();

// 요청 헤더 출력
Map<String, List<String>> headers = httpRequest.headers().map();
headers.forEach((k, v) -> System.out.println(k + "-" + v));

// 요청 전송 (응답 본문을 문자열로 처리)
HttpResponse httpResponse = httpClient.send(httpRequest,
HttpResponse.BodyHandler.asString());

// 응답 본문 출력
System.out.println("Response: " + httpResponse.body());

코드 설명

위 예제의 동작 흐름은 다음과 같습니다.

  1. HttpClient 생성: HttpClient.newHttpClient() 메서드로 클라이언트 인스턴스를 만들고, version() 메서드로 사용 중인 HTTP 버전을 확인할 수 있습니다.
  2. HttpRequest 구성: HttpRequest.newBuilder() 빌더 패턴을 사용해 대상 URI를 설정하고 GET 방식의 요청을 생성합니다.
  3. 요청 전송: httpClient.send() 메서드로 요청을 동기적으로 전송하며, BodyHandler.asString()을 통해 응답 본문을 문자열 형태로 받습니다.
  4. 응답 확인: httpResponse.body()를 호출하여 서버에서 반환한 실제 데이터를 출력합니다.

이처럼 Java 9의 HTTP/2 클라이언트 API는 직관적인 빌더 패턴과 명확한 역할 분리 덕분에 기존 HttpURLConnection보다 훨씬 깔끔하고 현대적인 방식으로 HTTP 통신을 구현할 수 있습니다.