Search

260106_0942_ROS2가 프로덕션에서 실패하는 구조적 이유와 전략

참고자료

왜 우리는 ROS를 걷어냈는가 : ROS 없이 순수 C++로 프로덕션 코드 만들기 | 개발대장 Holyground
00:00 시작 00:03 우리는 왜 ROS를 걷어냈는가. 01:47 개발대장 소개/홀리그라운드 소개 02:31 (파트.0)ROS를 사용하면서 겼었던 어려움 05:40 그래서 오늘은 무엇을 할 것인가 09:10 (파트.1) 왜 ROS로 할 수 없었는가. 15:50 그래서 이렇게 결론 내렸습니다. 안녕하세요, 개발대장입니다. 지난 12월 20일 진행했던 세미나 영상을 일부 공개합니다. [HolyGround] ROS 없이 프로덕션 C++ 만드는 방법 - 가이드 공개 여러분의 커리어에 확실한 동력을 더해보시고, 우리의 여정에 함께 해 보세요. https://www.holyground.world/ 강사 이력 https://www.holyground.world/ko/cultivators/2e27b2b8-06cf-4074-8254-b0622de62946 교육문의 : studio.holyground@gmail.com 함께 성장하는 커뮤니티 : 인공지능 다스리기 (https://open.kakao.com/o/g0jagPof) ━━━━━━━━━━━━━━━━━━━━ 📘 Branch: Production C++ Framework Guide ROS 걷어내고 순수 C++로 프로덕션 만들어본 적 있습니다. 두 번 했습니다. 로봇 회사에서 한 번, 자율주행 회사에서 한 번. 두 번째는 훨씬 빨랐습니다. 뭘 해야 하는지 알았으니까요. 그때 정리해둔 것들 공개합니다. • 포함 내용 [기반] - 왜 ROS가 프로덕션에서 안 되는가 [시스템] - 환경 구축, 프로젝트 구조, CMake, 의존성 관리, 테스트 통합 [품질] - 스타일 가이드, 포매팅, 린팅, 문서화, 테스트, CI [코어] - 에러 처리, 단위 시스템, 시간 표현, 메모리 관리, 동시성, 파이프라인 코드 아닙니다. "왜 이렇게 해야 하는지" 설명하는 가이드입니다. • 가격: ₩129,000 → ₩96,750 (얼리버드 25%) • 마감: 1월 2일까지 https://www.holyground.world/ko/forest/branch/@captaindev/production-cpp-framework-guide?utm_source=openchat&utm_medium=community&utm_campaign=branch-launch ━━━━━━━━━━━━━━━━━━━━ 🛠 Fruit: Production Playground for C++ 위 가이드라인을 실제로 구현한 코드입니다. • 포함 내용 [Core 라이브러리] - Error: 예외 없는 에러 처리 (Result 타입) - Unit: 타입 안전 단위 (Distance, Velocity, Angle, Frequency) - Concurrency: ThreadPool, Scheduler, Pipeline - Memory: 실시간용 메모리 풀 - Time: Duration, Stamp - Configuration: YAML 설정 파서 - Filesystem: 파일시스템 래퍼 - Diagnostics: 프로덕션 퀄리티 로거, 프로파일러 [빌드 & 검증 시스템] - CMake Presets (debug, release, ci, profile) - clang-format, clang-tidy 설정 - Catch2 테스트 프레임워크 - gcovr 커버리지 (80% 강제) - GitHub Actions CI/CD (Ubuntu + macOS) [환경 설정] - setup.sh: 전체 도구 원클릭 설치 - verify.sh: 설치 검증 [데모 애플리케이션] - Multi-Sensor Fusion Robot (IMU, LiDAR, GPS, Camera 4개 센서 실시간 퓨전) • 가격: ₩499,000 https://www.holyground.world/ko/forest/fruit/@captaindev/cpp-production-playground?utm_source=openchat&utm_medium=community&utm_campaign=branch-launch ──────────────────── 실제 사용자 후기 학생 개발자 (외주 진행 중): "C++ 기반 프로젝트 구현 시 5시간 이상 돌아가는게 정말 감탄이 나오더라구요. 지금까지 구매한 컨텐츠 중에서 가장 맘에 들었습니다" 프로젝트 개발자: "LLM 기반 개발론은 이론이나 자료도 부족할텐데 시스템을 워낙 체계적으로 잘 만들어 놓으신 것 같아서 감탄했습니다" ────────────────────

ROS2가 프로덕션에서 실패하는 구조적 이유는 다음과 같습니다.

DDS 기반 Pub/Sub 구조는 고대역 센서 스트림에서 병목이 발생함
QoS 튜닝은 근본 해결책이 아니며 시스템 복잡도만 증가시킴
Executor / Callback 모델은 실행 순서와 타이밍이 비결정적임
멀티코어 시스템에서도 실제로는 단일 코어만 포화되는 경우가 잦음
메모리 할당/해제가 프레임 단위로 발생하여 실시간성 보장 불가
장애 발생 시 call stack, ownership, lifetime 추적이 사실상 불가능

데모용 프레임워크와 양산용 프레임워크의 차이는????

데모는 평균 성능, 양산은 최악 성능(Worst-case)을 기준으로 판단해야 함
“잘 돌아간다”는 지표는 프로덕션 품질과 무관
메모리 누수, race condition, frame drop은 데모에서는 감지되지 않음
런타임 동적 설정과 자동 magic은 양산에서 디버깅 불가능성을 초래
시스템 동작이 코드가 아닌 프레임워크 내부 로직에 의존하게 됨
장애 원인을 추적할 수 없는 구조는 양산 전환 불가

ROS2 제거 후 순수 C++ 프레임워크로 전환해야 하는 필요성

Thread Pipeline을 명시적으로 설계하여 코어 사용률을 통제 가능
메모리 풀 기반 설계로 allocation latency 제거
데이터 흐름이 명시적인 파이프라인 구조로 드러남
실행 순서, 스레드 소속, 데이터 ownership이 코드 레벨에서 추적 가능
성능 문제 발생 시 프로파일링과 재현이 가능해짐
“프레임워크를 믿는 개발”에서 “시스템을 이해하는 개발”로 전환

신규 프로덕션 프레임워크가 반드시 갖춰야 할 조건

고정 스레드 모델 기반의 명시적 실행 파이프라인
Zero-copy 또는 bounded-copy 데이터 전달 구조
메모리 풀, 오브젝트 라이프사이클 명확화
Error handling을 return code가 아닌 시스템 레벨로 통합
빌드/설정/런타임 동작이 모두 정적으로 정의됨
CI에서 성능, 메모리, 스레드 규칙을 자동 검증 가능해야 함

ROS2 → 신규 프레임워크 전환 전략

전체 시스템을 한 번에 버리지 말고 가장 병목인 파트부터 분리
ROS2는 외부 인터페이스/도구용으로만 제한적으로 유지
핵심 인지/제어 파이프라인은 순수 C++로 재구성
프레임 단위 처리 흐름을 코드로 설명할 수 있어야 함
“확장성”보다 “예측 가능성”을 우선 설계 기준으로 삼음

260127_1811 기준, 2부 글을 작성했습니다.

이렇게 ros를 깠지만 ㅋㅋ 아직도 필요할때에는 사용하고 있는 유저 입장으로써 약간의 옹호 글? 작성했습니다.

안녕하세요

관련 기술 문의와 R&D 공동 연구 사업 관련 문의는 “glory@keti.re.kr”로 연락 부탁드립니다.

Hello

For technical and business inquiries, please contact me at “glory@keti.re.kr”