Architecture Pattern

Retry 패턴 이란 ?

Ed2024 2024. 11. 19. 00:33

Retry 패턴은 애플리케이션이 일시적인 오류나 실패 상황에서 요청을 반복적으로 시도함으로써 안정성과 가용성을 높이는 설계 패턴입니다. 이는 네트워크 장애, 일시적인 서비스 중단, 타이밍 문제 등과 같은 문제를 해결하는 데 유용합니다.

Source : https://learn.microsoft.com/en-us/azure/architecture/patterns/retry

 

1.Retry 패턴의 주요 요소

1) Retry 조건:

  • 재시도를 할 오류를 정의합니다.
  • 보통 일시적인 네트워크 오류나 HTTP 상태 코드(예: 500, 503, 504)와 같은 조건에서 재시도를 수행합니다.
  • 치명적인 오류(예: 400, 401)는 재시도를 하지 않도록 설정합니다.

 2) Retry 횟수 (Max Retry Attempts):

  • 요청을 재시도할 최대 횟수를 지정합니다.
  • 무한히 재시도하지 않도록 설정해 시스템의 과부하를 방지합니다.

3)재시도 간격 (Retry Interval):

  • 재시도 요청 사이의 대기 시간을 정의합니다.
  • 고정 간격 또는 점진적으로 증가하는 간격(예: 지수 백오프)을 사용할 수 있습니다.

4)백오프 전략 (Backoff Strategy):

  • 재시도 사이의 간격을 조정하는 알고리즘입니다.
  • 주로 사용되는 전략:
  • Ø  고정 대기(Fixed Delay): 일정한 시간 간격으로 재시도.
  • Ø  지수 백오프(Exponential Backoff): 매번 재시도할 때 대기 시간을 지수적으로 증가.
  • Ø  지수 백오프 + Jitter: 지수 백오프에 무작위성을 추가하여 과도한 트래픽 폭주를 방지.

5)최대 대기 시간 (Max Wait Time):

  • 재시도를 중단하기 전까지 대기할 수 있는 최대 시간을 설정합니다.

6)컨텍스트 보존:

  • 재시도 과정에서 기존 요청에 대한 상태나 컨텍스트를 유지합니다.
  • 동일한 요청이 동일한 결과를 내도록 설계합니다(Idempotency).

 

2.Retry 패턴의 IT발전 시기별 적용 현황

1) 1970-1980년대: 네트워크와 분산 시스템의 초기 개발

  • 네트워크 기반 시스템의 등장으로 일시적인 통신 장애가 빈번하게 발생.
  • TCP/IP 프로토콜 설계에서는 자동 재전송(예: ACK 손실 시 재전송)을 포함하여 초기적인 형태의 Retry 메커니즘을 구현.
  • 데이터 전송 신뢰성을 보장하기 위해 이런 방식의 Retry 개념이 도입됨.

2) 1990년대: 클라이언트-서버 아키텍처와 인터넷의 발전

  • 클라이언트-서버 기반 애플리케이션이 확산되면서 HTTP 프로토콜에서 오류 처리(특히 상태 코드 `500`, `503` 등)를 위한 Retry가 필요해짐.
  • 이 시기에 초기 웹 클라이언트와 서버 시스템에서 Retry 로직이 구현되기 시작.

3) 2000년대 초반: 대규모 분산 시스템의 확산

  • 클라우드 컴퓨팅 및 대규모 분산 시스템(예: Google, Amazon, Microsoft Azure)에서 장애와 오류 복원력을 위한 Retry 패턴의 중요성이 강조됨.
  • 특히, RESTful API와 마이크로서비스 아키텍처에서 재시도 로직이 필수적인 부분으로 자리 잡음.

4) 2010년대: Retry 패턴의 표준화와 도구의 발전

  • 오픈 소스 라이브러리 및 프레임워크(예: Spring Retry, Polly, Resilience4j)가 Retry 패턴을 쉽게 구현할 수 있도록 도와줌.
  • 클라우드 제공업체(AWS, Azure, Google Cloud)에서도 Retry를 기본적으로 지원하는 SDK를 제공.

5) 현재(2020년대)

  •  Retry 패턴은 현대 애플리케이션 설계에서 표준적인 기법으로 자리 잡음.
  •  분산 시스템, 서버리스 아키텍처, IoT 시스템 등에서 필수적으로 사용.

 

3.Retry 패턴의 장점

  • 서비스 안정성: 일시적인 오류를 처리하여 애플리케이션의 신뢰성을 높임.
  • 사용자 경험 개선: 네트워크 지연으로 인한 중단을 최소화.
  • 리소스 효율성: 장기적인 재시도보다 짧은 지연과 간격 설정으로 리소스 소모를 줄임.

 

4.Retry 패턴 사용 주의사항

1) 무조건적인 재시도는 피해야 함:

  • 무한 재시도는 시스템에 과부하를 일으킬 수 있음.
  • 적절한 종료 조건을 설정해야 함.

2)조정 가능한 설정:

  • 재시도 횟수, 대기 시간 등을 환경이나 요구 사항에 따라 조정 가능하도록 구현.

3)Fallback 전략 통합:

  • 일정 횟수 이상 재시도에 실패하면 대체 동작(Fallback) 또는 사용자 알림 제공.

5. Retry 패턴의 발전

  • 기술 표준 : Retry는 HTTP, 데이터베이스 트랜잭션, 메시지 큐 등 다양한 프로토콜과 도구에서 표준적인 기능으로 자리 잡음.
  • 실무 적용 : 대부분의 엔터프라이즈 시스템에서 장애 복원력을 높이는 주요 전략으로 사용.
  • 지속적인 발전 : Jitter를 포함한 더 스마트한 백오프 전략이 등장하며 효율성과 안정성을 더욱 강화.
  • Retry 패턴은 현재도 진화하고 있으며, 특히 AI/ML 서비스와 IoT 분야에서도 중요한 역할을 하고 있음.

 

 

'Architecture Pattern' 카테고리의 다른 글

Rate limiting 패턴 이란 ?  (2) 2024.11.18
Proxy 패턴 이란 ?  (1) 2024.11.17
Aggregator (집계자) 패턴 이란 ?  (2) 2024.11.16
BFF (Backend for Frontend) 패턴 이란 ?  (3) 2024.11.15
Sidecar 패턴 이란 ?  (1) 2024.11.14