[java] HttpClient를 사용하여 웹 사이트에 여러 개의 요청을 동시에 보내는 방법은?

Java에서 HttpClient를 사용하여 웹 사이트에 여러 개의 요청을 동시에 보내는 방법을 알아보겠습니다. HttpClient는 HTTP 요청을 처리하는 많은 기능을 제공하는 유용한 라이브러리입니다.

  1. HttpClient 인스턴스 생성하기: 먼저, HttpClient 인스턴스를 생성해야 합니다. HttpClient는 Java에서 HTTP 프로토콜을 통해 서버와 통신할 수 있는 기능을 제공합니다.
HttpClient httpClient = HttpClient.newBuilder()
        .connectTimeout(Duration.ofSeconds(10))
        .build();
  1. 여러 개의 요청 생성하기: 다음으로, 웹 사이트에 보낼 여러 개의 요청을 생성해야 합니다. 각 요청은 HttpRequest.Builder를 사용하여 생성할 수 있습니다.
HttpRequest request1 = HttpRequest.newBuilder()
        .uri(URI.create("http://example.com/api/endpoint1"))
        .build();

HttpRequest request2 = HttpRequest.newBuilder()
        .uri(URI.create("http://example.com/api/endpoint2"))
        .build();

// 필요한 만큼의 요청을 생성합니다.
  1. 요청을 동시에 보내기: 모든 요청이 준비되면, CompletableFuture를 사용하여 HttpClient를 통해 요청을 동시에 보낼 수 있습니다. CompletableFuture는 자바 8부터 도입된 비동기 작업 처리를 위한 기능입니다.
CompletableFuture<HttpResponse<String>> response1 =
        httpClient.sendAsync(request1, HttpResponse.BodyHandlers.ofString());

CompletableFuture<HttpResponse<String>> response2 =
        httpClient.sendAsync(request2, HttpResponse.BodyHandlers.ofString());

// 필요한 만큼의 요청을 보냅니다.

// 모든 요청이 완료될 때까지 대기합니다.
CompletableFuture.allOf(response1, response2).join();

// 각 응답을 얻을 수 있습니다.
HttpResponse<String> response1Result = response1.get();
HttpResponse<String> response2Result = response2.get();

// 필요한 작업을 수행합니다.

위의 코드는 웹 사이트에 request1과 request2를 동시에 보내는 방법을 보여줍니다. CompletableFuture의 join() 메서드를 호출하여 모든 요청이 완료될 때까지 대기하고, get() 메서드를 사용하여 각 응답을 얻을 수 있습니다.

이를 통해 Java의 HttpClient를 사용하여 웹 사이트에 여러 개의 요청을 동시에 보낼 수 있습니다. 필요에 따라 요청 헤더, 바디 등을 추가로 설정할 수 있으며, CompletableFuture를 사용하여 비동기적으로 요청을 처리할 수도 있습니다.

참고 자료: