Retry의 최대 재시도 횟수 설정 (Retry’s Maximum Attempt Count Configuration)
1. 개요
Retry 데코레이터의 최대 재시도 횟수 설정은 num_attempts 매개변수를 통해 자식 노드의 재실행을 시도할 최대 횟수를 지정하는 것이다. 이 설정은 간헐적 실패에 대한 복원력(resilience)과 영구적 실패에 대한 빠른 포기(fail-fast) 사이의 균형을 결정하며, 전체 시스템의 응답성과 효율성에 직접적인 영향을 미친다.
2. num_attempts 매개변수
2.1 정의
num_attempts는 자식 노드를 실행할 최대 총 시도 횟수를 지정한다. 첫 번째 시도를 포함하여 총 N회 시도한다.
<RetryNode num_attempts="3">
<Action ID="ConnectToServer"/>
</RetryNode>
위 설정에서 자식은 최대 3회 실행된다(최초 시도 1회 + 재시도 2회).
2.2 유효 값 범위
| 값 | 의미 |
|---|---|
| N = 1 | 재시도 없음 (1회만 시도) |
| N > 1 | N-1회 재시도 |
| N = -1 | 무한 재시도 (SUCCESS까지) |
| N = 0 | 구현 의존 (일반적으로 즉시 FAILURE 또는 1회 시도) |
2.3 블랙보드를 통한 동적 설정
<RetryNode num_attempts="{max_retries}">
<Action ID="DownloadUpdate"/>
</RetryNode>
블랙보드의 max_retries 값에 따라 재시도 횟수가 동적으로 결정된다.
3. 최적 횟수 결정 기준
3.1 실패 유형별 권장 횟수
| 실패 유형 | 특성 | 권장 횟수 |
|---|---|---|
| 네트워크 지연 | 일시적, 자동 해소 | 3~5회 |
| 센서 일시 오류 | 간헐적 | 2~3회 |
| 서비스 서버 부하 | 시간에 따라 해소 | 5~10회 (Delay와 결합) |
| 하드웨어 고장 | 영구적 | 1~2회 (빠른 포기) |
| GPS 신호 획득 | 환경 의존, 시간 소요 | 10~30회 (Timeout과 결합) |
3.2 고려 요소
- 실패의 일시성: 실패가 일시적일수록 더 많은 재시도가 효과적이다.
- 재시도 비용: 각 재시도에 소요되는 시간과 자원을 고려한다.
- 전체 시간 예산: 재시도에 허용할 수 있는 총 시간을 고려한다.
- 안전 요구: 안전에 중요한 행동은 적은 재시도 후 빠르게 포기하고 대체 전략으로 전환한다.
4. 무한 재시도 (N = -1)
무한 재시도는 자식이 SUCCESS를 반환할 때까지 무한히 재시도한다. 반드시 Timeout이나 외부 조건에 의한 종료 메커니즘과 결합하여야 한다.
<Timeout msec="60000">
<RetryNode num_attempts="-1">
<Action ID="WaitForGpsFix"/>
</RetryNode>
</Timeout>
1분 이내에 GPS 신호를 획득할 때까지 무한 재시도한다.
5. 재시도 횟수와 시간의 관계
tick 주기가 \Delta t이고, 자식 실행에 m회의 tick이 소요되는 경우, N회 재시도의 최대 소요 시간은 다음과 같다.
T_{\max} = N \times m \times \Delta t
예: tick 주기 100ms, 자식 실행 5 tick, 최대 3회 시도 → T_{\max} = 3 \times 5 \times 0.1 = 1.5초
Delay를 포함하는 경우:
T_{\max} = N \times (m \times \Delta t + d)
여기서 d는 지연 시간이다.
6. 설계 시 고려 사항
6.1 과도한 재시도의 위험
재시도 횟수가 과도하면 영구적 실패에 대해 불필요한 시간이 소모되며, 상위 행동 트리의 복구 로직으로의 전환이 지연된다. Timeout과의 결합을 통해 전체 시간을 제한하는 것이 안전하다.
6.2 재시도와 복구의 결합
단순 재시도만으로는 해결되지 않는 실패에 대해, 재시도 사이에 복구 행동(상태 초기화, 환경 변경 등)을 삽입하면 재시도 성공 확률을 높일 수 있다.
<RetryNode num_attempts="3">
<Sequence>
<Action ID="ResetSensorState"/>
<Action ID="ReadSensorData"/>
</Sequence>
</RetryNode>
7. 참고 문헌
- Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
- BehaviorTree.CPP 공식 문서. https://www.behaviortree.dev/
| 버전 | 날짜 | 변경 사항 |
|---|---|---|
| v0.1 | 2026-04-04 | 초안 작성 |