1291.61 명시적 상태 추적의 부재

행동 트리(Behavior Tree, BT)는 설계 철학적으로 무상태(Stateless) 실행 모델을 기반으로 한다. 매 틱(Tick) 주기마다 루트 노드로부터 트리를 재순회하여 현재 환경 조건에 따라 실행할 행동을 결정하는 반응형(Reactive) 특성은, 유한 상태 머신(Finite State Machine, FSM)이 내부에 명시적인 현재 상태(Current State) 변수를 유지하며 상태 전이(State Transition)를 추적하는 방식과 근본적으로 상이하다. 이러한 무상태 설계는 행동 트리의 모듈성과 반응성이라는 핵심 장점을 제공하지만, 동시에 명시적 상태 추적의 부재라는 내재적 한계를 수반한다.

1. 무상태 실행 모델의 본질적 특성

유한 상태 머신에서는 시스템의 현재 상태가 단일 변수로 명시적으로 정의되며, 이 상태 변수가 시스템의 과거 이력을 압축적으로 나타낸다. 특정 입력 사건(Event)이 발생하면 현재 상태와 전이 함수(Transition Function)에 의해 다음 상태가 결정론적으로 결정되므로, 시스템의 동작 이력과 현재 위치를 정확하게 추적할 수 있다.

반면, 행동 트리의 개별 노드는 기본적으로 이전 틱에서의 실행 결과나 이력을 보존하지 않는다. 각 틱에서 노드는 현재 시점의 조건만을 평가하여 Success, Failure, 또는 Running 중 하나의 상태를 반환한다. 시퀀스(Sequence) 노드의 변형인 메모리 시퀀스(SequenceWithMemory) 노드가 이전 틱에서 성공한 자식 노드의 인덱스를 기억하여 실행 위치를 유지하지만, 이는 제어 흐름 내의 지역적 실행 위치만을 임시 보존하는 것이다. 시스템 전체의 논리적 상태나 임무 진행 단계를 구조적으로 포착하는 기능은 행동 트리 자체의 구조에 내장되어 있지 않다.

2. 과거 이력 참조의 구조적 결핍

로봇 시스템의 임무 수행에서는 과거에 발생한 사건이나 완료된 작업 단계에 대한 참조가 빈번하게 요구된다. 예를 들어, 이동 로봇이 특정 지점을 이미 방문하였는지, 매니퓰레이터가 특정 물체를 이미 파지(Grasp)하였는지, 또는 이전 시도에서 특정 오류가 발생하였는지에 따라 후속 행동이 달라져야 하는 경우가 존재한다.

유한 상태 머신에서는 이러한 이력 정보가 상태 자체에 내포된다. 시스템이 “물체 파지 완료” 상태에 있다면, 파지 행동이 과거에 성공하였다는 사실이 현재 상태에 의해 자명하게 표현된다. 그러나 행동 트리에서는 동일한 정보를 표현하기 위해 외부 메모리 구조에 명시적으로 기록하고 이를 조건 노드를 통해 반복적으로 검사하는 별도의 메커니즘을 설계해야 한다. 행동 트리의 구조만으로는 과거 실행 이력에 대한 질의(Query)를 처리할 수 없으며, 이는 임무 논리의 복잡도가 증가할수록 더욱 현저한 제약으로 작용한다.

3. 블랙보드 의존성과 아키텍처적 부작용

행동 트리 시스템은 명시적 상태 추적의 부재를 보완하기 위해 블랙보드(Blackboard) 패턴을 도입한다. 블랙보드는 키-값(Key-Value) 쌍으로 구성된 공유 메모리 공간으로, 행동 트리의 각 노드가 센서 데이터, 임무 매개변수, 논리적 상태 플래그 등을 읽고 쓸 수 있는 인터페이스를 제공한다. BehaviorTree.CPP 라이브러리에서는 입력 포트(Input Port)와 출력 포트(Output Port)를 통해 노드와 블랙보드 간의 데이터 교환을 구조화한다.

그러나 블랙보드에 대한 의존은 다음과 같은 아키텍처적 부작용을 야기한다.

첫째, 노드 간 결합도의 증가가 발생한다. 행동 트리의 노드가 블랙보드의 특정 키 이름과 데이터 타입에 의존하게 되면, 해당 노드는 해당 블랙보드 스키마를 전제하는 트리에서만 재사용이 가능하다. 이는 행동 트리가 지향하는 노드 단위의 독립성과 재사용성 원칙에 위배된다.

둘째, 트리 구조의 비대화가 초래된다. 유한 상태 머신에서 단일 상태 전이 규칙으로 표현할 수 있는 논리를, 행동 트리에서는 블랙보드 값을 설정하는 액션(Action) 노드, 값을 검사하는 조건(Condition) 노드, 그리고 이들을 연결하는 제어 흐름(Control Flow) 노드의 조합으로 구현해야 한다. 상태 의존적 논리가 증가할수록 트리의 깊이와 너비가 비례적으로 증가하며, 이는 트리의 가독성과 유지보수성을 저하시킨다.

