다음을 통해 공유


Java용 Azure SDK의 페이지 매김 및 반복

이 문서에서는 Java용 Azure SDK 페이지 매김 및 반복 기능을 사용하여 대규모 데이터 집합에서 효율적이고 생산적으로 작업하는 방법에 대한 개요를 제공합니다.

Azure Java SDK 내의 클라이언트 라이브러리에서 제공하는 많은 작업은 둘 이상의 결과를 반환합니다. Azure Java SDK는 이러한 경우 허용 가능한 반환 형식 집합을 정의하여 개발자 환경이 일관성을 통해 최대화되도록 합니다. 사용되는 반환 형식은 PagedIterable 동기화 API 및 PagedFlux 비동기 API에 사용됩니다. API는 서로 다른 사용 사례 때문에 약간 다르지만 개념적으로 동일한 요구 사항이 있습니다.

  • 수동 페이지 매김 또는 연속 토큰 추적의 필요성을 무시하고 컬렉션의 각 요소를 개별적으로 쉽게 반복할 수 있도록 합니다. PagedIterablePagedFlux는 페이지가 매겨진 응답을 지정된 형식으로 역직렬화하여 반복함으로써 이 작업을 쉽게 수행할 수 있습니다T. PagedIterableIterable 인터페이스를 구현하고, Stream를 받을 수 있는 API를 제공합니다. 한편, PagedFluxFlux를 제공합니다. 모든 경우에 페이지 매김은 명확하게 이루어지며, 여전히 반복할 결과가 있는 동안 반복은 계속됩니다.

  • 페이지별로 명시적으로 반복할 수 있도록 합니다. 이렇게 하면 요청이 수행되는 시기를 보다 명확하게 이해할 수 있으며 페이지별 응답 정보에 액세스할 수 있습니다. PagedIterablePagedFlux 둘 다 개별 요소가 아닌 페이지별로 반복할 수 있도록 적절한 형식을 반환하는 메서드를 가지고 있습니다.

이 문서는 Java Azure SDK 동기 API와 비동기 API 간에 분할됩니다. 동기 클라이언트로 작업할 때 동기 반복 API가 표시되고 비동기 클라이언트로 작업할 때 비동기 반복 API가 표시됩니다.

동기 페이지 매김 및 반복

이 섹션에서는 동기 API에 대해 설명합니다.

개별 요소 반복

앞에서 설명한 것처럼 가장 일반적인 사용 사례는 페이지당이 아닌 각 요소를 개별적으로 반복하는 것입니다. 다음 코드 예제에서는 API를 PagedIterable 통해 이 기능을 구현하려는 반복 스타일을 사용할 수 있는 방법을 보여 줍니다.

for-each 루프 사용

PagedIterableIterable을(를) 구현하므로, 다음 예제와 같이 요소를 반복할 수 있습니다.

PagedIterable<Secret> secrets = client.listSecrets();
for (Secret secret : secrets) {
   System.out.println("Secret is: " + secret);
}

Stream을 사용하세요

메서드가 PagedIterable 정의되어 있으므로 stream() 다음 예제와 같이 표준 Java Stream API를 사용하도록 호출할 수 있습니다.

client.listSecrets()
      .stream()
      .forEach(secret -> System.out.println("Secret is: " + secret));

반복기 사용

PagedIterableIterable을(를) 구현하므로, 다음 예제와 같이 Java 반복자 프로그래밍 스타일을 허용하는 iterator() 메서드도 있습니다.

Iterator<Secret> secrets = client.listSecrets().iterator();
while (it.hasNext()) {
   System.out.println("Secret is: " + it.next());
}

페이지를 순차적으로 처리합니다.

개별 페이지를 사용하는 경우 HTTP 응답 정보가 필요하거나 연속 토큰이 반복 기록을 유지하는 데 중요한 경우와 같이 페이지별로 반복할 수 있습니다. 페이지별로 반복하든 각 항목을 반복하든 관계없이 성능이나 서비스에 대한 호출 수에는 차이가 없습니다. 기본 구현은 요청 시 다음 페이지를 로드하며, 언제든지 구독 PagedFlux 을 취소하면 서비스에 대한 추가 호출이 없습니다.

