IRONSOFTWAREHOME
개발자 업데이트

Polly 재시도 (개발자에게 어떻게 작동하는가)

제이콥 멜러, 팀 아이언 최고기술책임자
Jacob Mellor
Updated: 2026년 4월 21일

일시적 오류, 타임아웃, 예외를 우아하게 처리하는 것은 견고하고 탄력적인 애플리케이션을 구축하는 데 중요합니다. Polly는 탄력성과 일시적 오류 처리 기능을 제공하는 인기 있는 .NET 라이브러리입니다. 그 많은 기능 중 '재시도'는 가장 널리 사용되는 정책 중 하나입니다.

이 기사에서는 C#에서 Polly의 재시도 정책을 탐구하며, 사용법, 구성 옵션을 살펴보고 실용적인 코드 예제를 제공합니다. 또한, Polly Retry 시도와 함께 PDF 생성 용 IronPDF 라이브러리를 사용하여 양식 요청 결과의 PDF를 생성합니다.

Polly Retry란 무엇인가요?

Polly Retry는 Polly 라이브러리에서 제공하는 정책으로, 개발자가 오류 또는 일시적 오류로 인해 실패할 수 있는 작업을 자동으로 재시도하도록 설정할 수 있게 합니다. 일시적 오류는 네트워크 문제, 서비스 불가 상태 또는 기타 일시적 문제로 발생하는 일시적인 오류입니다.

Polly의 재시도 정책을 사용하면, 최대 재시도 횟수, 여러 번의 재시도 사이의 지연 시간, 실패한 요청을 다시 시도하는 조건을 포함하여 작업을 재시도하는 규칙을 정의할 수 있습니다. 이것은 충돌하거나 최종 사용자에게 혼란을 야기하지 않고 일시적인 실패에서 복구할 수 있는 탄력적인 애플리케이션을 구축하는 데 도움이 됩니다.

Polly Retry 시작하기

코드 예제로 들어가기 전, C# 프로젝트에서 Polly를 설치하고 구성하는 기본 방법을 설정해 봅시다.

Polly 설치하기

다음 명령을 사용하여 NuGet 패키지 관리자 콘솔을 통해 Polly를 설치할 수 있습니다:

PM > Install-Package Polly

.NET CLI를 통해:

dotnet add package Polly

Polly 사용문 추가하기

C# 파일에서 Polly 네임스페이스를 포함합니다:

using Polly;

기본 재시도 정책 예제

먼저 원격 서비스에서 데이터를 가져오는 작업을 시뮬레이션 하는 작업을 재시도하는 간단한 예제를 시작해 봅시다. 최대 3번의 재시도와 재시도 간 2초의 고정 타임아웃 지연을 포함한 재시도 정책을 설정하겠습니다.

using System;
using System.Net.Http;
using Polly;

namespace PollyRetryExample
{
    public class Program
    {
        public static void Main(string[] args)
        {
            // Define a retry policy that handles HttpRequestException with a maximum of 3 retries
            var retryPolicy = Policy
                .Handle<HttpRequestException>() // Specify the exception type to handle
                .WaitAndRetry(
                    3, // Max retry attempts
                    retryAttempt => TimeSpan.FromSeconds(2), // Fixed retry delay
                    (exception, timeSpan, retryCount, context) =>
                    {
                        Console.WriteLine("Retry {0} due to {1}", retryCount, exception.Message);
                    });

            try
            {
                // Execute the action within the context of the retry policy
                retryPolicy.Execute(() =>
                {
                    FetchDataFromRemoteService();
                });
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed after 3 retries: {0}", ex.Message);
            }
        }

        // Simulate fetching data that throws HttpRequestException
        public static void FetchDataFromRemoteService()
        {
            throw new HttpRequestException("Failed to fetch data from remote service");
        }
    }
}

