Booil Jung

Ubuntu 22.04 호스트 기반 ROS2 Humble 애플리케이션의 OTA 배포 전략

현대 로보틱스 시스템의 배포 및 유지보수 패러다임이 근본적으로 변화하고 있습니다. 과거의 정적인 임베디드 시스템과 달리, 오늘날의 로봇은 끊임없이 진화하는 소프트웨어를 통해 그 가치가 결정됩니다. 이러한 환경에서 무선 업데이트(Over-the-Air, OTA)는 단순한 기술적 편의를 넘어, 로봇 플릿(fleet)의 운영, 보안, 그리고 비즈니스 연속성을 위한 핵심적인 전략적 자산으로 자리매김하고 있습니다.

초기 프로토타입 단계를 넘어 수십, 수백 대의 로봇을 현장에 배포하는 순간, 전통적인 수동 업데이트 방식은 심각한 한계에 부딪힙니다. OTA는 이러한 한계를 극복하고 현대적인 로봇 운영을 가능하게 하는 필수 요소입니다.

단순히 파일을 무선으로 전송하는 것을 넘어, 상용 등급의 OTA 시스템은 예측 불가능한 현장 상황에서도 안정성을 보장하는 세 가지 핵심 원칙 위에 구축되어야 합니다.

OTA 업데이트는 그 범위와 방식에 따라 여러 유형으로 나눌 수 있으며, 각 방식은 장단점을 가집니다.

이러한 전략적 고려사항들은 단순히 ‘어떻게 파일을 무선으로 보낼 것인가’라는 기술적 질문을 넘어섭니다. 이는 ‘어떻게 수명 주기 동안 로봇 플릿의 가치를 안정적이고 안전하게 유지하고 향상시킬 것인가’라는 근본적인 아키텍처 질문에 대한 답을 요구합니다. 특히, 부트로더 선택이나 파티션 레이아웃과 같은 초기 설계 단계의 결정은 한번 장치가 현장에 배포된 후에는 되돌리기 어렵거나 불가능한 결과를 초래할 수 있으므로 13, 신중한 사전 계획이 무엇보다 중요합니다.

로보틱스 OTA 업데이트 전략을 수립할 때 가장 먼저 마주하게 되는 근본적인 선택지는 ‘어떻게’ 업데이트를 구성하고 전달할 것인가에 대한 철학의 차이입니다. 이는 크게 두 가지 모델, 즉 ‘요새 모델(Fortress Model)’로 비유되는 이미지 기반 업데이트와 ‘마이크로서비스 모델(Microservices Model)’로 비유되는 컨테이너 기반 업데이트로 나뉩니다. 이 선택은 단순히 기술 스택의 차이를 넘어, 개발 워크플로우, 시스템의 견고성, 그리고 장기적인 유지보수 전략 전반에 깊은 영향을 미칩니다.

이 모델은 전통적인 임베디드 시스템의 안정성을 최우선으로 하는 접근 방식입니다. 시스템의 핵심을 견고하게 보호하는 요새와 같이, 업데이트 실패로 인한 시스템 불능 상태를 원천적으로 방지하는 데 초점을 맞춥니다.

이 모델은 클라우드 및 웹 개발에서 발전한 현대적인 소프트웨어 개발 철학을 로보틱스에 적용한 것입니다. 애플리케이션을 독립적인 마이크로서비스로 간주하고, 이를 컨테이너 기술을 통해 빠르고 유연하게 배포하는 데 중점을 둡니다.

이 접근법은 위 두 모델의 장점을 결합하려는 시도입니다. Balena 20 및 Mender의 고급 구성 29에서 볼 수 있듯이, A/B 파티션 스킴을 사용하여 기반 호스트 OS를 견고하게 업데이트하면서, 동시에 컨테이너를 사용하여 빠르게 변화하는 사용자 애플리케이션(ROS2 노드)을 신속하게 관리하고 업데이트합니다. 이는 로보틱스 시스템이 가진 이중적 특성, 즉 안정적인 하드웨어 제어 계층과 빠르게 진화하는 상위 애플리케이션 계층을 모두 만족시키는 효과적인 전략이 될 수 있습니다.

올바른 모델을 선택하는 것은 단순히 기술적 선호의 문제가 아니라, 프로젝트의 전체 수명 주기를 고려한 전략적 결정입니다.

