Timeout+Retry 조합 패턴 (Timeout+Retry Combination Pattern)

1. 개요

Timeout+Retry 조합 패턴은 재시도에 전체 시간 제한을 부여하거나, 각 개별 시도에 시간 제한을 부여하는 데코레이터 조합이다. 중첩 순서에 따라 의미론이 달라지며, 로봇 시스템에서 가장 빈번히 사용되는 데코레이터 조합 중 하나이다.

2. 패턴 1: 전체 시간 제한 + 재시도

Timeout이 외부에 배치되어, 모든 재시도를 포함한 전체 실행 시간을 제한한다.

<Timeout msec="60000">
    <RetryNode num_attempts="5">
        <Action ID="DownloadData"/>
    </RetryNode>
</Timeout>

60초 이내에 최대 5회 재시도한다. 재시도 중이라도 60초가 경과하면 전체가 halt된다.

2.1 시간 분배

N회 시도에 전체 T 시간이 허용되므로, 각 시도에 평균 T/N의 시간이 할당된다. 실제로는 각 시도의 소요 시간이 다를 수 있으므로, 초반 시도가 오래 걸리면 후반 시도의 가용 시간이 줄어든다.

3. 패턴 2: 재시도 + 개별 시간 제한

Retry가 외부에 배치되어, 각 개별 시도에 시간 제한을 부여한다.

<RetryNode num_attempts="3">
    <Timeout msec="10000">
        <Action ID="ConnectToSensor"/>
    </Timeout>
</RetryNode>

각 시도에 10초의 시간 제한이 적용된다. 한 번의 시도가 10초를 초과하면 해당 시도가 FAILURE로 처리되고, 다음 시도가 시작된다. 최대 총 소요 시간은 3 \times 10 = 30초이다.

4. 두 패턴의 비교

특성패턴 1 (Timeout 외부)패턴 2 (Retry 외부)
시간 제한 범위전체 재시도 과정각 개별 시도
최대 소요 시간T (고정)N \times T_{\text{per}}
시도 간 시간 분배불균등 가능균등
적합한 상황전체 시간 예산 제한각 시도의 응답 시간 보장

5. 복합 패턴: 전체 시간 제한 + 개별 시간 제한 + 재시도

<Timeout msec="120000">
    <RetryNode num_attempts="10">
        <Timeout msec="15000">
            <Action ID="AttemptConnection"/>
        </Timeout>
    </RetryNode>
</Timeout>

전체 2분 이내에서, 각 시도에 15초 제한으로 최대 10회 재시도한다.

6. 재시도 간 지연 포함

<Timeout msec="60000">
    <RetryNode num_attempts="5">
        <Delay delay_msec="2000">
            <Action ID="ConnectToServer"/>
        </Delay>
    </RetryNode>
</Timeout>

각 재시도 사이에 2초 간격을 두며, 전체 60초 이내에서 5회 재시도한다.

7. 설계 시 고려 사항

7.1 Timeout 값과 Retry 횟수의 일관성

전체 Timeout이 개별 시도 소요 시간 × 재시도 횟수보다 짧으면, 일부 재시도가 실행되지 못한다. 두 값의 관계를 사전에 검증하여야 한다.

7.2 패턴 선택 기준

전체 응답 시간이 중요하면 패턴 1(Timeout 외부)을, 각 시도의 공정한 시간 할당이 중요하면 패턴 2(Retry 외부)를 선택한다.

8. 참고 문헌

  • Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
  • BehaviorTree.CPP 공식 문서. https://www.behaviortree.dev/

버전날짜변경 사항
v0.12026-04-05초안 작성