for-each 루프 사용

listSecrets()을 호출하면 PagedIterable API가 있는 iterableByPage()를 얻게 됩니다. 이 API는 Iterable<PagedResponse<Secret>> 대신 Iterable<Secret>를 생성합니다. 다음 PagedResponse 예제와 같이 응답 메타데이터와 연속 토큰에 대한 액세스를 제공합니다.

Iterable<PagedResponse<Secret>> secretPages = client.listSecrets().iterableByPage();
for (PagedResponse<Secret> page : secretPages) {
   System.out.println("Response code: " + page.getStatusCode());
   System.out.println("Continuation Token: " + page.getContinuationToken());
   page.getElements().forEach(secret -> System.out.println("Secret value: " + secret))
}

연속 토큰을 사용할 수 있는 iterableByPage 오버로드가 제공됩니다. 나중에 동일한 반복 지점으로 돌아가려는 경우 이 오버로드를 호출할 수 있습니다.

Stream을 사용하세요

다음 예제에서는 메서드가 streamByPage() 위에 표시된 것과 동일한 작업을 수행하는 방법을 보여 줍니다. 이 API에는 나중에 동일한 반복 지점으로 반환하기 위한 연속 토큰 오버로드도 있습니다.

client.listSecrets()
      .streamByPage()
      .forEach(page -> {
          System.out.println("Response code: " + page.getStatusCode());
          System.out.println("Continuation Token: " + page.getContinuationToken());
          page.getElements().forEach(secret -> System.out.println("Secret value: " + secret))
      });

페이지 및 개별 요소를 비동기적으로 관찰

이 섹션에서는 비동기 API에 대해 설명합니다. 비동기 API에서 네트워크 호출은 호출 subscribe()하는 주 스레드와 다른 스레드에서 발생합니다. 즉, 결과를 사용할 수 있기 전에 주 스레드가 종료될 수 있습니다. 비동기 작업을 완료할 시간이 있기 전에 애플리케이션이 종료되지 않도록 해야 합니다.

개별 요소 관찰

다음 예제에서는 API를 PagedFlux 사용하여 개별 요소를 비동기적으로 관찰하는 방법을 보여 줍니다. Flux 형식을 구독하는 방법에는 여러 가지가 있습니다. 자세한 내용은 Flux 또는 Mono를 만들고Reactor 3 참조 가이드에서 구독하는 간단한 방법을 참조하세요. 이 예제는 소비자, 오류 소비자 및 전체 소비자에 대해 각각 하나씩 세 개의 람다 식이 있는 하나의 다양성입니다. 이 세 가지를 모두 사용하는 것이 좋지만 경우에 따라 소비자와 오류 소비자만 있으면 됩니다.

asyncClient.listSecrets()
   .subscribe(secret -> System.out.println("Secret value: " + secret),
       ex -> System.out.println("Error listing secrets: " + ex.getMessage()),
       () -> System.out.println("Successfully listed all secrets"));

페이지 관찰

다음 예제는 PagedFlux API가 소비자, 오류 소비자 및 완료 소비자를 제공하여 다시 byPage() API를 사용하여 각 페이지를 비동기적으로 관찰하는 방법을 보여 줍니다.

asyncClient.listSecrets().byPage()
  .subscribe(page -> {
          System.out.println("Response code: " + page.getStatusCode());
          System.out.println("Continuation Token: " + page.getContinuationToken());
          page.getElements().forEach(secret -> System.out.println("Secret value: " + secret))
      },
      ex -> System.out.println("Error listing pages with secret: " + ex.getMessage()),
      () -> System.out.println("Successfully listed all pages with secret"));

다음 단계

이제 Java용 Azure SDK의 페이지 매김 및 반복에 익숙해졌으므로 Java용 Azure SDK에서 장기 실행 작업을 검토하는 것이 좋습니다. 장기 실행 작업은 일반적으로 서버 쪽에서 약간의 노력이 필요하기 때문에 대부분의 일반 HTTP 요청보다 더 긴 기간 동안 실행되는 작업입니다.