이 예시에서는 다음과 같습니다.

  • Handle<HttpRequestException>() 은(는) HttpRequestException를 처리하고 발생 시 작업을 재시도하려고 한다는 것을 지정합니다.
  • WaitAndRetry() 은(는) 3번의 재시도와 재시도 사이에 2초의 고정 딜레이(최대 지속 시간 지정됨)로 재시도 정책을 구성합니다.
  • onRetry 델리게이트는 재시도가 발생할 때 메시지를 기록합니다.

Polly 재시도 (개발자에게 어떻게 작동하는가): 그림 1

고급 재시도 정책 설정

지수적 백오프

지수 백오프(exponential backoff)는 요청 및 재시도 사이의 지연이 지수적으로 증가하는 인기 있는 재시도 전략입니다. Polly는 WaitAndRetry()을(를) 사용하여 기하급수적 백오프를 구현하는 편리한 방법을 제공합니다.

var retryPolicy = Policy
    .Handle<HttpRequestException>()
    .WaitAndRetry(
        retryCount: 3, // Max retry attempts
        sleepDurationProvider: attempt => TimeSpan.FromSeconds(Math.Pow(2, attempt)), // Exponential delay
        onRetry: (exception, timeSpan, retryCount, context) =>
        {
            Console.WriteLine($"Retry {retryCount} due to {exception.Message}");
        });

Polly 재시도 (개발자에게 어떻게 작동하는가): 그림 2

회로 차단기와 재시도

회로 차단기와 재시도를 결합하면 서비스가 지속적으로 실패할 때 반복적인 재시도를 방지하여 탄력성을 더욱 향상시킬 수 있습니다. Polly를 사용하면 쉽게 재시도 및 회로 차단기 정책을 결합할 수 있습니다.

// Define a circuit breaker policy
var circuitBreakerPolicy = Policy
    .Handle<HttpRequestException>()
    .CircuitBreaker(
        exceptionsAllowedBeforeBreaking: 3, // Number of exceptions before breaking
        durationOfBreak: TimeSpan.FromSeconds(30), // Time circuit stays open
        onBreak: (ex, breakDelay) =>
        {
            Console.WriteLine($"Circuit broken due to {ex.Message}. Retry after {breakDelay.TotalSeconds} seconds.");
        },
        onReset: () =>
        {
            Console.WriteLine("Circuit reset.");
        });

// Define a retry policy
var retryPolicy = Policy
    .Handle<HttpRequestException>()
    .WaitAndRetry(
        retryCount: 3, // Max retry attempts
        sleepDurationProvider: attempt => TimeSpan.FromSeconds(2), // Fixed retry delay
        onRetry: (exception, timeSpan, retryCount, context) =>
        {
            Console.WriteLine($"Retry {retryCount} due to {exception.Message}");
        });

// Combine both policies into a single policy wrap
var policyWrap = Policy.Wrap(circuitBreakerPolicy, retryPolicy);

이 예시에서는 다음과 같습니다.

  • CircuitBreaker() 은(는) 3번의 예외 후에 회로 끊기 및 30초 동안 열림 상태를 유지하는 회로 차단기 정책을 정의합니다.
  • Policy.Wrap() 은(는) 회로 차단기와 재시도 정책을 하나의 정책으로 결합합니다.

Polly 재시도 (개발자에게 어떻게 작동하는가): 그림 3

IronPDF 소개

IronPDF C# PDF 라이브러리 개요는 개발자가 .NET 애플리케이션 내에서 PDF 문서를 생성, 편집 및 조작할 수 있게 하는 강력한 C# 라이브러리입니다. 청구서, 보고서, 기타 유형의 PDF 문서를 생성할 필요가 있는지 여부에 상관없이 IronPDF는 프로세스를 간소화하는 직관적인 API를 제공합니다.

