## 0.1 기능 확장을 위한 파이썬 플러그인 확장 가능 인터페이스 아키텍처
Colcon 빌드 시스템이 다양한 프로그래밍 언어와 빌드 도구를 수용하며 막대한 유연성을 확보할 수 있는 근본적인 원동력은 파이썬(Python) 기반의 플러그인 아키텍처(Plugin Architecture)에 기인한다. 단일화된 모놀리식(Monolithic) 빌드 애플리케이션 대신, Colcon은 시스템 기능을 작고 독립적인 컴포넌트로 분리하고 이를 동적으로 로드(Dynamic Load) 및 연결하는 익스텐션 포인트(Extension Point) 설계 패턴을 채택하였다. 이 아키텍처를 통해 코어 로직의 수정 없이도 새로운 기능을 주입할 수 있는 강력한 확장성 인터페이스를 제공한다.
0.1.1 Python Entry Points 메커니즘을 통한 동적 식별
Colcon의 플러그인 시스템은 파이썬의 표준 패키징 도구인 setuptools에서 제공하는 진입점(Entry Points) 메커니즘에 기반한다. 각 플러그인 패키지는 패키지 설치 메타데이터(setup.cfg 또는 setup.py) 내에 자신이 Colcon 프레임워크의 어느 확장 지점에 기여할 것인지를 명시적으로 선언한다.
예를 들어, 패키지 탐색 플러그인의 경우 colcon_core.package_discovery라는 진입점 그룹(Entry Point Group)에 등록된다. Colcon 실행 시, 코어 프레임워크(colcon-core)는 전역(Global) 혹은 가상 파이썬 환경(Virtual Environment)에 설치된 패키지 중 해당 그룹 식별자를 가진 모든 진입점을 동적으로 스캔하여 메모리에 적재한다. 이러한 ‘발견 지향적(Discovery-oriented)’ 아키텍처는 플러그인 간의 결합도를 최소화하고, 외부 기여자가 독자적인 패키지 생태계를 구성하여 빌드 시스템 기능을 확장할 수 있게 하는 핵심 기반이 된다.
0.1.2 다형성을 위한 확장 포인트(Extension Point) 추상화 인터페이스
코어 프레임워크는 플러그인들이 준수해야 할 추상화된 베이스 클래스(Base Class) 인터페이스를 모듈의 성격에 따라 구획화하여 제공한다. 새로운 기능을 이식하기 위해서는 이 인터페이스를 상속받아 명세된 메서드들을 구현(Override)하기만 하면 된다. Colcon 시스템 내 주요 확장 포인트는 다음과 같이 분류된다.
PackageDiscoveryExtensionPoint: 지정된 파일 시스템 경로에서 패키지의 존재 여부를 확인하고, 루트 디렉터리 경로를 수집하는 역할을 수행한다.PackageIdentificationExtensionPoint: 수집된 패키지 디렉터리의 메타데이터 파일(예:package.xml,setup.py)을 분석하여 패키지 이름 및 하드웨어/소프트웨어 아키텍처 의존성(Dependencies)을 단방향 그래프 엣지(Edge) 형태로 반환한다.TaskExtensionPoint: 특정 빌드 시스템(CMake, Make, Bazel 등)을 지닌 패키지를 대상으로 실제 컴파일이나 테스트 스크립트 실행 명령 계층(Command Execution Layer)을 추상화한다.EventHandlerExtensionPoint: 빌드 프로세스 전반에 걸쳐 발생하는 라이프사이클 이벤트(예: 빌드 시작, 패키지 빌드 성공, 에러 발생)를 후킹(Hooking)하여 화면 통계 출력, 로깅, 통합 테스트 결과 포매팅 기능을 이양받는다.
0.1.3 모듈별 격리 및 선택적 조합적 실행(Composable Execution)
이러한 확장 가능 인터페이스의 지향점은 모듈별 철저한 격리(Isolation)와 사용자 요구사항에 맞춘 조합성(Composability)이다. Colcon은 실행 시 사용자 입력 파라미터 유무, 시스템 환경 등에 따라 어떤 플러그인을 활성화할지 결정한다.
예컨대 ROS 2 개발 환경에서 colcon-ros 플러그인이 설치되어 있다면 package.xml을 해석할 수 있는 식별 능력이 부여되며, colcon-cmake가 설치되어 있다면 CMakeLists.txt 기반 패키지의 build 태스크를 수행할 전략(Strategy) 객체가 동적으로 인스턴스화된다. 만일 사용자가 ROS 2 코어 통신에 필요한 Rust 언어 바인딩을 추가로 컴파일해야 할 경우, 프레임워크 수정이 아닌 colcon-cargo라는 독립된 플러그인 배포를 통해 Cargo 빌드 시스템 인터페이스를 손쉽게 추가 주입하게 된다.
결과적으로 이 파이썬 기반 플러그인 아키텍처 철학은 프레임워크의 유지보수 부담을 분산시키고 광범위한 언어 및 도구 체인 환경 변화를 즉각적으로 수용할 수 있는 학제적 생태계 구축의 초석을 마련하였다.