1291.55 행동 추가와 제거의 국소적 영향 (Locality of Impact in Adding and Removing Behaviors)

1291.55 행동 추가와 제거의 국소적 영향 (Locality of Impact in Adding and Removing Behaviors)

1. 국소적 영향의 개념과 공학적 중요성

국소적 영향(locality of impact)이란 시스템의 특정 부분에 대한 수정이 해당 부분의 인접 영역에만 영향을 미치고, 시스템의 나머지 부분에는 영향을 미치지 않는 설계 속성이다. 소프트웨어 공학에서 국소적 영향은 **변경 용이성(modifiability)**의 핵심 전제 조건이다. 국소적 영향이 보장되는 시스템에서는 수정에 따른 부작용(side effect)의 범위가 예측 가능하며, 회귀 테스트(regression testing)의 범위를 수정된 영역에 한정할 수 있다.

로봇 행동 제어 시스템에서 행동의 추가와 제거는 개발 생명주기 전반에 걸쳐 빈번하게 발생하는 연산이다. 새로운 임무 유형의 도입, 센서 모듈의 추가, 안전 요구사항의 변경, 작전 환경의 변화 등에 의하여 기존 행동의 수정, 새로운 행동의 추가, 또는 불필요한 행동의 제거가 지속적으로 요구된다. 이때, 하나의 행동을 추가하거나 제거하는 연산이 기존 행동에 광범위한 파급 효과(ripple effect)를 유발하면, 수정의 비용이 급증하고 회귀 오류의 발생 확률이 높아진다.

행동 트리(Behavior Tree, BT)는 그 구조적 특성에 의하여 행동의 추가와 제거가 국소적 영향만을 갖는 설계 속성을 내재적으로 제공한다.

2. 행동 트리에서의 행동 추가

2.1 노드 삽입의 국소성

행동 트리에서 새로운 행동을 추가하는 연산은 적절한 위치의 제어 노드에 새로운 자식 노드를 삽입하는 것으로 이루어진다. 이 삽입 연산에서 수정되는 요소는 다음으로 한정된다.

  1. 삽입 대상 제어 노드: 자식 리스트에 새 노드가 추가된다.
  2. 새로 삽입되는 노드: 새 노드 자체의 구현이 정의된다.

기존에 존재하는 다른 노드의 내부 구현, 다른 서브트리의 구조, 또는 트리의 다른 영역에 있는 제어 노드에 대한 수정은 요구되지 않는다.

예를 들어, 기존의 순찰 행동 트리에 “주기적 상태 보고” 기능을 추가하는 경우를 고려한다.

추가 이전:
Sequence
├── Action: "ComputePatrolPath"
├── Action: "FollowPath"
└── Action: "WaitAtWaypoint"

추가 이후:
Sequence
├── Action: "ComputePatrolPath"
├── Action: "FollowPath"
├── Action: "ReportStatus"          ← 새로 추가
└── Action: "WaitAtWaypoint"

이 수정에서 ComputePatrolPath, FollowPath, WaitAtWaypoint 노드는 어떠한 변경도 받지 않았다. 변경의 범위는 오직 Sequence 노드의 자식 리스트에 ReportStatus가 추가된 것에 한정된다.

2.2 서브트리 삽입의 국소성

더 복잡한 행동 패턴을 추가하는 경우에도, 해당 행동 패턴을 서브트리로 캡슐화하여 삽입하면 동일한 국소성이 유지된다.

추가 이전:
ReactiveFallback
├── SubTree: "SafetyMonitor"
└── SubTree: "PatrolMission"

추가 이후:
ReactiveFallback
├── SubTree: "SafetyMonitor"
├── SubTree: "LowBatteryResponse"   ← 새로 추가
└── SubTree: "PatrolMission"

SafetyMonitorPatrolMission 서브트리는 수정되지 않았으며, 새로운 LowBatteryResponse 서브트리의 삽입이 기존 서브트리의 동작에 구조적 영향을 미치지 않는다. ReactiveFallback 노드의 자식 순서에 의하여, LowBatteryResponsePatrolMission보다 높은 우선순위로 평가되는 것이 유일한 의미론적 변화이다.

3. 행동 트리에서의 행동 제거