이 결정은 로보틱스가 가진 독특한 위치, 즉 하드웨어와 밀접하게 결합된 임베디드 시스템의 특성과 복잡한 상위 로직이 빠르게 반복 개발되어야 하는 소프트웨어 서비스의 특성 사이의 긴장을 어떻게 해결할 것인가에 대한 답을 찾는 과정입니다. 특히 컨테이너 기반 접근법을 채택할 경우, 전통적인 ros2 launch 시스템의 역할이 Docker Compose와 같은 컨테이너 오케스트레이터로 상당 부분 이전되는 패러다임의 전환이 일어난다는 점을 인지해야 합니다.23 이는 ROS 개발팀의 기존 워크플로우와 기술 스택에 상당한 변화를 요구할 수 있습니다.

올바른 OTA 아키텍처 모델을 선택했다면, 다음 단계는 해당 모델을 구현할 최적의 도구를 선택하는 것입니다. 임베디드 리눅스 생태계에는 각각 뚜렷한 철학과 장단점을 가진 여러 강력한 OTA 프레임워크가 존재합니다. 본 섹션에서는 Mender, Balena, RAUC, SWUpdate 네 가지 주요 프레임워크를 심층적으로 비교 분석하여, 프로젝트의 기술적 요구사항, 팀의 역량, 그리고 비즈니스 전략에 가장 부합하는 솔루션을 선택할 수 있도록 돕습니다.

아래 표는 네 가지 프레임워크의 핵심적인 특징을 한눈에 비교하여, 각 프로젝트의 상황에 맞는 최적의 도구를 선택하는 데 도움을 줍니다.

기능 Mender Balena RAUC SWUpdate
주요 모델 이미지 기반 (A/B) 컨테이너 기반 (하이브리드 OS) 이미지 기반 (유연함) 프레임워크 (유연함)
솔루션 유형 엔드투엔드 플랫폼 (클라이언트 + 서버) 통합 플랫폼 (OS + 클라우드) 클라이언트 측 도구 클라이언트 측 프레임워크
원자성 업데이트 예 (A/B 루트FS) 예 (호스트 OS용 A/B) 예 (A/B 또는 기타 스킴) 예 (A/B 또는 단일 파티션)
롤백 예 (부트로더 통합) 예 (호스트 OS); 애플리케이션은 재배포 예 (부트로더 통합) 예 (부트로더 통합)
업데이트 단위 전체 OS, 애플리케이션 (모듈), 델타 호스트 OS, 컨테이너 (효율적 델타) 전체 OS, 파일/아카이브, 델타 (casync) 전체 OS, 파일, 스크립트, 델타 (zchunk)
보안 모델 서명된 Mender 아티팩트 암호화 통신, balenaCloud 보안 서명된 번들 (x.509 인증서) 서명된 업데이트 (PKI 또는 GPG)
호스트 OS 지원 Yocto (권장); Debian/Ubuntu 지원 balenaOS (필수) Yocto/Buildroot (권장); Debian/Ubuntu 패키지 존재 Yocto/Buildroot (권장); Debian 패키지 존재
ROS2 통합 Yocto meta-ros 또는 ROS2를 .deb로 패키징 도커 컨테이너 Yocto meta-ros Yocto meta-ros 또는 커스텀 핸들러
생태계/라이선스 오픈소스 (Apache 2.0) 및 상용 버전 오픈코어 (openBalena) 및 상용 클라우드 (balenaCloud) 오픈소스 (LGPL-2.1) 오픈소스 (GPLv2, 라이브러리는 LGPLv2)
사용 편의성 중간 (Yocto 사용 시); 높음 (서버 UI) 높음 (관리형 플랫폼) 낮음 (높은 통합 노력 필요) 낮음 (높은 설정 노력 필요)

사용자의 요구사항인 ‘Ubuntu 22.04 호스트’는 현대 로보틱스 개발에서 매우 일반적인 환경입니다. 하지만 이 요구사항은 임베디드 OTA 프레임워크들이 추구하는 최고 수준의 견고성 철학과 본질적인 충돌을 일으킬 수 있습니다. 이 섹션에서는 이 충돌의 본질을 분석하고, 이를 해결하기 위한 두 가지 구체적이고 실용적인 아키텍처 경로를 제시합니다.

이 접근법은 대부분의 로보틱스 팀에게 가장 실용적이고 균형 잡힌 해결책이 될 수 있습니다. 이는 사용자의 핵심 요구사항인 ‘안정적인 애플리케이션 환경’의 정신은 유지하면서, ‘견고한 OS 업데이트’ 문제를 우아하게 해결하기 때문입니다.

