다음을 통해 공유


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

이 문서에서는 Java용 Azure SDK 페이지 매김 및 반복 기능을 사용하여 대량의 데이터 세트를 효율적이고 생산적으로 작업하는 방법을 소개합니다.

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

  • 수동 페이지 매김 또는 연속 토큰 추적의 필요성을 무시하고 컬렉션의 각 요소를 개별적으로 쉽게 반복할 수 있도록 합니다. PagedFlux 또한 PagedIterable 지정된 형식으로 역직렬화된 페이지를 매긴 응답을 반복하여 이 작업을 쉽게 수행할 수 있습니다T. PagedIterable 는 인터페이스를 Iterable 구현하고, API를 수신할 수 있는 Stream반면 PagedFlux 에 .를 Flux제공합니다. 어떤 경우에도 페이지 매김 동작은 투명하며, 결과가 반복되는 한 반복이 계속됩니다.

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

이 문서는 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 사용

메서드가 stream() 정의되어 있으므로 PagedIterable 다음 예제와 같이 표준 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()하면 API가 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"));

페이지 관찰

다음 예제에서는 API를 PagedFlux 사용하여 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 요청보다 더 긴 기간 동안 실행되는 작업입니다.