3.1 노드 삭제의 국소성

행동 트리에서 기존 행동을 제거하는 연산은 해당 노드를 부모의 자식 리스트에서 삭제하는 것으로 완료된다. 삭제된 노드와 동일한 부모 아래의 형제 노드, 또는 트리의 다른 영역에 있는 노드에 대한 수정은 요구되지 않는다.

\mathcal{T}' = \mathcal{T} \setminus \{n_{\text{removed}}\} \cup \text{subtree}(n_{\text{removed}})

여기서 노드 n_{\text{removed}}와 그 하위 서브트리가 제거되며, 트리의 나머지 구조는 보존된다.

3.2 서브트리 삭제의 국소성

서브트리 단위의 제거도 동일한 국소성을 갖는다. 더 이상 필요하지 않은 기능에 대응하는 서브트리를 상위 트리의 자식 리스트에서 제거하면, 해당 기능이 행동 트리에서 완전히 제거된다. 제거된 서브트리가 상위 트리와 교환하던 포트 매핑이 소멸되는 것 외에, 다른 서브트리에 대한 어떠한 수정도 필요하지 않다.

4. 유한 상태 머신에서의 파급 효과

유한 상태 머신(FSM)에서는 행동의 추가와 제거가 국소적 영향을 갖지 않는다. 그 근본적 원인은 상태 간 전이의 명시적 참조(explicit reference) 구조에 있다.

4.1 행동 추가 시의 파급 효과

유한 상태 머신에 새로운 상태 s_{new}를 추가하려면, 다음의 연산이 필요하다.

  1. s_{new}의 내부 동작 정의
  2. 기존 상태에서 s_{new}로의 진입 전이(incoming transition) 정의: 기존 상태의 전이 규칙 수정 필요
  3. s_{new}에서 기존 상태로의 탈출 전이(outgoing transition) 정의

이 과정에서 기존 상태의 전이 규칙을 수정하여야 하며, 이 수정이 기존 전이 조건과의 우선순위 충돌이나 비결정적 전이의 발생 등 부작용을 유발할 수 있다. 수정의 범위는 s_{new}와 전이 관계에 있는 모든 기존 상태에 확산된다.

4.2 행동 제거 시의 파급 효과

유한 상태 머신에서 상태 s_{del}을 제거하려면, s_{del}을 목표로 하는 모든 전이 규칙을 식별하고 수정하여야 한다. 이 전이 규칙은 다수의 기존 상태에 분산되어 있으므로, 제거의 영향이 전역적으로 확산된다. 또한, s_{del}에서 다른 상태로의 탈출 전이가 존재하는 경우, 이 전이의 대안적 경로를 설계하여야 한다.

4.3 변경 영향 범위의 정량적 비교

연산유한 상태 머신행동 트리
행동 추가 시 수정 대상새 상태 + 관련 전이의 원천 상태들 (O(\text{deg}_{in})개)삽입 지점의 부모 노드 (O(1)개)
행동 제거 시 수정 대상삭제 상태 + 해당 상태를 참조하는 모든 전이의 원천 상태들 (O(\text{deg}_{in})개)삭제 노드의 부모 노드 (O(1)개)
회귀 테스트 범위수정된 전이의 모든 경로 (O(n) 경로)수정된 서브트리 (O(1)개 서브트리)

여기서 \text{deg}_{in}은 해당 상태로의 진입 전이 수, n은 전체 상태 수이다. 행동 트리에서는 변경 연산의 영향 범위가 시스템 규모와 무관하게 상수적으로 유지된다.

5. 국소적 영향의 구조적 보장

5.1 전이 규칙의 부재

행동 트리에서 국소적 영향이 보장되는 근본적 이유는 명시적 전이 규칙이 존재하지 않는다는 데 있다. 유한 상태 머신에서 전이 규칙은 상태 간의 명시적 참조를 생성하며, 이 참조가 수정의 파급 경로를 형성한다. 행동 트리에서는 제어 흐름이 제어 노드의 유형(Sequence, Fallback 등)과 자식 노드의 배치 순서에 의하여 암묵적으로 결정되므로, 노드 간의 명시적 참조가 존재하지 않는다.

