Chapter 673. ROS2 배포와 컨테이너화 (ROS2 Deployment and Containerization) Chapter 673. ROS2 배포와 컨테이너화 (ROS2 Deployment and Containerization) 673.1ROS2 배포와 컨테이너화의 개요 673.2ROS2 배포 전략의 유형과 선택 673.3ROS2 배포 아키텍처 설계 673.4ROS2 패키지 빌드 시스템 개요 673.5colcon 빌드 도구 상세 673.6colcon 빌드 옵션과 설정 673.7colcon 병렬 빌드 최적화 673.8colcon 선택적 빌드와 패키지 선택 673.9colcon 빌드 결과 캐싱 전략 673.10colcon mixin 활용 673.11ROS2 워크스페이스 구조 설계 673.12다중 워크스페이스 오버레이 전략 673.13인스톨 스페이스(Install Space) 배포 673.14격리 빌드(Isolated Build)와 병합 빌드(Merge Build) 673.15ROS2 패키지 의존성 관리 673.16rosdep 의존성 해결 도구 활용 673.17rosdep 커스텀 소스 정의 673.18vcstool 기반 소스코드 관리 673.19repos 파일 작성과 관리 673.20ROS2 패키지 릴리즈 프로세스 673.21bloom 릴리즈 도구 활용 673.22ROS2 패키지 버전 관리 전략 673.23시맨틱 버저닝(Semantic Versioning) 적용 673.24ROS2 패키지 변경 이력(CHANGELOG) 관리 673.25ROS2 크로스 컴파일 개요 673.26ARM64 아키텍처 크로스 컴파일 설정 673.27ARMv7 아키텍처 크로스 컴파일 설정 673.28NVIDIA Jetson 크로스 컴파일 673.29Raspberry Pi 크로스 컴파일 672.30QEMU 기반 에뮬레이션 빌드 673.31크로스 컴파일 툴체인 파일 작성 673.32크로스 컴파일 CMake Toolchain 설정 673.33크로스 컴파일 sysroot 구성 673.34크로스 컴파일 의존성 라이브러리 관리 673.35Docker 기반 크로스 컴파일 환경 673.36Docker 기초 개념과 ROS2 활용 673.37Docker 이미지와 컨테이너 개념 673.38Dockerfile 기본 문법 673.39ROS2 공식 Docker 이미지 활용 673.40ROS2 공식 이미지 변형 (ros-base, perception, desktop) 673.41ROS2 커스텀 Dockerfile 작성 673.42ROS2 다단계(Multi-Stage) Docker 빌드 673.43빌드 스테이지와 런타임 스테이지 분리 673.44ROS2 Docker 이미지 크기 최적화 673.45불필요한 레이어 제거 전략 673.46경량 베이스 이미지 선택 673.47ROS2 Docker 이미지 보안 강화 673.48비루트(Non-Root) 사용자 실행 673.49ROS2 Docker 이미지 레이어 캐싱 전략 673.50.dockerignore 파일 활용 673.51Docker BuildKit 활용 673.52Docker Compose 기반 ROS2 시스템 구성 673.53Docker Compose YAML 파일 작성 673.54Docker Compose 다중 컨테이너 오케스트레이션 673.55Docker Compose 서비스 의존성 정의 673.56Docker Compose 네트워크 설정 673.57Docker Compose 볼륨 관리 673.58Docker Compose 환경 변수 관리 673.59Docker Compose 프로파일(Profile) 활용 673.60Docker 컨테이너 간 ROS2 통신 설정 673.61Docker 컨테이너 DDS 디스커버리 설정 673.62Docker 호스트 네트워크 모드 ROS2 통신 673.63Docker 브릿지 네트워크 ROS2 통신 673.64Docker 맥스벨란(Macvlan) 네트워크 ROS2 통신 673.65Docker 컨테이너 간 공유 메모리(SHM) 설정 673.66CycloneDDS Docker 네트워크 설정 673.67FastDDS Docker 네트워크 설정 673.68Zenoh Docker 네트워크 설정 673.69Docker 컨테이너 GPU 접근 설정 673.70NVIDIA Container Toolkit 설치와 활용 673.71Docker 컨테이너 CUDA 접근 설정 673.72Docker 컨테이너 디바이스 접근 설정 673.73Docker 컨테이너 시리얼 포트(UART) 접근 673.74Docker 컨테이너 USB 디바이스 접근 673.75Docker 컨테이너 카메라(/dev/video) 접근 673.76Docker 컨테이너 I2C/SPI 접근 673.77Docker 컨테이너 GUI 디스플레이 설정 673.78Docker 컨테이너 X11 포워딩 673.79Docker 컨테이너 Wayland 포워딩 673.80Docker 컨테이너 VNC 서버 설정 673.81Docker 컨테이너 실시간(Real-Time) 설정 673.82Docker 컨테이너 –privileged 모드와 대안 673.83Docker 컨테이너 리소스 제한(CPU, Memory) 설정 673.84Docker 컨테이너 cgroups 설정 673.85Docker 컨테이너 보안 프로파일(Seccomp, AppArmor) 673.86Docker 컨테이너 헬스 체크 설정 673.87Docker 컨테이너 자동 재시작 정책 673.88Docker 컨테이너 로그 드라이버 설정 673.89Docker 레지스트리 구축과 관리 673.90프라이빗 Docker 레지스트리 운영 673.91Harbor 레지스트리 활용 673.92Docker 이미지 태깅 전략 673.93Docker 이미지 취약점 스캐닝 (Trivy, Snyk) 673.94Podman을 이용한 ROS2 컨테이너 실행 673.95Apptainer(Singularity) 기반 ROS2 실행 673.96Kubernetes 기반 ROS2 배포 개요 673.97Kubernetes 아키텍처와 ROS2 활용 673.98Kubernetes Pod 기반 ROS2 노드 배포 673.99Kubernetes Deployment 기반 ROS2 배포 673.100Kubernetes StatefulSet 기반 ROS2 배포 673.101Kubernetes DaemonSet 기반 에지 배포 673.102Kubernetes Service 기반 ROS2 통신 설정 673.103Kubernetes ConfigMap 기반 ROS2 파라미터 관리 673.104Kubernetes Secret 기반 인증 정보 관리 673.105Kubernetes 헬름(Helm) 차트 ROS2 패키징 673.106Kubernetes 스케줄링 정책 ROS2 적용 673.107Kubernetes GPU 리소스 할당 673.108Kubernetes 노드 어피니티(Affinity) 설정 673.109Kubernetes 자동 스케일링 ROS2 적용 673.110Kubernetes 롤링 업데이트 ROS2 적용 673.111Kubernetes 카나리(Canary) 배포 전략 673.112K3s 경량 Kubernetes ROS2 에지 배포 673.113MicroK8s 기반 ROS2 배포 673.114KubeEdge 기반 에지 배포 673.115ROS2 CI/CD 파이프라인 구축 개요 673.116GitHub Actions 기반 ROS2 CI/CD 673.117GitHub Actions ROS2 워크플로우 작성 673.118GitHub Actions 캐싱 전략 673.119GitLab CI 기반 ROS2 CI/CD 673.120Jenkins 기반 ROS2 CI/CD 673.121CI/CD 파이프라인 빌드 단계 설계 673.122CI/CD 파이프라인 테스트 단계 설계 673.123CI/CD 파이프라인 정적 분석 단계 673.124CI/CD 파이프라인 Docker 이미지 빌드 단계 673.125CI/CD 파이프라인 배포 단계 설계 673.126CI/CD 파이프라인 알림 및 모니터링 673.127CI/CD 파이프라인 아티팩트 관리 673.128ROS2 단위 테스트 프레임워크 673.129gtest 기반 ROS2 C++ 단위 테스트 673.130pytest 기반 ROS2 Python 단위 테스트 673.131ROS2 통합 테스트 프레임워크 673.132launch_testing 기반 통합 테스트 673.133launch_testing 어서션(Assertion) 활용 673.134ROS2 노드 레벨 테스트 설계 673.135ROS2 시스템 레벨 테스트 설계 673.136ROS2 코드 커버리지 분석 (gcov, lcov) 673.137ROS2 정적 코드 분석 도구 673.138ament_lint 도구 모음 활용 673.139ament_cppcheck 활용 673.140ament_cpplint 활용 673.141ament_flake8 활용 673.142ament_mypy 활용 673.143ROS2 코드 포맷팅 규칙 (ament_uncrustify) 673.144ROS2 OTA(Over-The-Air) 업데이트 개요 673.145OTA 업데이트 아키텍처 설계 673.146OTA 업데이트 패키지 생성 673.147OTA 업데이트 안전 롤백 메커니즘 673.148OTA 업데이트 서명과 검증 673.149A/B 파티션 기반 업데이트 전략 673.150차분(Delta) 업데이트 전략 673.151Mender 기반 OTA 업데이트 통합 673.152SWUpdate 기반 OTA 업데이트 통합 673.153ROS2 에지 디바이스 배포 전략 673.154NVIDIA Jetson Orin 배포 전략 673.155NVIDIA Jetson Nano 배포 전략 673.156Raspberry Pi 배포 전략 673.157Intel NUC 배포 전략 673.158에지 디바이스 부팅 시간 최적화 673.159에지 디바이스 자동 시작 설정 673.160systemd 기반 ROS2 서비스 자동 시작 673.161systemd 서비스 유닛 파일 작성 673.162에지 디바이스 워치독(Watchdog) 설정 673.163에지 디바이스 원격 접근(SSH) 설정 673.164에지 디바이스 원격 디버깅 673.165에지 디바이스 로그(Log) 원격 수집 673.166ROS2 배포 모니터링 시스템 673.167Prometheus 기반 ROS2 메트릭 수집 673.168Grafana 기반 ROS2 대시보드 구축 673.169ROS2 노드 상태 모니터링 673.170ROS2 시스템 리소스(CPU, 메모리, 디스크) 모니터링 673.171ROS2 네트워크 트래픽 모니터링 673.172ROS2 배포 알림(Alert) 시스템 673.173ROS2 배포 장애 복구 전략 673.174ROS2 노드 자동 재시작 설정 673.175ROS2 프로세스 감시(Supervisor) 도구 673.176ros2 lifecycle 기반 노드 복구 673.177ROS2 다중 머신 배포 전략 673.178다중 머신 DDS 디스커버리 설정 673.179다중 머신 Zenoh 라우터 설정 673.180다중 머신 시간 동기화(NTP, PTP) 설정 673.181다중 머신 네트워크 설정 최적화 673.182다중 머신 보안 통신 설정 673.183다중 머신 방화벽 설정 673.184ROS2 클라우드 배포 전략 673.185AWS RoboMaker 기반 배포 673.186AWS IoT Greengrass ROS2 배포 673.187Azure IoT Hub 기반 ROS2 배포 673.188Google Cloud IoT 기반 ROS2 배포 673.189클라우드-에지 하이브리드 배포 전략 673.190클라우드 기반 데이터 수집과 분석 파이프라인 673.191ROS2 배포 보안 설정(SROS2) 개요 673.192SROS2 인증서 생성과 관리 673.193SROS2 키스토어(Keystore) 구조 673.194SROS2 접근 제어 정책(Policy) 설정 673.195SROS2 암호화 통신 설정 673.196SROS2 인증서 갱신 전략 673.197ROS2 배포 환경 메모리 최적화 673.198ROS2 배포 환경 CPU 최적화 673.199ROS2 배포 환경 네트워크 대역폭 최적화 673.200ROS2 배포 시스템 검증과 인증