우리는 훌륭한 소프트웨어와 하드웨어의 미래를 믿고, 함께 개발하고, 신속하게 전달하며, 그 과정에서 흥미를 느낄 수 있습니다. 임베디드 개발은 다른 모든 소프트웨어 개발만큼이나 간단해야 하며, 아이디어의 결과는 실행되는 장치에서 즉시 확인 가능해야 합니다.

우리를 둘러싼 장치 및 주변 기기의 수는 급속도로 증가하고 있으며, 지능화 되고 다양한 하드웨어에서 실행되는 소프트웨어 (화면이 있거나 없는 IoT 장치, 스마트 시계, 하이 엔드 스마트 TV 및 산업용 PC) 를 필요로 합니다. 소프트웨어 개발의 요구 사항과 변화하는 환경에 Qt 도 적응해야만 합니다. 우리는 이를 위해 Qt Lite 프로젝트를 발표했습니다. 이것은 Qt에 대한 전반적인 변경 사항으로 기존의 Qt 에서 벗어나 용량에 관계없이 어느 플랫폼에서든 장치를 만드는 데 필요한 최소한의 기능을 정확히 가져올 수 있습니다. Qt Lite는 Qt 의 별도의 제품이나 fork 가 아니며 Qt에 내장되어 있어 Qt 프레임 워크의 일부로 효율적으로 개발하고 유지할 있게 해줍니다. 따라서 이러한 변경 사항 중 많은 부분이 Qt 사용자 모두에게, 특히 리소스가 제한적인 장치를 개발하는 사용자들에게 도움을 줄 것입니다.

지난 20 년 동안 Qt는 광범위한 운영 체제 및 임베디드 장치에 사용 되었습니다. Qt는 임베디드 리눅스에서의 개발이 데스크톱과 마찬가지로 중요한 작업임을 알고 있었고, 다른 많은 임베디드 운영 체제 역시 동등하게 트렌드를 따라 버전을 업데이트 해왔습니다. Qt 는 다양한 Linux, Microsoft 및 여러 실시간 운영 체제(RTOS) 를 지원해 왔습니다.

그러나 이러한 운영 체제에서 Qt 를 효율적으로 사용하려면 특히 임베디드 장치에서 – 종종 특별한 – 때때로 수많은 하드웨어 컴퍼넌트의 사용, 이용 가능한 라이브러리들, Qt 의 일부 요소들 또는 필요로 하지 않는 OS 등을 제거하는 데에는 많은 도전과 시간이 소요되는 경우가 있습니다.

지난 6 개월 동안 우리는 이러한 많은 과제들을 살펴 보았으며 Qt를 임베디드 장치 기반 제품에서 전체 개발주기와 시간을 단축하는 목표로 하는 프레임 워크로 만드는 작업을 해왔습니다. 이 블로그 포스트에서 우리는 변경 사항의 일부를 살펴보고 앞으로의 계획도 알아볼 수 있을 것입니다. 이러한 모든 노력들은 “Project Qt Lite”의 일환입니다.

 

구성 시스템

우리는 Qt가 다양한 산업 및 다른 목적으로 수많은 프로젝트에서 사용되고 있음을 압니다. 따라서 Qt 를 단순히 하나를 변경하여 최적의 버전을 구현하는 것은 현실적으로 불가능합니다. Qt 5.8에서 임베디드 개선의 일환으로 시작되는 출발점이자 가장 큰 코드의  변경은 새로운 구성 시스템입니다. Qt 5를 처음 소개했을 때, 우리는 Qt의 모듈화에 포커스를 맞추고 있었습니다. 모듈은 서로 덜 의존적이 되어 쉽게 개발 하거나 테스트 및 배포 할 수 있었습니다. 그러나 각 모듈의 컨텐츠를 구성하는 것은 여전히 어려운 작업이기 때문에 리소스가 제한된 임베디드 시스템을 최적화하는 것에는 한계가 있었습니다. 다국어화나 오디오 기능 또는 더 광범위한 멀티미디어 기능을 처리하는 것과 같은 특정 기능이 필요한 경우, 일부 기능만 필요한 몇 가지 새로운 모듈을 추가해야 하는 경우가 많습니다. 하나의 단일 기능을 사용하려면 많은 수동 조정이 필요했으며 많은 시간이 필요했습니다.