셋째, 상태 공간의 암묵적 분산이 발생한다. 유한 상태 머신에서는 시스템의 전체 상태 공간(State Space)이 상태 전이 도표(State Transition Diagram)에 의해 명시적으로 정의된다. 그러나 행동 트리에서는 시스템의 논리적 상태가 블랙보드 내 다수의 변수 조합과 트리 내 분산된 조건 노드들에 의해 암묵적으로 결정된다. 이로 인해 시스템이 도달할 수 있는 전체 상태 조합을 열거하거나, 특정 상태 조합에서의 동작을 예측하는 것이 현저히 어려워진다.

4. 예외 복구 논리 설계의 복잡성

로봇 시스템에서는 임무 수행 중 센서 오류, 통신 장애, 물리적 충돌 등 다양한 예외 상황이 발생한다. 유한 상태 머신에서는 현재 상태에 따라 허용 가능한 전이 경로와 예외 처리기(Exception Handler)를 명시적으로 지정할 수 있으므로, 예외 상황에 대한 정밀한 대응 논리를 설계할 수 있다.

행동 트리에서는 폴백(Fallback) 노드를 활용하여 자식 노드의 실패에 대한 대안적 행동을 정의한다. 그러나 폴백 노드는 직계 자식 노드의 반환 상태만을 기반으로 대안을 선택하므로, 트리의 깊은 수준에서 발생한 실패의 정확한 원인이나 맥락(Context)을 상위 노드로 전달하는 메커니즘이 구조적으로 부재하다. 특정 액션 노드가 Failure를 반환하였을 때, 해당 실패가 센서 오류에 의한 것인지, 목표 위치의 변경에 의한 것인지, 또는 물리적 장애물에 의한 것인지를 행동 트리 구조 자체에서 구분하기 위해서는 추가적인 블랙보드 변수 설정과 조건 분기가 필요하다.

이러한 구조적 특성으로 인해, 복잡한 예외 복구 시나리오를 행동 트리로 구현할 경우 폴백 노드의 중첩이 심화되고 블랙보드 기반의 상태 플래그가 과도하게 증식하는 경향이 나타난다. Colledanchise와 Ögren(2018)은 행동 트리의 이러한 한계를 지적하면서, 복잡한 상태 의존적 복구 논리가 요구되는 경우 행동 트리와 상태 머신의 하이브리드 아키텍처가 효과적인 대안이 될 수 있음을 제시하였다.

5. 형식적 검증의 제약

명시적 상태 추적의 부재는 행동 트리의 형식적 검증(Formal Verification)에도 제약을 가한다. 유한 상태 머신은 상태 공간이 명시적으로 정의되므로 모델 검사(Model Checking) 기법을 통해 도달 가능성(Reachability), 교착 상태(Deadlock) 부재, 활동성(Liveness) 등의 속성을 정형적으로 검증할 수 있다.

행동 트리에서는 시스템의 논리적 상태가 블랙보드 변수의 조합과 노드 실행 순서에 의해 동적으로 결정되므로, 상태 공간을 정적으로 추출하기가 용이하지 않다. Biggar, Zamani, Shames(2020)는 행동 트리를 이산 사건 시스템(Discrete Event System)으로 변환하여 형식적 분석을 수행하는 프레임워크를 제안하였으나, 블랙보드 변수의 동적 변화를 포함한 완전한 상태 공간 탐색에는 여전히 계산적 복잡도의 문제가 존재한다.

6. 실무적 대응 전략

행동 트리의 명시적 상태 추적 부재에 대한 실무적 대응 전략은 크게 세 가지로 분류된다.

첫째, 블랙보드 스키마의 체계적 설계이다. 블랙보드에 저장되는 상태 변수의 명명 규칙, 데이터 타입, 접근 권한을 사전에 정의하고 문서화하여 노드 간 결합도를 관리한다. BehaviorTree.CPP에서 제공하는 포트(Port) 기반 인터페이스를 활용하면 컴파일 시점에 타입 안전성을 부분적으로 확보할 수 있다.

둘째, 상태 관리 전용 서브트리의 분리이다. 임무의 논리적 상태를 갱신하고 검사하는 노드들을 별도의 서브트리로 분리하여, 임무 수행 로직과 상태 관리 로직 간의 관심사 분리(Separation of Concerns)를 달성한다.

셋째, 하이브리드 아키텍처의 채택이다. 행동 트리 내부에서 상태 의존적 논리가 과도하게 복잡해지는 영역에 한하여 유한 상태 머신을 내장(Embed)하는 방식이다. 행동 트리의 특정 액션 노드가 내부적으로 유한 상태 머신을 실행함으로써, 상태 추적이 필요한 국소적 영역에서는 명시적 상태 관리의 이점을 활용하면서도 전체 아키텍처 수준에서는 행동 트리의 모듈성과 반응성을 유지할 수 있다.


참고 문헌

  • Colledanchise, M., & Ögren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
  • Biggar, O., Zamani, M., & Shames, I. (2020). “A Framework for Formal Verification of Behavior Trees with Linear Temporal Logic.” IEEE Robotics and Automation Letters, 5(2), 2435–2442.
  • Iovino, M., Scukins, E., Styrud, H., Ögren, P., & Smith, C. (2022). “A Survey of Behavior Trees in Robotics and AI.” Robotics and Autonomous Systems, 154, 104096.
  • Ghzouli, R., Endler, M., Berger, T., & Wasowski, A. (2020). “Behavior Trees in Action: A Study of Robotics Applications.” Proceedings of the ACM/IEEE International Conference on Software Engineering (ICSE).