Chapter 662. rclcpp 심화 (Advanced rclcpp) Chapter 662. rclcpp 심화 (Advanced rclcpp) 662.1rclcpp 라이브러리의 아키텍처 개요 662.2rclcpp와 rcl, rmw 계층 관계 662.3rclcpp의 헤더 파일 구성과 모듈 분류 662.4rclcpp::Node 클래스의 내부 구조 662.5rclcpp::Node의 생성자와 초기화 과정 662.6노드 옵션 (NodeOptions) 심화 설정 662.7NodeOptions의 컨텍스트 (Context) 설정 662.8NodeOptions의 할당자 (Allocator) 설정 662.9NodeOptions의 use_intra_process_comms 설정 662.10NodeOptions의 start_parameter_services 설정 662.11콜백 함수의 시그니처와 바인딩 패턴 662.12std::bind를 이용한 멤버 함수 콜백 등록 662.13람다 표현식을 이용한 콜백 등록 662.14std::function을 이용한 콜백 저장 662.15std::shared_ptr와 노드 소유권 관리 662.16enable_shared_from_this 패턴의 활용 662.17순환 참조 (Circular Reference) 방지 전략 662.18std::weak_ptr를 이용한 약한 참조 662.19발행자 (Publisher)의 내부 구현과 최적화 662.20rclcpp::Publisher의 생성과 설정 662.21발행자의 메시지 큐 관리 662.22발행자의 QoS 프로파일 심화 설정 662.23구독자 (Subscriber)의 내부 구현과 최적화 662.24rclcpp::Subscription의 생성과 설정 662.25구독자의 메시지 콜백 처리 흐름 662.26구독자의 QoS 프로파일 심화 설정 662.27메시지 할당과 메모리 관리 전략 662.28UniquePtr 메시지 전달 패턴 662.29SharedPtr 메시지 전달 패턴 662.30ConstSharedPtr 메시지 전달 패턴 662.31LoanedMessage를 이용한 제로 카피 발행 662.32LoanedMessage의 활용 조건과 제약 662.33프로세스 내 통신 (Intra-Process Communication) 개요 662.34IntraProcessManager의 동작 원리 662.35프로세스 내 통신의 UniquePtr 전용 최적화 662.36프로세스 내 통신과 SharedPtr의 성능 특성 662.37프로세스 내 통신의 설정과 활성화 662.38프로세스 내 통신의 제약 조건과 주의사항 662.39타이머 (Timer)의 내부 구현과 정밀도 662.40WallTimer의 동작 원리 662.41GenericTimer의 동작 원리 662.42타이머의 콜백 누적 (Callback Accumulation) 처리 662.43타이머의 주기 영향 요인과 정밀도 한계 662.44서비스 서버의 내부 구현 상세 662.45서비스 서버의 콜백 동시성 관리 662.46서비스 서버의 멀티쓰레드 안전성 662.47서비스 클라이언트의 비동기 호출 패턴 662.48async_send_request()의 사용법 662.49std::future를 이용한 비동기 응답 대기 662.50std::promise와 콜백 기반 비동기 처리 662.51서비스 호출의 타임아웃 처리 662.52액션 서버의 내부 구현 상세 662.53액션 서버의 목표 수락/거부 콜백 662.54액션 서버의 취소 요청 처리 662.55액션 서버의 피드백 발행 662.56액션 클라이언트의 내부 구현 상세 662.57액션 클라이언트의 목표 전송과 피드백 수신 662.58액션 클라이언트의 결과 수신과 처리 662.59Executor의 내부 아키텍처 662.60Executor의 이벤트 루프 구조 662.61SingleThreadedExecutor의 구현 상세 662.62MultiThreadedExecutor의 구현 상세 662.63MultiThreadedExecutor의 스레드 수 설정 662.64StaticSingleThreadedExecutor의 구현 상세 662.65StaticSingleThreadedExecutor의 성능 특성 662.66EventsExecutor의 구현 상세 662.67EventsExecutor의 이벤트 기반 깨우기 메커니즘 662.68커스텀 Executor 구현 방법 662.69Executor의 spin_once()와 spin_some() 662.70Executor의 spin_until_future_complete() 662.71WaitSet을 이용한 저수준 이벤트 처리 662.72Guard Condition을 이용한 Executor 깨우기 (Wake-Up) 662.73콜백 그룹 (Callback Group) 심화 662.74MutuallyExclusiveCallbackGroup의 동작 원리 662.75ReentrantCallbackGroup의 동작 원리 662.76콜백 그룹 간 교착 상태 (Deadlock) 방지 전략 662.77콜백 그룹과 멀티쓰레드 Executor의 조합 662.78리엔트런시 (Reentrancy)와 스레드 안전성 662.79rclcpp의 실시간 지원 기법 개요 662.80실시간 노드를 위한 메모리 할당 전략 662.81tlsf_cpp를 이용한 실시간 메모리 할당 662.82실시간 발행자와 구독자 구성 662.83실시간 제약 하의 콜백 최적화 662.84rclcpp_lifecycle를 이용한 생명주기 노드 개요 662.85생명주기 노드의 상태 전이 (State Transition) 모델 662.86생명주기 노드의 전이 콜백 구현 상세 662.87on_configure(), on_activate(), on_deactivate() 콜백 662.88on_cleanup(), on_shutdown(), on_error() 콜백 662.89생명주기 노드의 상태 머신 동작 원리 662.90rclcpp_components를 이용한 컴포넌트 구현 개요 662.91컴포넌트 노드의 설계 패턴 662.92컴포넌트 등록 매크로 (RCLCPP_COMPONENTS_REGISTER_NODE) 사용법 662.93ComponentManager를 이용한 동적 로딩 662.94컴포넌트 컨테이너 (Component Container) 아키텍처 662.95rclcpp_action을 이용한 액션 구현 상세 662.96GenericPublisher를 이용한 동적 타입 발행 662.97GenericSubscription을 이용한 동적 타입 구독 662.98직렬화된 메시지 (SerializedMessage) 처리 662.99ContentFilteredTopic 구현과 활용 662.100TypeAdapters를 이용한 메시지 타입 변환 662.101TypeAdapters의 구현 방법과 등록 662.102rclcpp의 로깅 매크로 체계 662.103RCLCPP_INFO, RCLCPP_WARN, RCLCPP_ERROR 매크로 662.104조건부 로깅 (_EXPRESSION, _FUNCTION) 매크로 662.105스로틀링 로깅 (_THROTTLE, _SKIPFIRST) 매크로 662.106로거 수준 동적 변경 662.107rclcpp의 예외 처리 전략 662.108rclcpp 예외 클래스 계층 구조 662.109rclcpp의 시그널 처리와 정상 종료 절차 662.110rclcpp::init()과 rclcpp::shutdown()의 내부 동작 662.111rclcpp의 컴파일 최적화 기법 662.112pimpl 이디엄을 이용한 컴파일 시간 단축 662.113rclcpp의 테스트 작성 전략 662.114Google Test를 이용한 노드 단위 테스트 662.115통합 테스트에서의 Executor 활용 662.116rclcpp의 성능 프로파일링 도구와 기법 662.117rclcpp의 고급 설계 패턴 662.118노드 합성 (Composition) 패턴 662.119관찰자 (Observer) 패턴 662.120전략 (Strategy) 패턴을 이용한 알고리즘 교체