Qt의 새로운 구성 시스템을 사용하면 각 모듈에서 필요한 컨텐츠를 프로젝트에 대해 훨씬 자세하게 정의 할 수 있으며 Qt 모듈의 기능 기반 맞춤을 쉽게 설계 할 수 있습니다. 우리는 Qt Core, Qt Network, Qt GUI, Qt QML 및 Qt Quick에서 이 기능을 완벽하게 활성화하는 것으로 시작했습니다. 이제 이 모듈에서 프로젝트에 포함 되는 기능을 세밀하게 조정할 수 있습니다. 불필요한 기능을 포함 할 필요가 없습니다. 우리는 또한 이것을 더욱 세분화하고 앞으로 더 많은 모듈을 포함하도록 확장 할 것입니다.

 

개발자 워크 플로우

이제 우리는 개발 시작부터 최적화를 염두에 둔 워크 플로우에 중점을 두고자 합니다. 하드웨어가 점점 더 저렴해지는 시장에서 대부분의 프레임 워크는 풋프린트 또는 메모리 사용에 별 관심이 없어졌습니다. – 모든 라이브러리는 이동, 전체 기능 사용 및 옵션 테스크가 포함되어 있습니다. 이는 기능 개발을 단순하게 하지만 최적화를 훨씬 더 어렵게 만듭니다. Qt Lite을 사용하면 최소한의 배포 가능한 구성으로 시작할 수 있으므로 프로젝트를 개발하는 동안 필요한 추가 기능을 간단히 추가 할 수 있습니다.

이를 통해 작업의 결과에 대한 지속적인 이해와 함께 완벽한 제어가 가능하며 팀 전반을 통해 개발 프로젝트를 투명하게 처리 할 수 있습니다. 응용 프로그램 크기는 얼마인가요? 웹 브라우저가 정말로 필요합니까? 그리고 이러한 세부 기능의 삭제가 실제로 의미가 있습니까? 당신은 포함 된 모든 기능과 추가 된 모듈이 즉시 표시됨에 따라 응용 프로그램의 전체 설치 공간에 미치는 영향을 알 수 있습니다.

이를 용이하게 하기 위해 우리는 Qt Lite의 일부로 두 가지 서로 다른 참조 구성을 제공합니다.

첫째, 전체 프로토 타이핑 환경. 예를 들어 데모 이미지에 있는 구성은 Qt for Device Creation 과 함께 제공됩니다. 이것은 중간 규모의 프로젝트에 소량 배포를 시작하기에 좋은 출발점입니다. 모든 기능을 사용할 수 있으며 제품에 쉽고 빠르게 사용할 수 있습니다.

그 외에도 우리는 가능한 한 최소화 하는 또 다른 Qt 구성을 추가하려고 합니다. 이는 보다 적은 설치 공간과 고성능을 제공하며 시장에 신속하게 전달되는 소프트웨어의 시작점이 될 것입니다. 프로젝트가 끝날 때 최적화에 소요되는 시간을 크게 줄임으로써 제품 출시 기간을 단축 할 수 있습니다.

 

OpenGL 요구 사항 없음

Qt Quick 및 QML 기술의 핵심 드라이버 중 하나는 OpenGL에 최적화 된 렌더링 아키텍처를 도입하는 것이었습니다. 그러나 그로인해 OpenGL이 모든 Qt Quick 기반 프로젝트의 요구 사항이 되었습니다. 여러 가지 이유로 우리는 OpenGL을 지원하지 않는 보다 저렴하고 효율적이며 특수 인증 된 하드웨어가 필요로 합니다.  따라서 Qt에서는 Qt Quick에 완벽하게 통합되고 지원되며 효율적인 2D Software Renderer 를 도입했습니다. 이를 통해 QML 언어의 모든 기능을 사용하면서도 OpenGL 하드웨어를 사용할 수 없는 임베디드 장치에서 화려한 사용자 인터페이스를 만들 수 있습니다.

