# 1. Colcon 메타 빌드 프레임워크 설계 개요
ROS 2(Robot Operating System 2)의 표준 빌드 도구로 채택된 Colcon(Collective Construction)은 단일 언어나 특정 빌드 시스템에 종속되지 않는 범용적인 메타 빌드 프레임워크(Meta-build Framework)로 설계되었다. 이는 과거 ROS 1에서 널리 사용되었던 catkin_make나 catkin_tools가 지녔던 CMake 종속성과 빌드 환경 분리(Isolation)의 한계를 극복하기 위한 아키텍처적 진화의 결과이다. Colcon은 다양한 프로그래밍 언어와 빌드 도구를 통합 관리할 수 있는 파이프라인(Pipeline) 구조를 갖추고 있다.
1.1 메타 빌드 아키텍처의 필요성
ROS 2 생태계는 본질적으로 이기종 언어(Heterogeneous Language) 및 빌드 시스템을 포함한다. 로보틱스 시스템을 구성하는 소프트웨어는 고성능 제어 루프를 위한 C++, 사용자 스크립트 및 데이터 분석을 위한 Python, 최신 웹 인터페이스를 위한 JavaScript 등 다양한 언어로 작성된다.
기존의 컴파일 기반 빌드 도구인 CMake만으로는 Python의 패키지 매니저(예: setuptools)나 다른 언어의 빌드 시스템을 원활히 통합하는 데 기술적 병목이 존재했다. 따라서 소스 코드를 컴파일하고 배포 가능한 형태(Artifact)로 변환하기 위해 개별 빌드 도구에 명령을 하달하고 의존성 계층 구조를 관리하는 상위 계층의 워크플로우 매니저(Workflow Manager)가 필수적으로 요구되었다. Colcon은 이러한 요구 사항을 충족하기 위하여 개발되었다.
1.2 확장성 중심의 플러그인 아키텍처
Colcon의 설계 철학 중 가장 핵심적인 부분은 플러그인 기반 아키텍처(Plugin-based Architecture)이다. Colcon 코어(colcon-core) 자체는 특정 빌드 시스템을 알지 못하며, 오로지 패키지를 순회(Iteration)하고 작업을 스케줄링하는 기능만을 담당한다. 실제 빌드와 테스트 등은 Python의 진입점(Entry Point) 기술을 활용한 플러그인 모듈에 의해 수행된다.
- 패키지 식별 플러그인(Package Identification Plugins): 워크스페이스 내에서
package.xml,setup.py,CMakeLists.txt등의 메타데이터 파일을 파싱하여 패키지의 이름과 의존성을 식별한다 (colcon-ros등). - 작업 확장 플러그인(Task Extension Plugins): 각 패키지의 고유한 빌드 시스템에 맞추어
build,test등의 행위를 호출한다. 예를 들어, CMake 패키지는colcon-cmake플러그인이, 순수 Python 패키지는colcon-python-setup-py가 처리한다. - 출력 서식 플러그인(Output Formatting Plugins): 빌드 과정에서 발생하는 표준 출력(stdout) 및 표준 에러(stderr) 스트림을 콘솔 환경에 맞게 필터링하거나 로깅 파일 포맷으로 변환한다 (
colcon-output).
이러한 설계는 미래에 Rust(cargo)나 Go와 같은 새로운 언어가 ROS 2 생태계에 편입되더라도, Colcon 코어를 수정할 필요 없이 새로운 플러그인 모듈만을 추가함으로써 유연하게 빌드 시스템을 확장할 수 있는 구조적 이점을 제공한다.
1.3 빌드 격리(Isolation)와 배포(Deployment) 설계
Colcon 프레임워크는 소스 공간(src), 빌드 공간(build), 설치 공간(install)을 철저하게 분리하는 Out-of-source 빌드 패러다임을 강제한다.
- 격리된 빌드 환경: 기본적으로 Colcon은 각 패키지를
build/<패키지명>이라는 독립된 디렉터리 내에서 컴파일한다. 이는 여러 패키지가 하나의 빌드 디렉터리를 공유하면서 발생하는 캐시 오염(Cache Contamination)과 의존성 충돌(Dependency Collision)을 근본적으로 방지한다. - 오버레이(Overlay) 배포 구조: 빌드의 산출물은
install/<패키지명>디렉터리에 위치하며, 최종적으로 각 패키지마다 생성된setup.bash스크립트를 통해 시스템의 환경 변수에 주입된다. 이 방식은 FHS(Filesystem Hierarchy Standard)를 준수하는 로컬 배포 환경을 용이하게 구성하여, 기존에 설치된 시스템 레벨의 ROS 2 배포판과 사용자 환경을 안전하게 분리하는 핵심 메커니즘으로 작용한다.
결과적으로 Colcon은 ROS 2 소프트웨어 개발 파이프라인에서 단순한 컴파일 호출자를 넘어, 복잡한 시스템의 통합과 융합을 조율하는 표준 인프라(Standard Infrastructure)로 기능한다.