24.6.2 build 파티션 내 빌드 캐싱 해시 기반 소스 파일 수정 감지 절차
ROS 2의 분산 패키지 환경에서 Colcon 메타 빌드 시스템은 전체 소스 트리를 재컴파일하는 데 소요되는 오버헤드를 극소화하기 위하여 정교한 빌드 캐싱(Build Caching) 메커니즘을 운영한다. 이 과정에서 파일 시스템의 상태 변화를 결정론적으로 판별하는 핵심 수단으로 암호학적 해시(Hash) 기반의 감지 절차가 사용된다. 이러한 캐싱 스킴은 메타데이터가 저장되는 워크스페이스 내의 build 파티션을 중심으로 수행된다.
1. 해시 기반 파일 상태 정량화의 원리
전통적인 빌드 도구들은 주로 파일의 타임스탬프(수정 시간)를 비교하여 변경 사항을 감지한다. 그러나 타임스탬프는 운영체제의 시간 동기화 문제, Git과 같은 버전 관리 시스템의 체크아웃 연산, 혹은 소스 코드의 내용이 실질적으로 변경되지 않고 메타 정보만 변경되는 경우에 신뢰성을 담보하기 어렵다.
이를 보완하기 위해 Colcon 환경(패키지에 따라 CMake 또는 ament_cmake의 내부 추적 방식을 포함)은 개별 소스 파일의 실질적인 바이너리 데이터 또는 텍스트 스트림을 해시 함수(일반적으로 MD5 혹은 SHA-256 알고리즘 사용)에 통과시켜 파일의 상태를 고유한 해시 다이제스트(Hash Digest)로 변환한다. 파일 내용이 1비트라도 변경될 경우 산출되는 해시 값은 완전히 다른 난수 열로 출력되므로, 소스 코드의 수정 여부를 무결하게 확인하는 논리적 기반을 제공한다.
2. build 파티션 내 캐시 상태 기록 구조
Colcon 빌드 도구가 특정 패키지에 대해 최초 빌드를 수행할 때, 프로세스는 소스 코드 디렉터리를 스캐닝하여 대상 파일들의 종속성 트리를 파악하고 해당 파일들의 해시 값을 생성한다. 계산된 해시 메타데이터는 워크스페이스 루트 경로 하위의 build/<package_name> 파티션 내에 특정 캐시 파일 형태로 기록되어 영구적으로 보존된다.
이 때 build 파티션 내부에는 컴파일러의 목적 파일(Object files)뿐만 아니라 빌드 설정, 의존성 트리 캐시, 해시 서명 정보가 포함된 메타데이터(CMake의 경우 CMakeCache.txt 및 내부 트리거 파일들)가 함께 저장된다. 이 파티션은 빌드 툴체인이 참조하는 상태 레지스트리(State Registry)로서의 역할을 수행한다.
3. 해시 감지 및 재빌드 트리거 절차
빌드 캐싱이 수행되는 전체 감지 절차는 다음의 단계적 워크플로우를 따른다.
- 빌드 명령 인가 및 트리 순회 탐색 (Triggering and Traversal)
colcon build명령이 실행되면, Colcon 코어는 각 패키지의 소스 디렉터리를 순회하며 소스 파일 리스트를 구성한다. - 대상 파일 해시 해상도 계산 (Hash Resolution Calculation)
스캐닝된 소스 파일 목록에 대하여 실시간으로 파일의 내용을 읽고 동일한 해시 알고리즘을 적용하여 현재 상태의 해시 다이제스트를 획득한다. - build 파티션 메타데이터 참조 및 비교 (Metadata Registry Lookup)
build파티션 내에 보존된 이전 빌드의 캐시 레지스트리를 개방하여, 직전 빌드 성공 시점에 기록되었던 대상 파일들의 해시 값을 로드한다. - 결정론적 동등성 검증 (Deterministic Equality Verification)
새로 도출된 해시 값과 캐시 레지스트리의 해시 값을 파일 단위로 비교한다.
- 캐시 히트 (Cache Hit): 모든 해시 값이 일치하는 경우, 시스템은 소스 파일에 논리적 변화가 없다고 판정한다. 목표 패키지에 대한 컴파일 및 링킹 오퍼레이션을 바이패스(Bypass)하여 기존의 빌드 산출물을 재사용한다.
- 캐시 미스 (Cache Miss): 하나 이상의 파일에서 해시 불일치가 감지되면, 파일이 수정된 것으로 간주된다. 시스템은 캐시를 무효화(Invalidation)하고 수정된 파일과 이에 의존하는 종속 파일들에 대해서만 선택적으로 재컴파일 파이프라인을 가동한다.
- 빌드 상태 캐시 갱신 (Cache Registry Update)
재컴파일이 완료되면, 새롭게 도출된 해시 값들이build파티션 내 메타데이터 영역에 덮어씌워져 다음 빌드 사이클의 기준 좌표로 활용된다.
이러한 해시 기반 변경 감지 파이프라인은 컴파일 타임을 획기적으로 낮추고 시스템 런타임 성능 평가에 필수적인 반복적인 개발 배포 사이클을 최적화하는 데 결정적으로 기여한다. (참고 버전: ROS 2 Humble/Jazzy, Colcon 0.12.x 이상)