Qt Quick 2D 렌더러는 소프트웨어에서만 작동 할 수 있지만 완전하게 OpenGL 을 지원하지 않는 장치에 대해서 가속화된 2D 작업에 활용될 수 있도록 디자인 되었습니다.

 

Tooling

새로운 구성 시스템과 함께 Qt를 빌드 할 때 다양한 옵션을 구성, 선택 및 설정하기 위한 새로운 그래픽 도구도 개발했습니다. 이 도구는 구성을 저장하고 재사용 할 수 있습니다. 또한 새 하드웨어 또는 요구 사항 변경에 대해 보다 쉽게 수정할 수 있습니다.

Qt configuration tooling은 이전보다 훨씬 강력하고 풍부한 기능을 제공합니다. 모든 옵션에 쉽게 액세스 할 수 있게 하고, 문서를 통합하고 다양한 유즈 케이스에 적합한 초기 기본 구성을 제공함으로써 기존 프로젝트의 기능을 간단하고 효율적으로 얻을 수 있습니다.

우리는 현재 국제화, 멀티미디어, 웹 기능 또는 기타 기능과 같은 사용 사례를 쉽게 하기 위해 필요한 구성 요소를 확인하고, 그룹별로 옵션을 정리하고 있습니다. 물론 이러한 구성과 프로필은 저장 가능하며 다른 빌드, Qt 버전 또는 새 하드웨어와 함께 계속 사용할 수 있습니다. 이 툴들은 Qt for Device Creation 의 일부로 통합될 것입니다.

 

타겟

우리의 주요 초점은 Qt 기반 응용 프로그램을 쉽고 효율적으로 배포하는 데 사용할 수 있는 하드웨어를 확장하는 것입니다. 현재 진행중인 여러 가지 장치 및 프로젝트 유형이 있습니다. 일반적인 예는 32MB 또는 16MB 영역에 RAM 및 플래시가 장착 된 장치가 될 수 있으며 장래에는 훨씬 더 사양이 낮아질 것입니다. 또한 QtQuick 을 사용하기 위해서 더이상 OpenGL 하드웨어를 사용할 필요가 없으며, 사용 가능한 장치의 수를 비약적으로 확대할 수 있습니다.

이것의 주요 용도는 여전히 Cortex A 기반 아키텍처이며, 우리는 ARM Cortex M7도 목표로 삼고 있습니다.

 

그리고 리스트는 계속됩니다.

Qt 5.8에는 자원이 제한된 장치에 대해서 임베디드 개발자 경험과 장치 생성 워크 플로우를 향상시키는 많은 다른 기능이 있습니다. 우리는 터치 지원 장치를 위해 특별히 설계된 Qt Quick Controls 2를 추가로 개발하고 개선 된 점과 새로운 테마를 비롯하여 많은 새로운 기능을 소개합니다.

우리는 새로운 OTA 업데이트 메커니즘에 많은 노력을 기울였습니다. 이것 또한 Qt 5.8의 Qt for Device Creation의 일부이기도 하며, 우리는 이미 그것에 대해 아주 상세하게 블로깅 했습니다. 이는 디바이스 라이프 사이클을 관리하는 매우 강력한 방법을 제공함으로써 디바이스 제작자의 삶을 단순화하고 출시 기간을 단축하며 프로젝트의 총 비용을 절감하려는 우리의 지속적인 노력의 일부입니다.

Qt Wayland 기반 컴포지터는 완전한 멀티플 애플리케이션 디바이스를 간단하게 만들 수 있게 합니다. 그러나 우리는 또한 EGLFS 과 멀티 스크린 기능도 향상시키고 있습니다.

또한 Qt Creator와 함께 제공되는 Qt 에뮬레이터를 사용하면 프로젝트의 모든 개발자가 하드웨어 없이도 설계를 신속하게 반복하고 응용 프로그램을 최적화 할 수 있습니다.

 

앞서 열린 길

