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 |