IronPDF를 사용하면 HTML, CSS 및 ASP.NET 웹 페이지에 이르기까지 쉽게 PDF로 변환할 수 있어 다양한 애플리케이션에 유연한 도구입니다. 또한 PDF에 텍스트, 이미지 및 대화형 요소를 추가하고 암호화 및 디지털 서명으로 보안을 강화하는 등의 고급 기능을 제공합니다.

IronPDF는 HTML to PDF 변환에 탁월하여 원본 레이아웃 및 스타일의 정밀한 보존을 보장합니다. 보고서, 청구서, 문서화와 같은 웹 기반 콘텐츠에서 PDF를 생성하는 데 완벽합니다. IronPDF는 HTML 파일, URL, 원시 HTML 문자열을 고품질 PDF 파일로 변환하는 기능을 지원합니다.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}

IronPDF와 Polly를 사용한 재시도

IronPDF와 작업할 때 PDF를 생성하기 전에 외부 소스에서 데이터를 가져오거나 복잡한 작업을 수행해야 하는 시나리오가 있을 수 있습니다.

이 경우 PDF 생성 실패로 이어질 수 있는 일시적인 오류나 일시적인 문제가 발생할 수 있습니다. 이러한 일시적인 오류를 우아하게 처리하려면 IronPDF와 함께 Polly Retry를 사용할 수 있습니다.

IronPDF와 Polly 설치하기

시작하기 전에 프로젝트에 IronPDF NuGet 패키지를 설치해야 합니다.

PM > Install-Package IronPdf

IronPDF와 함께 Polly Retry 사용하기

IronPDF를 사용하여 PDF를 생성할 때 일시적인 오류를 처리하기 위해 Polly Retry를 사용하는 예를 살펴보겠습니다. 다음 예제에서는 외부 API에서 데이터를 가져오고 해당 데이터를 기반으로 PDF를 생성하는 시나리오를 시뮬레이션할 것입니다. 실패가 발생할 경우 데이터를 가져오는 작업을 실행하기 위해 Polly Retry을(를) 사용할 것입니다.

using System;
using System.Net.Http;
using System.Threading.Tasks;
using IronPdf;
using Polly;

namespace IronPdfWithPollyRetry
{
    public class Program
    {
        public static async Task Main(string[] args)
        {
            // Define a retry policy with async capability
            var retryPolicy = Policy
                .Handle<HttpRequestException>() // Specify exception type to handle
                .WaitAndRetryAsync(
                    3, // Retry attempts
                    retryAttempt => TimeSpan.FromSeconds(2), // Calculated retry delay
                    (exception, timeSpan, retryCount, context) =>
                    {
                        Console.WriteLine("Retry " + retryCount + " due to " + exception.Message);
                    });

            // Execute the retry policy asynchronously
            var pdf = await retryPolicy.ExecuteAsync(async () =>
            {
                var data = await FetchDataFromExternalApiAsync(); // Fetch data from an external source
                return GeneratePdfFromData(data); // Generate PDF using fetched data
            });

            pdf.SaveAs("GeneratedDocument.pdf");
        }

        // Simulate fetching data from an external API
        static async Task<string> FetchDataFromExternalApiAsync()
        {
            await Task.Delay(100); // Simulate delay
            throw new HttpRequestException("Failed to fetch data from external API");
        }

        // Generate PDF using IronPDF based on the fetched data
        static PdfDocument GeneratePdfFromData(string data)
        {
            var htmlContent = "<html><body><h1>Data: " + data + "</h1></body></html>";
            var renderer = new ChromePdfRenderer();
            return renderer.RenderHtmlAsPdf(htmlContent);
        }
    }
}

이 C# 코드 예제는 IronPDF로 PDF 문서를 생성하기 위해 재시도 정책을 구현하는 Polly 라이브러리 사용 방법을 보여줍니다. Main 메소드는 Polly의 WaitAndRetryAsync 메소드를 사용하여 재시도 정책을 초기화합니다.