이 경로는 호스트 OS에 대한 깊은 저수준 제어가 반드시 필요하거나, 특정 벤더에 대한 종속성을 완전히 배제해야 하거나, Balena가 지원하지 않는 독특한 하드웨어를 사용하는 팀을 위한 것입니다. 이 접근법은 ‘표준 Ubuntu 22.04 설치’라는 개념을 포기하고, 대신 Yocto를 사용하여 Ubuntu와 유사한 기능을 가진 커스텀 OS를 직접 빌드하는 것을 전제로 합니다.

결론적으로, 사용자의 초기 질문에 담긴 제약 조건을 해결하는 가장 효과적인 방법은 아키텍처의 관점을 전환하는 것입니다. Balena는 OS를 추상화하여 문제를 해결하고, Yocto+Mender는 OS 자체를 재구성하여 문제를 해결합니다. 이 두 가지 경로 중 하나를 선택하는 것이, 어설프게 표준 Ubuntu에 견고한 OTA를 억지로 끼워 맞추려는 시도보다 훨씬 더 성공적인 결과를 가져올 것입니다.

이 섹션에서는 파트 4에서 권장된 아키텍처, 즉 Balena를 활용한 컨테이너 중심 워크플로우를 구현하기 위한 실용적인 단계별 가이드를 제공합니다. 또한, 여기서 다루는 원칙들은 모든 OTA 배포에 적용될 수 있는 보편적인 모범 사례를 포함합니다.

견고하고 재현 가능한 배포의 첫걸음은 애플리케이션을 올바르게 컨테이너화하는 것입니다. 이는 단순히 코드를 박스에 넣는 행위를 넘어, 애플리케이션의 구조, 의존성, 설정, 그리고 상태를 명확하게 정의하는 설계 과정입니다.

컨테이너화된 애플리케이션이 준비되면, Balena와 같은 OTA 플랫폼을 통해 배포 및 업데이트 수명 주기를 관리합니다.

실제 상용 환경에서는 기능 구현을 넘어 보안과 안정성을 보장하기 위한 추가적인 조치가 필수적입니다.

이러한 체계적인 접근법을 통해, 컨테이너화는 단순한 패키징 기술을 넘어 애플리케이션의 아키텍처를 명확히 하고, 재현 가능하며 신뢰할 수 있는 배포 파이프라인의 기반을 마련하는 핵심적인 역할을 수행하게 됩니다.

본 보고서는 Ubuntu 22.04 호스트 환경에서 ROS2 Humble 애플리케이션을 OTA로 배포하는 복잡한 과제를 다각도에서 분석했습니다. 최종적으로, 기술적 세부 사항을 넘어 프로젝트의 성공을 좌우할 수 있는 전략적 결정을 내릴 수 있는 프레임워크를 제공하고, 로보틱스 배포의 미래를 조망하며 마무리하고자 합니다.

‘최고의’ OTA 솔루션은 존재하지 않으며, ‘가장 적합한’ 솔루션만이 존재합니다. 최적의 선택은 기술적 우수성뿐만 아니라 팀의 문화, 비즈니스 목표, 그리고 프로젝트의 맥락에 따라 달라집니다. 따라서 단일 솔루션을 추천하기보다는, 다음의 네 가지 핵심 질문을 통해 각 프로젝트가 스스로 최적의 경로를 찾을 수 있는 의사결정 프레임워크를 제시합니다.

이 질문들에 대한 답을 바탕으로, 대부분의 현대 로보틱스 팀에게는 Balena를 사용한 하이브리드 아키텍처가 가장 균형 잡힌 출발점이 될 것입니다. 이는 ROS 개발자에게 친숙한 컨테이너 워크플로우를 제공하면서도, 저수준 OS 업데이트의 견고성 문제를 해결해주기 때문입니다. 반면, 고도의 제어와 맞춤화가 필수적인 특정 산업(예: 국방, 항공우주, 고도로 규제된 의료기기)에서는 Yocto와 Mender/RAUC를 결합한 아키텍처가 더 적합할 수 있습니다.

