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());
코드 설명
위 예제의 동작 흐름은 다음과 같습니다.
- HttpClient 생성:
HttpClient.newHttpClient()메서드로 클라이언트 인스턴스를 만들고,version()메서드로 사용 중인 HTTP 버전을 확인할 수 있습니다. - HttpRequest 구성:
HttpRequest.newBuilder()빌더 패턴을 사용해 대상 URI를 설정하고 GET 방식의 요청을 생성합니다. - 요청 전송:
httpClient.send()메서드로 요청을 동기적으로 전송하며,BodyHandler.asString()을 통해 응답 본문을 문자열 형태로 받습니다. - 응답 확인:
httpResponse.body()를 호출하여 서버에서 반환한 실제 데이터를 출력합니다.
이처럼 Java 9의 HTTP/2 클라이언트 API는 직관적인 빌더 패턴과 명확한 역할 분리 덕분에 기존 HttpURLConnection보다 훨씬 깔끔하고 현대적인 방식으로 HTTP 통신을 구현할 수 있습니다.