따라서 하나의 노드를 추가하거나 제거하더라도, 다른 노드가 해당 노드를 명시적으로 참조하고 있지 않으므로 파급 효과가 구조적으로 발생하지 않는다.

5.2 서브트리 격리에 의한 영향 범위 차단

서브트리의 경계는 파급 효과의 확산을 차단하는 방화벽(firewall) 역할을 한다. 서브트리 내부에서 발생한 수정(노드의 추가, 제거, 교체)은 서브트리의 외부에 영향을 미치지 않는다. 서브트리가 상위 트리에 반환하는 상태의 의미가 보존되는 한, 서브트리 내부의 구조 변경은 상위 트리의 관점에서 투명(transparent)하다.

\text{output}(\mathcal{T}_v) = \text{output}(\mathcal{T}_v') \implies \text{behavior}(\mathcal{T}) = \text{behavior}(\mathcal{T}')

여기서 \mathcal{T}_v\mathcal{T}_v'은 수정 전후의 서브트리이다. 서브트리의 외부 출력이 동일하면, 전체 트리의 행동도 동일하게 보존된다.

6. 실용적 시나리오

6.1 점진적 기능 추가

로봇 시스템의 현장 운용 중에 새로운 기능이 요구되는 경우, 행동 트리에서는 해당 기능에 대응하는 노드 또는 서브트리를 적절한 위치에 삽입하는 것만으로 기능 추가가 완료된다. 기존에 검증된 행동 논리에 대한 수정이 불필요하므로, 기능 추가에 따른 회귀 오류의 위험이 최소화된다.

6.2 기능 비활성화 및 제거

특정 기능을 일시적으로 비활성화하거나 영구적으로 제거하는 경우에도, 해당 노드 또는 서브트리를 삭제하거나 Decorator 노드를 통하여 우회(bypass)시키면 된다. 제거 또는 비활성화가 트리의 다른 부분에 구조적 영향을 미치지 않으므로, 안전하게 기능 조정이 가능하다.

6.3 A/B 테스트와 행동 변형

동일한 기능에 대한 서로 다른 구현을 비교하는 A/B 테스트에서, 행동 트리의 국소적 영향 속성은 특히 유용하다. 하나의 서브트리를 대안적 구현의 서브트리로 교체하더라도, 트리의 나머지 부분에는 영향이 없으므로, 비교 대상 외의 변수가 통제된다.

7. 국소적 영향의 한계

7.1 블랙보드를 통한 암묵적 의존성

행동 트리의 구조적 국소성에도 불구하고, 블랙보드(blackboard)를 통한 데이터 공유는 노드 간의 암묵적 의존성을 생성할 수 있다. 추가된 노드가 기존 노드와 동일한 블랙보드 키를 읽거나 쓰는 경우, 데이터 흐름 차원에서의 파급 효과가 발생할 수 있다. 이 위험을 완화하기 위하여 BehaviorTree.CPP 4.x의 포트 선언과 블랙보드 네임스페이스 격리를 엄격히 적용하여야 한다.

7.2 의미론적 의존성

구조적 국소성이 보장되더라도, 의미론적 수준에서의 의존성이 존재할 수 있다. 예를 들어, Sequence 노드의 자식 순서가 임무의 논리적 순서를 나타내는 경우, 새 노드의 삽입 위치가 임무의 의미론적 정합성에 영향을 미칠 수 있다. 따라서 노드 삽입 시에는 구조적 국소성뿐만 아니라 의미론적 적합성도 확인하여야 한다.

8. 참고 문헌

  • Colledanchise, M., & Ögren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
  • Colledanchise, M., & Ögren, P. (2017). “How Behavior Trees Modularize Hybrid Control Systems and Generalize Sequential Behavior Compositions, the Subsumption Architecture, and Decision Trees.” IEEE Transactions on Robotics, 33(2), 372–389.
  • Faconti, D. (2022). BehaviorTree.CPP 4.x Documentation. https://www.behaviortree.dev/
  • Iovino, M., Scukins, E., Styrud, J., Ögren, P., & Smith, C. (2022). “A Survey of Behavior Trees in Robotics and AI.” Robotics and Autonomous Systems, 154, 104096.

버전: 2026-03-31