우리는 오랫동안 Qt for Device Creation 제품과 같이 임베디드 공간에 많은 포커스를 두었습니다. 우리는 이러한 노력을 계속할 것입니다. 우리는 그 노력이 내부 프로젝트로 끝나지 않고 많은 홍보가 될 수 있기를 바랍니다. 왜냐하면 그것은 개발자를 위한 것으로 당신이 제품을 만들 때 얻을 수 있는 것이기 때문입니다. 우리의 목표는 Qt를 개선하여 가볍고 사용하기 쉬우며 이전보다 훨씬 뛰어난 성능을 내는 것입니다.

우리는 Qt가 다양한 산업에서 광범위한 장치에서 실행되는 모든 종류의 임베디드 프로젝트를 위해 더 나은 프레임 워크를 만드는 작업을 계속할 것입니다. 우리는 아직도 흥미 진진한 계획을 가지고 있으며, 수많은 고객과 함께 시장에서 훌륭한 프로젝트를 구현 하기 위해 노력하고 있습니다. Qt를 기반으로 한 자동차 시스템, Avionics 산업에서의 Qt 의 활용, 그리고 가전 제품에서의 Qt 기반 프로젝트 작업 등이 그 예입니다. Qt 기반 플랫폼으로 모든 장치를 개발하고 지원되는 프로토콜을 통해 통신하며 소프트웨어를 차세대 장치로 쉽게 확장 할 수 있는지 확인하는 것은 다양한 산업 분야에서 매우 중요하며 그런 의미에서 IoT 또한 우리의 전략에서 또 하나의 중요한 부분입니다.

 

Qt Lite 의 기본 요소가 진행 되면 다음 단계는 3가지 주요 라인을 따라 진행됩니다.

첫째, 코드 최적화로 런타임 성능과 RAM 소비를 향상시킵니다. 이것은 Qt의 여러 부분에서 많은 코드 변경이 필요합니다. 이러한 변경 사항 중 일부는 Qt와 완전히 호환되는 소스가 아니지만 임베디드 프로젝트의 성능을 위해 어느정도 희생 될 수 있다고 생각합니다. 이것은 중요하면서도 어려운 작업이며, 우리의 최고 개발자 중 일부가 이 작업에 착수했습니다.

두 번째로 Qt 라이브러리 뿐만 아니라 전체 스택의 구성에 많은 시간을 할애 할 것입니다. Qt for Device Creation을 통해 우리는 Yocto를 기반으로 하는 즉시 사용 가능한 임베디드 Linux 스택을 제공합니다. 또한 새로운 구성 시스템을 확장하여 전체 Linux 스택과 Qt 빌드를 커버하고 최적화합니다. 이를 통해 Qt 비트뿐만 아니라 총 풋 프린트, 부팅 시간 및 시스템의 복잡성을 쉽고 효율적으로 향상시킬 수 있습니다.

개선의 세 번째 방향은 모든 툴을 보다 완벽하게 통합하고, 모든 요소를 동일한 툴에 연동시켜 이를 Qt Creator에 통합하는 것입니다. 우리는 이것이 개발자 경험뿐만 아니라 팀 전체의 의사 소통을 향상시키고 다른 이해 관계자에 대한 투명성을 높이며 프로젝트의 총 시간 / 비용을 줄일 수 있다고 생각합니다.

 

요약하면, 임베디드 개발을 보다 효율적으로 처리하는 방법과 리소스가 제한된 하드웨어를 최대한 활용하는 방법에 대해서 살펴보았습니다. 필요에 따라 Qt를 다 간단하게 제작할 수 있게 해주고 리소스가 제한적인 장치의 성능을 향상시키는 구성 아키텍처로Qt를 개선했습니다. 그러나 우리는 추가 개선을 향한 분명한 길을 걷고 있습니다. 초점은 Qt를 더욱 빠르고 작고 쉽게 작업하게 만드는 데 있습니다.

 

 

본 문서는 qt.io 의 “Introducing the Qt Lite project—Qt for any platform, any thing, any size” 을 번역한 블로그로 의역 및 오역 이 있을 수 있습니다.