워크스페이스와 colcon 연습문제 정답
시행일·최종 수정일: 2026년 9월 1일
정답을 보기 전에
먼저 각 문제에 자신의 말로 답해본 뒤 해설과 비교해 보세요. 표현이 달라도 핵심 개념과 계산 과정이 맞으면 정답으로 볼 수 있습니다.
1. Workspace의 src, build, install, log 역할과 Git 관리 범위를 설명하세요.
정답과 해설
src에는 Package Source를 두고 Git으로 관리합니다. build는 중간 산물, install은 실행 가능한 설치 결과, log는 Build·Test 기록입니다. 세 산출물 Directory는 보통 Git에서 제외하고 원본 Data를 저장하지 않습니다.
2. colcon이 Package를 발견하고 Build 순서를 정하는 과정을 설명하세요.
정답과 해설
현재 Base Path 아래의 Manifest와 Build Metadata로 Package를 발견하고 package.xml Dependency Graph를 만듭니다. 그 Graph를 Topological Order로 정렬해 Dependency가 Consumer보다 먼저 Build되도록 Task를 실행합니다.
3. Interface·Node·Bringup Package를 분리하는 이유와 Build Type을 쓰세요.
정답과 해설
Interface는 Message만 재사용하도록 보통 ament_cmake, Python Node는 ament_python, C++ Node는 ament_cmake를 사용합니다. Bringup은 Launch·Config를 분리해 Robot별 구성을 재사용하며 Python 또는 CMake Package로 설치할 수 있습니다.
4. package.xml Dependency가 Build, rosdep과 배포에 미치는 영향을 설명하세요.
정답과 해설
colcon이 Build 순서를 정하고 ament가 Export Dependency를 구성하며 rosdep이 다른 Computer의 OS Dependency를 설치하는 근거입니다. 누락하면 개발 PC의 우연한 설치로만 성공하고 깨끗한 CI·배포 환경에서 실패할 수 있습니다.
5. ament_python의 console_scripts, Resource Index와 data_files 역할을 설명하세요.
정답과 해설
console_scripts는 ros2 run 실행 이름과 Python 함수 Entry Point를 연결합니다. Resource Marker와 package.xml은 ament Index에 Package를 등록하고 data_files는 Launch·YAML 같은 Resource를 Share Directory에 설치합니다.
6. ament_cmake의 add_executable, ament_target_dependencies, install과 ament_package 역할을 설명하세요.
정답과 해설
add_executable은 Binary Target, ament_target_dependencies는 Include·Library Dependency를 연결합니다. install은 ros2 run과 Share Resource 위치를 만들고 ament_package는 Config와 ament Index 정보를 완성합니다.
7. --packages-select, --packages-up-to와 --packages-above-and-dependencies의 Graph 방향을 비교하세요.
정답과 해설
select A는 A만, up-to A는 A와 A가 요구하는 재귀 Dependency를 포함합니다. above-and-dependencies A는 A에 의존하는 Consumer들과 그 Consumer들이 Build에 요구하는 Dependency까지 포함해 변경 영향 시험에 적합합니다.
8. --symlink-install로 바로 반영되는 변경과 재Build가 필요한 변경을 구분하세요.
정답과 해설
설치 결과가 Link된 기존 Python Source 내용 수정은 즉시 반영될 수 있습니다. 새 File, console_scripts, setup Metadata, data_files·CMake Install Rule 변경과 C++ Source 변경은 Build 또는 Compile·Install을 다시 해야 합니다.
9. Isolated Install과 Merge Install의 장단점을 설명하세요.
정답과 해설
Isolated는 Package별 Prefix라 경계와 누락 Dependency가 잘 보이지만 Path가 길어집니다. Merge는 하나의 Prefix라 Environment가 짧지만 선언하지 않은 Dependency가 우연히 보여 Manifest 누락을 숨길 수 있습니다.
10. setup.bash와 local_setup.bash, Underlay와 Overlay의 관계를 설명하세요.
정답과 해설
setup.bash는 현재 Workspace와 Build 당시 Underlay Chain을 포함해 환경을 구성하고 local_setup.bash는 현재 Prefix 중심으로 적용합니다. ROS 설치 Underlay 뒤에 Project Overlay를 Source하면 같은 Package는 뒤 Overlay가 우선할 수 있습니다.
11. Build 성공 후에도 colcon test-result --verbose를 확인해야 하는 이유는 무엇인가요?
정답과 해설
Build 성공은 Compile·Install만 완료됐다는 뜻입니다. Unit·Lint·Launch·Integration Test는 별도이며 test-result가 Result File을 모아 실패, Error와 미실행 상태를 보여 주므로 CI 판정에 포함해야 합니다.
12. colcon-defaults.yaml과 Mixin을 어떤 상황에 사용하나요?
정답과 해설
Defaults File은 Project별 반복 Build·Test Option을 고정합니다. Mixin은 Debug, Release, Sanitizer처럼 이름 있는 Option 묶음을 여러 Workspace에서 재사용할 때 사용하며 외부 Definition Source와 Version을 검토해야 합니다.
13. .repos File과 vcs export --exact가 재현 가능한 Source 관리에 필요한 이유는 무엇인가요?
정답과 해설
여러 Repository URL과 Revision을 한 번에 복원합니다. Branch는 시간이 지나 가리키는 Commit이 바뀔 수 있으므로 Release에서 vcs export --exact로 정확한 Commit을 기록하면 같은 Source 집합을 다시 가져올 수 있습니다.
14. CI가 개발 PC와 달리 깨끗한 환경에서 Build해야 하는 이유를 설명하세요.
정답과 해설
개발 PC의 이전 Install, Global Python Package와 미선언 Apt Dependency가 Manifest 오류를 숨길 수 있습니다. 깨끗한 Runner에서 rosdep부터 Build·Test하면 선언된 Source와 Dependency만으로 재현되는지 검증할 수 있습니다.
15. No executable found, Launch File 누락과 Custom Message Import 오류를 각각 진단하는 순서를 쓰세요.
정답과 해설
pkg executables로 Entry Point·CMake Install을 확인합니다. Launch는 실제 Package Prefix의 Share File과 data_files·install Rule을 봅니다. Message는 interface show, Interface Prefix, Manifest Dependency, Consumer 재Build와 새 Shell Source 순서로 확인합니다.
학습 마무리
틀린 문제는 강의의 관련 장을 다시 읽고, 용어뿐 아니라 각 개념이 실제 로봇에서 어떤 역할을 하는지 설명해 보세요.