이 정책은 HttpRequestException를 처리해야 하며, 초기 시도와 재시도 사이에 2초의 딜레이를 두고 최대 3번까지 작업을 재시도해야 한다고 지정합니다. 재시도 실패가 발생하면 콘솔에 재시도 시도 번호와 예외 메시지가 표시됩니다.

Main 메소드 내부에서, 재시도 정책 로직이 retryPolicy.ExecuteAsync()를 사용하여 비동기적으로 실행됩니다. 이 실행 내에서 두 개의 비동기 작업이 FetchDataFromExternalApiAsync()와(과) GeneratePdfFromData(data)와(과) 함께 연결됩니다.

만약 FetchDataFromExternalApiAsync()가 실패하면(시뮬레이션된 예외로 의도적으로 설정됨), 재시도 정책은 HttpRequestException를 잡아 재시도 시도를 기록하고 작업을 재시도할 것입니다.

FetchDataFromExternalApiAsync() 메소드는 외부 API에서 데이터를 가져오는 작업을 지연시키고 실패한 요청을 시뮬레이션하기 위해 HttpRequestException를 의도적으로 던집니다.

Polly 재시도 (개발자에게 어떻게 작동하는가): 그림 4

결론

결론적으로 Polly의 재시도 정책은 일시적인 오류를 처리하고 C# 애플리케이션의 견고성을 보장하는 데 매우 유용합니다. 재시도 시도, 지연, 조건을 구성할 수 있는 유연성은 개발자가 특정 요구 사항에 맞춘 복원력 전략을 조정할 수 있게 합니다.

IronPDF와 같은 라이브러리와 함께 사용하든 독립적으로 사용하든, Polly는 일시적인 실패로부터 애플리케이션이 우아하게 복구되도록 하여 사용자 경험과 소프트웨어의 신뢰성을 향상시킵니다.

Polly의 재시도 기능을 통합함으로써 개발자는 일시적인 문제로부터 적응하고 회복할 수 있는 더 탄력적인 시스템을 구축하여 궁극적으로 애플리케이션의 전반적인 품질과 신뢰성을 향상시킬 수 있습니다.

IronPDF는 시장에서 최고의 C# PDF 라이브러리이며, IronPDF 체험판 라이선스도 제공하며 가격은 $999 USD부터 시작합니다.

IronPDF를 사용한 HTML에서 PDF로 변환에 대해 알아보려면 다음 IronPDF HTML에서 PDF로 변환 튜토리얼을 방문하십시오.

제이콥 멜러, 팀 아이언 최고기술책임자
최고기술책임자

제이콥 멜러는 Iron Software의 최고 기술 책임자(CTO)이자 C# PDF 기술을 개척한 선구적인 엔지니어입니다. Iron Software의 핵심 코드베이스를 최초로 개발한 그는 창립 초기부터 회사의 제품 아키텍처를 설계해 왔으며, CEO인 캐머런 리밍턴과 함께 회사를 NASA, 테슬라, 그리고 전 세계 정부 기관에 서비스를 제공하는 50명 이상의 직원을 보유한 기업으로 성장시켰습니다.

...
더 읽어보기

관련 기사

Key in blue circle

무료 30일 체험 키를 즉시 받으세요.

Your trial license will be sent to your email address

제한 없음. 100% 무제한 이용. 신용카드 불필요.

bullet_checked신용카드나 계정 생성은 필요하지 않습니다.제한 없음. 100% 무제한 이용. 신용카드 불필요.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
무료 라이브 데모를 예약하세요
Booking Badge

전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.

Iron Software의 고객 로고
부담 없는 무료 상담을 받아보세요
아래 양식을 작성하시거나 sales@ironsoftware.com으로 이메일을 보내주세요.
고객님의 정보는 항상 비밀로 유지됩니다.
전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.
Iron Software의 고객 로고
지금 바로 30일 무료 체험판 키를 받으세요.
신용카드나 계정 생성은 필요하지 않습니다.