ROS2 독학 자료 총정리 | 공식 문서, 책, 온라인 강좌, 한국어 자료, 가상 개발 환경
이 글의 핵심
ROS2를 독학하려는 사람이 실제로 도움이 되는 자료를 고르기까지는 시간이 오래 걸립니다. 이 글은 공식 문서를 배포판 버전 함정 없이 읽는 법, 책과 온라인 강좌 중 무엇을 기대할 수 있는지, 한국어 자료의 현실적인 한계, 그리고 가상화된 개발 환경을 학습 자원으로 활용하는 방법을 정리합니다.
들어가며
ROS2를 독학하기로 마음먹으면 가장 먼저 부딪히는 문제는 “어디서부터 봐야 하는가”입니다. 검색을 해보면 ROS1 시절에 쓰인 오래된 블로그 글, 이미 지원이 끊긴 배포판을 기준으로 한 튜토리얼, 광고성 강좌 소개 글이 뒤섞여 나오고, 어느 것이 지금 시점에 유효한 정보인지 구분하기가 쉽지 않습니다. 자율주행 로봇 개발 독학 로드맵에서 전체적인 학습 순서(Linux 기초 → ROS2 → SLAM/Nav2 → 포트폴리오)를 다뤘다면, 이 글은 그중 “ROS2를 배우는 단계에서 구체적으로 무엇을 참고해야 하는가”에만 집중합니다. 책, 온라인 강좌, 공식 문서, 한국어 자료, 그리고 가상화된 개발 환경을 자료로서 어떻게 활용할지를 정리했습니다.
먼저 솔직하게 말해두어야 할 것이 있습니다. ROS2 학습 자료의 절대 다수는 영어이고, 그중에서도 신뢰할 수 있는 자료는 다시 한 번 걸러야 합니다. 이 글은 존재가 불확실한 책이나 강좌 이름을 나열하는 대신, 실제로 확인 가능한 자료 종류와 그 각각의 장단점을 설명하는 데 집중합니다.
1. 공식 문서(docs.ros.org) — 가장 먼저, 그리고 가장 조심해서 읽어야 할 자료
ROS2 공식 문서는 배포판(distro)마다 별도의 문서 트리를 갖습니다. 예를 들어 같은 튜토리얼이라도 URL이 다음처럼 배포판별로 나뉩니다.
https://docs.ros.org/en/humble/Tutorials.html
https://docs.ros.org/en/jazzy/Tutorials.html
이 구조를 모르고 검색 결과에 뜬 페이지를 그대로 따라가면, 자신이 설치한 배포판과 다른 버전의 문서를 보고 있다는 사실을 눈치채지 못한 채 존재하지 않는 패키지 이름이나 바뀐 launch 문법을 붙잡고 헤매게 됩니다. 페이지 좌측 상단의 배포판 선택 드롭다운으로 현재 보고 있는 문서 버전을 확인하고, 터미널에서 printenv ROS_DISTRO로 자신의 설치 버전을 확인해 서로 일치시키는 것이 문서를 읽기 전 가장 먼저 해야 할 일입니다.
공식 문서 안에서 특히 가치가 높은 부분은 튜토리얼 섹션보다 오히려 “Concepts” 섹션입니다. 노드, 토픽, 서비스, 액션, 파라미터, 실행 환경(rmw, DDS) 같은 개념을 다이어그램과 함께 설명하는데, 이 개념들은 배포판이 바뀌어도 거의 변하지 않기 때문에 한 번 제대로 읽어두면 두고두고 참고할 수 있습니다. 반대로 특정 명령어의 정확한 플래그나 패키지 설치 경로 같은 세부 사항은 배포판마다 미묘하게 달라지므로, 이런 부분은 매번 자신의 배포판 문서에서 다시 확인하는 습관이 필요합니다.
솔직히 말하면, 저도 처음 ROS2를 공부할 때 검색으로 들어간 튜토리얼이 사실은 ROS1 문서라는 것을 한참 뒤에야 알아챈 경험이 있습니다. roscore를 실행하라는 안내를 그대로 따라 하다가 명령어 자체가 없다는 에러만 반복해서 봤는데, 나중에 보니 그 페이지는 ROS1의 wiki.ros.org 도메인이었습니다. ROS1과 ROS2는 이름은 비슷하지만 통신 구조(마스터 노드 vs DDS)와 빌드 시스템(catkin vs colcon)이 근본적으로 다르기 때문에, 이후로는 새 자료를 열 때마다 도메인과 배포판 표기를 먼저 확인하는 버릇이 생겼습니다.
2. 책 — ROS2 전용 최신 서적은 아직 많지 않다
솔직하게 짚어야 할 부분입니다. ROS 생태계를 다루는 책 중 가장 널리 알려진 것은 O’Reilly의 “Programming Robots with ROS”인데, 이 책은 ROS1을 기준으로 쓰였습니다. 노드/토픽/서비스 같은 기본 개념이나 로봇 소프트웨어를 설계하는 사고방식은 ROS2에도 상당 부분 그대로 통하지만, 실습 코드와 빌드 명령어는 지금 그대로 따라 할 수 없습니다. 즉 “개념을 익히는 참고서”로는 여전히 쓸모가 있지만, “따라 치면 실행되는 실습서”로 기대하면 실망하게 됩니다.
ROS2를 정면으로 다루는 최신 종합 서적은 영어권에서도 아직 수가 많지 않고, 한국어로 번역·출간된 ROS2 전용 서적은 이 글을 쓰는 시점 기준으로 거의 찾아보기 어렵습니다. 그래서 현실적인 전략은 책 한 권에 의존하지 않고, 공식 문서로 개념과 최신 문법을 확인하면서 로보틱스 일반 이론(제어, 센서 융합, SLAM 수학)을 다루는 책을 보조 자료로 병행하는 것입니다. 특정 책 제목을 검색할 때는 출간 연도와 “ROS2를 다루는지, ROS1을 다루는지”를 반드시 목차나 서문에서 확인하고 구매하는 것을 권합니다.
3. 온라인 강좌 — 커리큘럼을 사는 것, 최신성을 사는 것은 아니다
ROS2 온라인 강좌는 크게 세 부류로 나뉩니다.
- 공식 튜토리얼(무료): docs.ros.org의 Tutorials 섹션. 최신성은 가장 높지만, 순서를 따라가는 재미나 강제성은 약합니다.
- The Construct 같은 로보틱스 전문 교육 플랫폼: 브라우저에서 바로 ROS2/Gazebo 환경을 띄워주는 방식이 특징입니다. 로컬 설치 없이 실습할 수 있다는 점이 독학 초반 진입 장벽을 크게 낮춰줍니다.
- Udemy 등 일반 강좌 플랫폼의 ROS2 입문 강좌: 구조가 잘 잡혀 있는 강좌가 많지만, 강좌가 어떤 배포판을 기준으로 녹화되었는지 반드시 강좌 소개나 리뷰에서 확인해야 합니다. Foxy나 Galactic처럼 이미 지원이 끝난 배포판 기준으로 만들어진 강좌를 지금 그대로 따라 하면, 앞서 설명한 문서 버전 문제와 똑같은 함정에 빠집니다.
강좌를 고를 때 가장 중요하게 볼 지표는 “얼마나 최근에 업데이트되었는가”와 “어떤 배포판을 기준으로 하는가”입니다. 평점이나 수강생 수보다 이 두 가지가 실제로 따라 할 수 있는지를 결정합니다. 강좌는 학습 순서를 대신 정해주는 편의성을 사는 것이고, 내용의 정확성은 결국 공식 문서와 대조해 스스로 검증해야 한다는 점을 감안하고 접근하는 것이 좋습니다.
flowchart TD
A[지금 상황은?] --> B{ROS2를 처음 접함}
B -->|예| C[공식 튜토리얼로 개념부터]
B -->|아니오| D{특정 에러로 막힘}
D -->|예| E[ROS Discourse / Robotics Stack Exchange 검색]
D -->|아니오| F{체계적인 순서를 원함}
F -->|예| G[온라인 강좌 · 브라우저 기반 실습 플랫폼]
F -->|아니오| H[가상 환경에서 직접 실습하며 문서 참조]
이 흐름도는 자료를 고르는 절대적인 규칙이 아니라, 막연히 “뭘 봐야 하지”라는 상태에서 최소한의 방향을 잡는 용도입니다. 실제로는 이 네 가지를 번갈아 오가며 진행하는 경우가 대부분입니다.
4. 한국어 자료의 현실 — 얇다는 것을 인정하고 전략을 세운다
ROS2의 한국어 자료 생태계는 정직하게 말하면 영어권에 비해 확실히 얇습니다. 국내에도 오픈소스 로보틱스에 관심 있는 개발자 커뮤니티나 ROS 사용자 모임이 존재하고, 오픈채팅방이나 기술 커뮤니티에서 실시간으로 질문하면 도움을 받을 수 있는 경우가 적지 않습니다. 하지만 최신 배포판(Humble, Jazzy)을 기준으로 체계적으로 정리된 한국어 문서나, 영어권 ROS Discourse만큼 활발한 한국어 Q&A 채널은 아직 찾기 어렵습니다.
그래서 현실적인 전략은 “한국어 자료만으로 완결하겠다”는 목표를 세우지 않는 것입니다. 개념을 처음 잡을 때는 한국어로 정리된 블로그나 커뮤니티 글에서 큰 그림을 빠르게 얻고, 구체적인 API나 최신 문법, 에러 해결은 공식 영어 문서와 ROS Discourse에서 확인하는 이중 전략이 실제로 가장 효율적입니다. 검색할 때 한국어 키워드로 결과가 부족하다고 느껴지면 같은 질문을 영어로 다시 검색해보는 습관을 들이는 것만으로도 막히는 빈도가 크게 줄어듭니다. ROS Answers는 이제 Robotics Stack Exchange로 통합되었고, ROS Discourse(discourse.ros.org)는 여전히 활발하게 운영되고 있어 에러 메시지를 영어로 검색했을 때 가장 먼저 찾아볼 만한 곳입니다.
한 가지 개인적인 경험을 덧붙이면, 처음 ROS2를 독학할 때 한국어로만 검색을 고집하다가 특정 QoS 관련 에러를 해결하는 데 며칠을 썼습니다. 나중에 같은 에러 메시지를 영어로 그대로 검색하자 ROS Discourse에 거의 동일한 사례가 이미 논의되어 있었는데, 이 경험 이후로는 에러 메시지 자체(로그, 스택트레이스)를 그대로 영어로 검색하는 것을 기본 습관으로 바꿨습니다. 에러 메시지는 원래 영어로 출력되므로, 번역하지 않고 그대로 검색하는 것이 오히려 더 정확한 결과를 준다는 점을 그때 깨달았습니다.
5. 가상화·컨테이너 개발 환경을 학습 자원으로 보기
ROS2를 독학할 때 개발 환경 자체도 하나의 학습 자원으로 취급할 필요가 있습니다. 로컬 머신에 직접 설치하면 시스템 패키지와 충돌하거나, 잘못 건드린 설정을 되돌리기 어려워 처음부터 다시 설치하는 경우가 흔합니다. 이를 피하는 방법은 크게 두 가지입니다.
- Docker/devcontainer 기반 격리 환경: 컨테이너 안에 ROS2와 Gazebo를 넣어두면, 문제가 생겨도 컨테이너만 지우고 다시 만들면 됩니다. 구체적인 Dockerfile 구성과 운영체제별(Linux/macOS/Windows WSL2) GUI 포워딩 설정은 이 사이트의 ROS2 + Gazebo Docker 시뮬레이션 환경 구축 가이드에서 실습 위주로 다뤘으므로, 여기서는 같은 내용을 반복하지 않습니다.
- 브라우저 기반 클라우드 실습 환경: The Construct 같은 플랫폼은 로컬 설치 없이 브라우저에서 바로 ROS2/Gazebo 인스턴스를 띄워줍니다. 저사양 노트북이나 그래픽 드라이버 문제로 로컬 시뮬레이션 실행이 까다로운 경우, 개념을 먼저 익히는 용도로 유용합니다. 다만 무료 사용량에 제한이 있는 경우가 많고, 장기적으로는 결국 로컬 또는 자체 클라우드 환경 구축이 필요해집니다.
어느 쪽을 선택하든 핵심은 “환경 문제로 학습 자체가 멈추는 시간”을 최소화하는 것입니다. 노드 간 통신이 갑자기 끊기거나 디스커버리가 실패하는 문제를 만났을 때, 그 원인이 코드가 아니라 미들웨어 레이어(RMW, DDS)에 있는 경우도 적지 않은데, 이 부분은 ROS2와 Fast DDS 완벽 가이드에서 QoS 설정과 디스커버리 트러블슈팅까지 자세히 다뤘습니다.
나가며
ROS2를 독학하는 데 필요한 것은 완벽한 자료 하나가 아니라, 서로 부족한 부분을 채워주는 자료 몇 가지를 겹쳐 쓰는 전략입니다. 개념은 공식 문서의 Concepts 섹션에서, 학습 순서는 온라인 강좌나 튜토리얼에서, 구체적인 에러 해결은 영어 검색과 ROS Discourse에서, 그리고 안전하게 시행착오를 겪을 공간은 가상화된 개발 환경에서 얻는 식입니다. 한국어 자료가 부족하다는 현실을 인정하고 영어 자료를 병행하는 쪽으로 일찍 전략을 바꾸는 것이, 오래 헤매다가 뒤늦게 같은 결론에 도달하는 것보다 훨씬 시간을 아껴줍니다.