“‘컨테이너 기술’ 임베디드 SW 개발 더 효율적·유연하게 만든다”
경량화·일관된 개발 환경·보안성·유연한 배포 등 장점
현대화된 워크플로우 구축 개발팀에 매우 유용한 도구
[편집자주]임베디드 소프트웨어 개발을 바꾸는 컨테이너 기술에 대해 마우저 일렉트로닉스(Mouser Electronics)의 애덤 테일러(Adam Taylor)에게 들어봤다.
임베디드 소프트웨어 개발은 프로젝트마다 하드웨어 구성과 인터페이스가 다르기 때문에 모두가 서로 다르다.
그러나 컨테이너화를 통해, 특히 공통의 마이크로프로세서나 동일 계열의 마이크로프로세서를 사용하는 설계에서는 개발자가 소프트웨어 라이브러리와 기능을 보다 쉽게 활용할 수 있다.
최근 몇 년 동안 클라우드 분야에서 컨테이너화는 점점 더 대중화되었고, 기술 업계 전반에서도 애플리케이션 개발 및 배포에 유용한 접근 방식으로 자리 잡고 있다.
이 글에서는 컨테이너화의 이점과 그것이 애플리케이션 및 임베디드 소프트웨어 개발 방식을 어떻게 변화시키고 있는지를 살펴본다.
■ 컨테이너화의 장점
컨테이너화는 가상화의 한 형태이다.
가장 일반적인 가상화 방식은 가상 머신으로, 운영 체제를 포함한 전체 컴퓨터를 에뮬레이션한다.
가상 머신을 사용하면 하나의 물리적 컴퓨터에서 여러 애플리케이션과 운영 체제를 실행하는 소프트웨어 기반 컴퓨터를 개발자가 이용할 수 있다.
예를 들어 FPGA 엔지니어는 윈도우 개발 환경에서 리눅스 가상 머신을 활용해 임베디드 리눅스 솔루션을 개발할 수 있는데, 이는 리눅스 환경에서의 컴파일이 필요한 경우에 해당한다.
가상 머신을 활용하면 별도의 개발용 컴퓨터를 마련하지 않아도 된다.
하지만 경우에 따라 개발자는 전체 물리적 시스템과 운영 체제를 가상화할 필요가 없고, 하나의 애플리케이션과 그에 필요한 라이브러리 및 종속 요소만 분리해 실행하고자 할 수 있다.
이러한 경우 임베디드 컨테이너는 애플리케이션을 기반 운영 체제와 분리하면서 실행에 필요한 모든 종속 요소를 함께 포함하는 가상화 계층 역할을 한다.
이 컨테이너는 전체 가상 머신보다 훨씬 가볍고 효율적인 방식으로 애플리케이션을 배포할 수 있게 해준다.
처음에는 컨테이너가 임베디드 소프트웨어 개발에 도움이 된다는 것이 다소 생소하게 느껴질 수 있다.
임베디드 소프트웨어는 하드웨어와 훨씬 더 밀접하게 연결되어 있기 때문이다.
그러나 임베디드 소프트웨어 개발에서도 컨테이너의 유용한 활용 사례가 존재한다.
가장 명확한 사례는 프로젝트에 참여하는 모든 개발자에게 동일한 빌드 환경을 복제해 제공하는 것이다.
모든 개발자가 동일한 환경을 사용하도록 하면, 라이브러리 버전이나 환경 설정, 컴파일러 옵션의 미세한 차이로 인해 발생할 수 있는 변동성을 제거할 수 있다.
이는 전통적인 소프트웨어 개발 환경에서도 컨테이너가 사용되어 온 방식이며, 임베디드 시스템 개발자에게도 클라우드나 SaaS 개발자들과 마찬가지로 큰 장점을 제공한다.
컨테이너의 주요 장점 중 하나는 이를 임베디드 시스템에 직접 배포할 수 있다는 점이다.
컨테이너는 임베디드 리눅스나 실시간 운영 체제(RTOS) 환경에서 실행되도록 설계되며, 해당 임베디드 시스템 위에 배포된다.
임베디드용 컨테이너는 종종 하드웨어에 밀접하게 연동되어 있으며, 전통적인 컨테이너 애플리케이션보다 낮은 수준의 언어로 작성되는 경우가 많다.
일반적으로 임베디드 시스템은 자원이 제한적이며, 특정 목적의 애플리케이션에 특화되어 있다.
또한 무단 접근이나 변경이 허용되지 않는 까다로운 환경에 배치되는 경우도 많다.
임베디드 애플리케이션에 컨테이너를 사용하는 것은 표면적으로 드러나는 장점들, 예를 들어 애플리케이션을 지원하는 라이브러리와 리소스를 일관되게 배포할 수 있다는 점 외에도 여러 가지 이점을 제공한다.
그중에서도 중요한 장점은 애플리케이션 간의 고유한 격리 특성에서 비롯되는 격리성과 보안성이다.
물론 보안 침해나 문제는 여전히 발생할 수 있지만, 그 영향 범위는 일반적으로 해당 컨테이너 내부에 국한된다.
또한 임베디드 컨테이너를 활용하면 마이크로서비스 아키텍처의 장점을 도입할 수 있다.
마이크로서비스 아키텍처는 복잡한 애플리케이션을 서비스라는 작고 관리 가능한 단위로 분할해 구성하며, 이를 통해 병렬 개발이 가능하고, 컨테이너 간에 정의된 인터페이스(예: 포트, Docker 네트워크)를 활용한 통신을 통해 테스트도 용이해진다.
컨테이너 기반 접근 방식은 현장에서 이루어지는 업데이트나 수정 작업의 어려움을 해소하는 데도 유리하다.
Docker Hub, AWS, Harbor, Azure와 같은 네트워크 기반 또는 클라우드 기반 서비스를 통해 손쉽게 컨테이너를 배포할 수 있기 때문이다.
예를 들어, 업데이트된 컨테이너를 임베디드 장치에 배포하고, 이를 시스템의 안전하고 적절한 시점에 설치할 수 있다.
임베디드 환경에서 컨테이너를 배포하는 작업은 기업의 개발, 보안, 운영을 아우르는 DevSecOps 환경에 포함되어야 하며, 일관성을 유지하고 안전하고 효과적으로 배포되도록 해야 한다.
이는 특히 미션 크리티컬한 최종 애플리케이션에서 더욱 중요하다.
이러한 컨테이너 기반 접근 방식은 Open Container Initiative(OCI)와 같은 프로그램을 통해 표준화도 더욱 촉진되고 있다.
OCI는 컨테이너 기술의 표준화를 목표로 하는 업계 주도의 프로젝트로, 런타임과 이미지 사양을 모두 정의한다.
이러한 표준화 덕분에, 임베디드 애플리케이션에 배포되는 컨테이너에 대한 지원 구현이 수월해지며, 각 컨테이너가 익숙한 방식으로 패키징되고 배포된다.
임베디드 소프트웨어 개발에 컨테이너를 활용하려면 섬세한 접근이 필요하다.
임베디드 시스템은 자원이 제한적이고 실시간 처리가 요구되며, 하드웨어 의존성이 크기 때문에 컨테이너화를 위한 맞춤형 전략이 필요하다.
최근에는 이러한 임베디드 환경에서의 컨테이너화를 지원하는 도구와 플랫폼이 등장하고 있지만, 기존의 워크플로우에 통합하려면 신중한 고려와 조정이 요구된다.
이 블로그에서 간략히 소개된 여러 접근 방식 중에서 현재 가장 보편적인 활용 사례는, 컨테이너를 이용해 임베디드 소프트웨어 개발 환경을 구성하고 이를 DevSecOps 체계와 통합하는 것이다.
그러나 앞으로는 이러한 컨테이너화된 개발 환경에서 제작된 소프트웨어를 실제 임베디드 장치에 컨테이너 형태로 직접 배포하는 방식이 점점 더 보편화될 것으로 예상된다.
■ 컨테이너 활용 임베디드 SW 개발 효율적이고 유연하게
임베디드 시스템이 점점 더 정교해짐에 따라, 일관성, 효율성, 자동화를 가능하게 하는 도구의 도입은 매우 중요하다.
컨테이너를 적절하게 활용하면 임베디드 소프트웨어 개발 과정을 더욱 효율적이고 유연하게 만들 수 있으며, 개발자에게는 더 나은 작업 경험을 제공할 수 있다.
워크플로우를 현대화하고자 하는 팀이라면 컨테이너 기술을 주의 깊게 살펴볼 가치가 충분하다.
※ 저자 소개
애덤 테일러(Adam Taylor)는 임베디드 시스템 분야의 교수이자 엔지니어링 리더이며, FPGA/SoC 및 전자 설계 분야에서 세계적으로 인정받는 전문가이다.