Retry의 실패 시 재시도 규칙 (Retry’s Failure-Triggered Retry Rule)
1. 개요
Retry 데코레이터의 실패 시 재시도 규칙은 자식 노드가 FAILURE를 반환하였을 때, 즉시 실행을 포기하지 않고 다음 tick에서 자식을 다시 실행하는 메커니즘을 정의한다. 이 규칙은 간헐적(intermittent) 실패에 대한 자동 복구를 가능하게 하며, 네트워크 통신 오류, 센서 일시적 장애, 경쟁 조건(race condition)에 의한 일회성 실패 등에 효과적이다.
2. 재시도 트리거 조건
2.1 FAILURE만이 재시도를 트리거
Retry의 재시도는 오직 자식의 FAILURE 반환에 의해서만 트리거된다.
| 자식 반환 | 재시도 발생 여부 | 이유 |
|---|---|---|
| SUCCESS | 아니오 | 성공적 완료 |
| FAILURE | 예 | 재시도 필요 |
| RUNNING | 아니오 | 아직 실행 중 |
2.2 RUNNING과 FAILURE의 구분
자식이 RUNNING을 반환하는 동안에는 재시도가 발생하지 않는다. RUNNING은 자식이 정상적으로 실행 중임을 나타내므로, 재시도가 아닌 실행 계속이 올바른 동작이다. 자식이 실행을 완료하고 FAILURE를 최종 반환할 때에만 재시도가 트리거된다.
3. 재시도 과정의 상세
3.1 단계별 동작
- 자식 tick: Retry가 자식의
executeTick()을 호출한다. - FAILURE 수신: 자식이
FAILURE를 반환한다. - 카운터 확인: 재시도 카운터 k가 최대 횟수 N 미만인지 확인한다.
- 카운터 증가: k \leftarrow k + 1
- RUNNING 반환: Retry가
RUNNING을 반환하여, 다음 tick에서 자식이 재실행되도록 한다. - 자식 재실행: 다음 tick에서 자식이 처음부터 다시 실행된다.
3.2 RUNNING 반환의 의미
Retry가 자식의 FAILURE 후 RUNNING을 반환하는 것은, “재시도를 준비 중이며 아직 최종 결과가 결정되지 않았음“을 부모 노드에 전달하는 것이다. 이를 통해 부모 노드는 Retry가 아직 작업 중임을 인지하고 다음 tick에서 Retry를 다시 tick한다.
4. 재시도와 자식의 halt
자식이 FAILURE를 반환한 시점에서 자식은 이미 실행이 완료된 상태이므로, 재시도 전에 별도의 halt가 필요하지 않다. FAILURE는 자식이 정상적으로 종료(완료)되었음을 나타내는 최종 상태이다.
그러나 자식이 RUNNING 상태에서 Retry 전체가 외부에서 halt되면, 자식의 halt도 함께 호출되어야 한다.
5. 재시도 규칙의 실용적 적용
5.1 간헐적 실패에 대한 효과
시도 1: ConnectToSensor → FAILURE (네트워크 지연)
시도 2: ConnectToSensor → FAILURE (지연 지속)
시도 3: ConnectToSensor → SUCCESS (연결 성공)
→ Retry = SUCCESS
5.2 영구적 실패에 대한 동작
시도 1: ConnectToSensor → FAILURE (센서 고장)
시도 2: ConnectToSensor → FAILURE (센서 고장)
시도 3: ConnectToSensor → FAILURE (센서 고장)
→ Retry = FAILURE (재시도 소진)
영구적 실패에 대해서는 재시도가 효과적이지 않으며, 지정된 횟수를 모두 소진한 후 최종적으로 FAILURE를 반환한다.
6. 즉시 재시도와 지연 재시도
6.1 즉시 재시도 (기본)
Retry의 기본 동작은 다음 tick에서 즉시 자식을 재실행하는 것이다. tick 주기가 짧으면 재시도 간격도 짧다.
6.2 지연 재시도 (Delay 결합)
재시도 사이에 일정 시간 대기가 필요한 경우 Delay를 결합한다.
<RetryNode num_attempts="3">
<Delay delay_msec="1000">
<Action ID="ConnectToSensor"/>
</Delay>
</RetryNode>
각 재시도 사이에 1초 대기한다. 이는 서버 부하 분산이나 네트워크 안정화 대기에 유용하다.
7. 설계 시 고려 사항
7.1 재시도가 유효한 경우
재시도는 실패 원인이 일시적이고 재시도 시 해소될 가능성이 있을 때에만 유효하다. 영구적 오류(하드웨어 고장, 잘못된 설정)에 대한 재시도는 시간만 소모할 뿐이다.
7.2 재시도 사이의 상태 변화
재시도 사이에 환경이나 시스템 상태가 변화하여야 재시도가 의미가 있다. 동일한 조건에서의 반복 실패는 재시도로 해결되지 않는다.
8. 참�� 문헌
- 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 | 초안 작성 |