본 보고서에서 논의된 주제들은 로보틱스 산업이 중요한 변곡점에 있음을 시사합니다.

  1. Why do OTA updates matter in IoT? - Arduino Blog, accessed July 24, 2025, https://blog.arduino.cc/2024/06/13/why-do-ota-updates-matter-in-iot/
  2. What does OTA mean? [Part I] - Ubuntu, accessed July 24, 2025, https://ubuntu.com/blog/what-does-ota-mean
  3. OTA IoT Breakdown: What OTA Is and How It Works in IoT - Memfault, accessed July 24, 2025, https://memfault.com/blog/ota-for-iot/
  4. What is OTA Update? - Mender, accessed July 24, 2025, https://mender.io/blog/what-is-ota-update
  5. 3 reasons why OTA updates are important [Part II] - Ubuntu, accessed July 24, 2025, https://ubuntu.com/blog/3-reasons-why-ota-updates-are-important-part-ii
  6. How to update and manage Linux & ROS2 software on robot fleets - qbee.io, accessed July 24, 2025, https://qbee.io/how-to-update-linux-software-on-robot-fleets-and-ros2/
  7. OTA (Over-The-Air) Updates For IoT Devices - Ezurio, accessed July 24, 2025, https://www.ezurio.com/resources/blog/ota-over-the-air-updates-for-iot-devices
  8. IoT Firmware Security and Update Mechanisms: A Deep Dive Encryption Consulting, accessed July 24, 2025, https://www.encryptionconsulting.com/iot-firmware-security-and-update-mechanisms-a-deep-dive/
  9. rauc/rauc: Safe and secure software updates for embedded Linux - GitHub, accessed July 24, 2025, https://github.com/rauc/rauc
  10. Update Factory - Android OTA and Fleet Management - Kynetics, accessed July 24, 2025, https://www.kynetics.com/android-ota-mdm
  11. Main Features – SWUpdate, accessed July 24, 2025, https://swupdate.org/features
  12. SWUpdate – Your OTA for Embedded Linux and IOT, accessed July 24, 2025, https://swupdate.org/
  13. Challenges With Device OTA Updates and Their Solutions - SoftServe, accessed July 24, 2025, https://www.softserveinc.com/en-us/blog/challenges-with-device-ota-updates
  14. A more secure and reliable OTA update architecture for IoT devices - Texas Instruments, accessed July 24, 2025, https://www.ti.com/lit/pdf/sway021
  15. Designing for OTA: How to Future-Proof Your Embedded Product from Day One - Promwad, accessed July 24, 2025, https://promwad.com/news/designing-for-ota-future-proofing
  16. Introduction Mender documentation, accessed July 24, 2025, https://docs.mender.io/overview/introduction
  17. OTA update: Definition & partitioning best practices - The Embedded Kit, accessed July 24, 2025, https://theembeddedkit.io/blog/ota-update-definition-best-practices/
  18. Deb packages - Update Modules - Mender Hub, accessed July 24, 2025, https://hub.mender.io/t/deb-packages/326
  19. Over-the-air update - Wikipedia, accessed July 24, 2025, https://en.wikipedia.org/wiki/Over-the-air_update
  20. Core Concepts balena, accessed July 24, 2025, https://docs.balena.io/learn/welcome/primer/
  21. Choosing the Right IoT Fleet Management System: A Look at Torizon, Balena and Mender, accessed July 24, 2025, https://www.ics.com/blog/iot-fleet-management-system-torizon-balena-mender
  22. Updating Embedded Linux Devices: Update strategies, accessed July 24, 2025, https://mkrak.org/2018/01/10/updating-embedded-linux-devices-part1/
  23. Automatic Deployment of ROS2 Based System to remote devices …, accessed July 24, 2025, https://discourse.ros.org/t/automatic-deployment-of-ros2-based-system-to-remote-devices-dual-copy-or-containers/33884
  24. Welcome to the RAUC documentation! - RAUC 1.14.127-e6b61 …, accessed July 24, 2025, https://rauc.readthedocs.io/en/latest/
  25. Architecture Overview balenaOS, accessed July 24, 2025, https://balena-os.pages.dev/architecture/
  26. Define a container - balena docs, accessed July 24, 2025, https://docs.balena.io/learn/develop/dockerfile/
  27. The Complete Beginner’s Guide to Docker for ROS 2 Deployment (2025) - Robotair, accessed July 24, 2025, https://blog.robotair.io/the-complete-beginners-guide-to-using-docker-for-ros-2-deployment-2025-edition-0f259ca8b378
  28. Comprehensive Embedded OTA Guide for IoT Solutions - Witekio, accessed July 24, 2025, https://witekio.com/blog/ota-update-solutions-the-ultimate-guide/
  29. Help Automating OS Image Creation with Mkosi for Mender-Compatible Deployment?, accessed July 24, 2025, https://hub.mender.io/t/help-automating-os-image-creation-with-mkosi-for-mender-compatible-deployment/7337
  30. README.md - mendersoftware/mender - GitHub, accessed July 24, 2025, https://github.com/mendersoftware/mender/blob/master/README.md
  31. Updating Embedded Linux Devices: Mender, accessed July 24, 2025, https://mkrak.org/2018/02/09/updating-embedded-linux-devices-mender/
  32. Upgrading Mender documentation, accessed July 24, 2025, https://docs.mender.io/client-installation/install-with-debian-package/upgrading
  33. Yocto and OTA software updates in an IoT project - Mender, accessed July 24, 2025, https://mender.io/blog/yocto-and-ota-software-updates
  34. balena docs, accessed July 24, 2025, https://docs.balena.io/learn/welcome/introduction/
  35. balena CLI Documentation, accessed July 24, 2025, https://docs.balena.io/reference/balena-cli/latest/
  36. RAUC: Safe and Secure OTA Updates for Embedded Linux, accessed July 24, 2025, https://rauc.io/
  37. Welcome to the RAUC documentation! - RAUC 1.14.127-e6b61 documentation, accessed July 24, 2025, https://rauc.readthedocs.io/
  38. SWUpdate OTA i.MX8MM EVK / i.MX8QXP MEK - NXP Community, accessed July 24, 2025, https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/SWUpdate-OTA-i-MX8MM-EVK-i-MX8QXP-MEK/ta-p/1307416
  39. SWUpdate: software update for embedded system, accessed July 24, 2025, https://sbabic.github.io/swupdate/swupdate.html
  40. SWUpdate Best Practice - Embedded Software Update Documentation 2025.05 documentation, accessed July 24, 2025, https://sbabic.github.io/swupdate/swupdate-best-practise.html
  41. Updating an embedded system - Embedded Software Update Documentation 2025.05 documentation, accessed July 24, 2025, https://sbabic.github.io/swupdate/
  42. ros/meta-ros: OpenEmbedded Layers for ROS 1 and ROS 2 - GitHub, accessed July 24, 2025, https://github.com/ros/meta-ros
  43. Machine names and architectures - balena docs, accessed July 24, 2025, https://docs.balena.io/reference/base-images/devicetypes/
  44. balena ROS2 Foxy Base container - GitHub, accessed July 24, 2025, https://github.com/balena-io-examples/balena-ros2-foxy-base
  45. ROS 2 Humble Hawksbill with Yocto and PetaLinux - Hardware Acceleration in Robotics, accessed July 24, 2025, https://news.accelerationrobotics.com/ros2-humble-yocto-petalinux/
  46. Best Practices for Deploying a Production-Ready ROS2 Robot : r/ROS - Reddit, accessed July 24, 2025, https://www.reddit.com/r/ROS/comments/1idvrr4/best_practices_for_deploying_a_productionready/
  47. Install ROS2 Humble on Ubuntu 22.04 - YouTube, accessed July 24, 2025, https://www.youtube.com/watch?v=flT3LIIR5qo
  48. Intro: Install and Setup ROS2 Humble - ROS2 Tutorial 1 - YouTube, accessed July 24, 2025, https://www.youtube.com/watch?v=0aPbWsyENA8
  49. Example projects - balena docs, accessed July 24, 2025, https://docs.balena.io/learn/more/examples/example-projects/
  50. Deployment Guidelines - ROS 2 Documentation: Humble documentation, accessed July 24, 2025, https://docs.ros.org/en/humble/Tutorials/Advanced/Security/Deployment-Guidelines.html
  51. OTA Best Practices - Getting Started, accessed July 24, 2025, https://docs.aylanetworks.com/docs/command-center-ota-best-practices
  52. Beware the OTA: The Dangers of Over the Air Updates - ByteSnap, accessed July 24, 2025, https://www.bytesnap.com/news-blog/beware-ota-dangers-over-the-air-updates/
  53. Implementing OTA Updates: Best Practices for Manufacturers, accessed July 24, 2025, https://www.regamiota.com/post/implementing-ota-updates-best-practices-for-manufacturers
  54. Building the future of robotics with open-source and ROS 2, accessed July 24, 2025, https://pal-robotics.com/blog/future-of-robotics-open-source-ros-2/
  55. ROS 2 (Robot Operating System): overview and key points for robotics software Robotnik ®, accessed July 24, 2025, https://robotnik.eu/ros-2-robot-operating-system-overview-and-key-points-for-robotics-software/
  56. ROS 2 Key Challenges and Advances: A Survey of ROS 2 Research, Libraries, and Applications - ResearchGate, accessed July 24, 2025, https://www.researchgate.net/publication/384942758_ROS_2_Key_Challenges_and_Advances_A_Survey_of_ROS_2_Research_Libraries_and_Applications
  57. ROS 2 Key Challenges and Advances: A Survey of ROS 2 Research, Libraries, and Applications - Preprints.org, accessed July 24, 2025, https://www.preprints.org/manuscript/202410.1204/v1