Mobile

[타이젠] (4) 타이젠 플랫폼의 이해

OSS 2013-11-25 20:53:18 19107
2013
임베디드월드

글: 서주영 | seojuyung2@gmail.com / 2013-08-06





지금까지 총 3회에 걸쳐 리눅스 기반 범용 오픈소스 플랫폼 타이젠의 정의, 역사, 특징 및 타이젠이 제공하는 개발자용 도구인 SDK(Software Development Kit)에 대해서 알아봤다. 이번 호에서는 타이젠 플랫폼을 지탱하고 있는 다양한 구성요소를 살펴보겠다.


[연재 차례]

1. 타이젠, 리눅스 기반 오픈소스 플랫폼
2. 타이젠 SDK(1)
3. 타이젠 SDK(2)
4. 타이젠 플랫폼의 이해
5. 타이젠 웹 애플리케이션 개발(1)
6. 타이젠 웹 애플리케이션 개발(2)
7. 타이젠 네이티브 애플리케이션 개발(1)
8. 타이젠 네이티브 애플리케이션 개발(2)
9. 타이젠 개발자 서밋 코리아 2013
10. 타이젠 플랫폼 개발



타이젠 시리즈 (4)

타이젠 플랫폼의 이해



타이젠은 누구나 쉽게 만들고 지속적으로 관리할 수 있는 단순한 프로그램을 지칭하는 것이 아니다. 커널에서부터 그래픽 라이브러리, 웹(Web) 프레임워크, 네이티브(Native) 프레임워크, 그리고 일부 애플리케이션까지 모든 것을 아우르는 커다란 플랫폼이다. 이런 플랫폼을 구성하기 위해 타이젠은 수많은 오픈소스 프로젝트를 사용하고 있으며 타이젠에 특화된 자체 제작 프로젝트도 다수 있다.

타이젠에서 사용하는 오픈소스 프로젝트의 경우 수정 사항을 다시 해당 오픈소스 프로젝트에 반영을 하는 등 기존 오픈소스 생태계 발전에도 기여하고 있다. 타이젠에 특화된 자체 제작 프로젝트의 경우 오픈소스화하여 아파치 라이선스로 공개를 하고 있어 누구든지 개발에 참여할 수 있다.

이번 호에서는 이렇게 타이젠의 근간이 되는 다양한 프로젝트를 큰 카테고리로 나누어보고 핵심이 되는 모듈을 살펴보겠다. 타이젠을 이용하여 애플리케이션을 개발하는 개발자뿐 아니라 타이젠 프로젝트 자체에 관심이 있는 플랫폼 개발자는 이번 연재를 관심 있게 읽을 것이라 기대한다.
타이젠은 삼성전자와 인텔의 주도 하에 활발히 개발이 진행되고 있으며 본 연재는 빠르게 발전하는 타이젠 최신 정보를 반영하고 있다.

이번 호는 지난 7월 3일에 공개가 된 타이젠 2.2 베타[1] 버전을 기반으로 하며 현재 타이젠에서 제공하는 모바일 프로파일 및 IVI 프로파일 중 모바일 프로파일에 중점을 두고 설명한다.

타이젠 소스코드

타이젠은 오픈소스이기 때문에 플랫폼 자체의 소스코드가 공개되어 있다. 타이젠의 각 구성요소를 소개하기에 앞서 앞으로 소개할 각 모듈의 소스코드를 확인하는 방법을 설명하겠다. 타이젠 소스코드는 Git[2]이라는 분산 버전 관리 시스템을 사용하여 관리된다. 소스코드는 git clone 명령을 이용하여 직접 다운로드 받을 수도 있지만, 타이젠 git-web[3] 사이트를 이용하여 쉽게 웹에서 확인할 수도 있다.

타이젠 git-web 사이트에 접속하면 그림 1과 같이 다양한 컴포넌트의 git 저장소 목록을 볼 수 있다. 이 중 app-core[4] 모듈의 소스코드를 살펴보자. 그림 2와 같이 git 로그와 태그 목록, 브랜치 목록이 있는데, 최근 업데이트된 tizen_2.2 브랜치의 트리[5]를 살펴보자. 그림 3 및 그림 4와 같이 app-core 모듈의 tizen_2.2 브랜치의 내용을 웹 상에서 확인할 수 있다. 같은 방법으로 앞으로 소개할 타이젠 모듈의 소스코드도 직접 살펴보기 바란다.

Linux, WebKit, EFL, GStreamer, U-Boot, FFMPEG, WebCL, Cairo, BlueZ, QEMU, GCC, ConnMan, NFC, PulseAudio, Smack, Wayland, oFono, X, wpa_supplicant, Dbus, glibc, OpenGL, Geoclue, libsoup, ...

[표 1] 타이젠에서 사용하고 있는 오픈소스 프로젝트


app-core, WRT(Web Runtime), system-server, sensor-fw, app-service, slp-pkgmgr, libslp-pm, msg-service, email-service, telephony-daemon, audio-session-manager, contacts-service, slp-calendar, accounts-svc, sync-fw, cert-svc, secure-storage, nfc-manager, ...

[표 2] 타이젠에서 자체적으로 개발한 프로젝트


[그림 1] 타이젠 Git Web (출처 : 자체 제작)


[그림 2] app-core Git Web(출처 : 자체 제작)




타이젠 아키텍처

타이젠 아키텍처를 개괄적으로 살펴보면 크게 커널, 코어 프레임워크, 웹 프레임워크, 네이티브 프레임워크, 그리고 애플리케이션 층으로 구성되어 있는 것을 확인할 수 있다. 이 중 타이젠 플랫폼 자체에 해당하는 커널 및 다양한 프레임워크는 수많은 서브시스템 및 모듈로 구성되어 있다. 모바일 프로파일에서는 웹 프레임워크와 네이티브 프레임워크가 모두 제공되는 것과 달리 IVI 프로파일에서는 네이티브 프레임워크를 사용하지 않고 웹 프레임워크만 사용한다.

<리눅스 커널>
타이젠 리눅스 커널은 3.0 버전에 기반하고 있으며 CMA/IOMMU와 같은 3.4의 기능을 일부 적용하였다. 프레임버퍼 대신 DRM/GEM, DMABUF를 사용하여 그래픽 메모리를 최적화하였다. 그 외에도 eMMC 4.5를 지원하며 V4L2(코덱, 카메라)를 지원한다. 또한 인가되지 않은 데이터 및 프로세스의 접근을 제어하는 Smack(Simplified Mandatory Access Control Kernel)을 적용하여 보안을 더욱 강화하였다.

<코어 프레임워크>
코어 프레임워크는 웹 프레임워크 및 네이티브 프레임워크에서 공통으로 필요로 하는 기본적인 기능을 제공하며 수많은 오픈소스와 자체 제작 모듈로 구성되어 있다. 타이젠에서는 코어 프레임워크를 쉽게 이용하기 위하여 코어 프레임워크의 각 모듈을 감싸주는 Core API를 제공하고 있다. 하지만 Core API가 모든 코어 프레임워크의 모듈을 지원하는 것은 아니며 서드파티 개발자에게는 공개되지 않아 제조사 및 타이젠 플랫폼 개발자만 Core API를 직접 사용할 수 있다.


[그림 3] app-core tizen_2.2 브랜치 Git Web(출처 : 자체 제작)


<웹 프레임워크>
웹 애플리케이션을 위한 프레임워크이며 다양한 최신 웹 기술을 지원한다. HTML5 API, 비디오, 오디오, 폼, 2D 캔버스, WebGL, CSS3, 웹소켓, 웹 워커 등과 같이 W3C 및 여러 표준화 단체에서 정의한 표준을 지원한다.
그리고 표준에서 제공하지 못하는 부족한 부분을 채우기 위해 블루투스, NFC, 알람, 메시징 등의 다양한 디바이스 API를 제공하고 있다. 또한 웹 애플리케이션 실행, 라이프 사이클 관리, 접근 제어 등의 역할을 하는 Web Runtime도 제공하고 있다. 웹 프레임워크 중 UI 프레임워크는 jQuery 모바일을 사용하고 있다.

<네이티브 프레임워크>
C++ 네이티브 애플리케이션 개발을 위한 프레임워크로 타이젠 2.0에 도입되었다. 네이티브 프레임워크는 기존의 바다 플랫폼에 해당하며 1만여 개가 넘는 API를 제공한다. Base, Io, App, Security, Graphics, Ui, Net, Messaging, Social, Locations, Web 및 백그라운드 서비스, 이미지 및 얼굴 인식, TTS/STT 등 네이티브 애플리케이션에서 필요로 하는 다양한 기능을 지원한다.

그림 4. app-core tizen_2.2 브랜치 Git Web(출처 : 자체 제작)


[그림 5] 타이젠 아키텍처 모바일 프로파일 (출처 : 타이젠개발자컨퍼런스 2013)




타이젠 애플리케이션 유형

타이젠 애플리케이션은 사용하는 프레임워크에 따라 다음과 같이 분류할 수 있다.

<코어 애플리케이션>
코어 프레임워크에서 제공하는 Core API를 사용한 C 혹은 C++ 애플리케이션이다.
GUI(Graphics User Interface) 애플리케이션의 경우 EFL(Enlightenment Foundation Libraries) 툴킷을 사용한다. 성능이 좋고 메모리 및 전력 소모 면에서 우수하지만 Core API 문서가 공식적으로 공개되어 있지 않고 타이젠 IDE에서의 지원이 미약하다. 타이젠 2.2 베타 버전부터 타이젠 IDE의 플랫폼 프로젝트 메뉴에서 EFL 애플리케이션 템플릿을 지원한다.

<웹 애플리케이션>
HTML5/W3C API, JavaScript, CSS 및 디바이스 API와 같은 웹 프레임워크를 사용한 애플리케이션이며 일반 애플리케이션과 같이 기기에 설치할 수 있다.
API가 서드파티 개발자에게 공개되어 있다. 개발이 상대적으로 쉬워 진입 장벽이 낮다는 장점이 있다. 기기나 플랫폼 간의 이식성이 뛰어나며 타이젠은 HTML5 호환성 지원이 매우 우수하기 때문에 타이젠의 웹 애플리케이션은 다른 플랫폼보다 다양한 HTML5 기능을 사용할 수 있다.
타이젠IDE에서 웹 애플리케이션을 위해 UI 빌더, 웹 인스펙터, 시뮬레이터 등 강력한 개발 도구를 지원한다. IDE 상에서 다양한 샘플 애플리케이션을 지원하며 문서화가 잘 되어 있다. 단 일반적으로 네이티브 애플리케이션 보다 성능 면에서 단점을 보인다.

[그림 6] 타이젠 아키텍처 IVI 프로파일 (출처 : 타이젠개발자컨퍼런스 2013)




<네이티브 애플리케이션>
C++ 기반의 네이티브 프레임워크를 사용한 애플리케이션이다. API가 서드파티 개발자에게 공개되어 있다. 성능 및 메모리 사용량 면에서 웹 애플리케이션보다 우수하며 기존에 작성된 C 나 C++ 라이브러리를 그대로 사용할 수 있어 C나 C++ 기반의 프로젝트를 타이젠으로 포팅하기 용이하다. 애플리케이션 바이너리 하위 호환성(ABC, app binary compatibility)을 지원하고 API 레퍼런스나 개발자 가이드, 샘플 코드 등의 문서화가 잘 되어 있다.
하지만 웹 애플리케이션 대비 플랫폼 간 호환성이 떨어진다는 단점이 있다. 네이티브 애플리케이션은 크게 UI 애플리케이션과 서비스 애플리케이션으로 나뉜다. UI 애플리케이션은 눈에 보이는 GUI가 있으며 포그라운드(foreground) 혹은 백그라운드(background) 상태로 실행될 수 있다. 서비스 애플리케이션은 눈에 보이는 GUI가 없으며 백그라운드로 실행된다.

<하이브리드 애플리케이션>
웹 프레임워크와 네이티브 프레임워크를 같이 사용한 애플리케이션이다.
일반적으로 화면 구성을 위해 웹 프레임워크를 사용하고 백그라운드 서비스를 위해 네이티브 프레임워크를 사용하는 애플리케이션이 하이브리드 애플리케이션에 해당한다. 이 외에도 웹 애플리케이션을 플러그인 형식으로 실행하거나 네이티브 애플리케이션에서 웹 컨트롤을 사용하는 등 다양한 종류의 하이브리드 애플리케이션이 있을 수 있다.
이렇게 타이젠은 4가지 유형의 애플리케이션이 있을 수 있다. 웹 프레임워크, 네이티브 프레임워크, 코어 프레임워크 내의 일부 모듈에 대해서 살펴본다.

웹 프레임워크

웹 프레임워크 내에 그림 8과 같이 다양한 모듈이 포함되어 있다. 여기서는 그 중 WRT 모듈을 살펴본다.

<Web Runtime(WRT)>
WRT는 웹 프레임워크의 일부로다음과 같이 웹 애플리케이션의 패키지, 실행 및 라이프 사이클 관리 등의 역할을 한다.
  - 설치 및 업데이트와 같은 패키지 관리
  - 실행, 정지, 복귀 등과 같은 라이프사이클 관리
  - API/네트워크 접근 및 샌드박싱(sandboxing)과 같은 런타임 보안

타이젠 1.0과 비교했을 때, 크게 달라진 점은 다음과 같다.
  - 모든 자원이 원격에 있는 호스티드(hosted) 웹 앱 지원
  - 설치, 업데이트 흐름 개선
  - WebKit2/EFL 기반
  - 런칭 속도 개선
  - 자원 암호화/복호화
  - 권한 기반 API 보안
  - 웹 다이나믹 박스 지원

네이티브 프레임워크

그림 9와 같이 네이티브 프레임워크 내에 다양한 모듈이 포함되어 있다. 여기서는 애플리케이션 프레임워크와 UI 및 그래픽스 프레임워크에 대해 알아본다.

<애플리케이션 프레임워크>
네이티브 프레임워크 내에 있는 애플리케이션 프레임워크는 다음과 같이 애플리케이션 설치부터 라이프 사이클 관리 등의 기능을 제공한다. 네이티브 애플리케이션이라면 기본적으로 이 애플리케이션 프레임워크를 사용하게 된다.
  - 패키지 설치, 제거, 업그레이드
  - 애플리케이션 모델
  - 애플리케이션 라이프 사이클 관리
  - 애플리케이션을 위한 시스템 이벤트 처리
  - 애플리케이션 설정 관리

<UI 및 그래픽스 프레임워크>
UI 및 그래픽스 프레임워크에서는 애플리케이션 제작 편의를 위해 다양한 컨트롤과 컨테이너를 제공한다. 여러 효과와 애니메이션을 가진 2D, 3D 그래픽을 지원하고 테마를 커스터마이즈(customize)할 수 있는 기능을 제공한다.

코어 프레임워크

<웹킷(WebKit)>
웹킷은 웹페이지를 렌더링하거나 웹 애플리케이션을 렌더링하는데 사용되는 레이아웃 엔진이다. 웹킷은 웹브라우저를 만드는 기반이 되는 모듈이다. 웹킷은 애플의 사파리 브라우저, 구글의 크롬 브라우저 등 다양한 브라우저에서 사용되고 있다.
타이젠 1.0에서는 웹킷을 사용했으나 타이젠 2.0에서부터 웹킷2를 사용하기 시작했다. 웹킷2는 non-blocking API를 이용하여 웹 프로세스와 UI 프로세스를 분리하여 UI의 반응성, 안정성, 보안 등을 개선하였다. 웹킷은 사파리, 모바일 사파리, 크롬(크로미움), 안드로이드 브라우저, 아마존 실크, 돌핀, 블랙베리, Qt웹킷, 웹킷GTK+, EFL, WebKitWinCE와 같이 다양한 포트(port)가 존재하는데 타이젠에서는 EFL 포트를 사용한다.
최근에는 구글이 웹킷을 포크(fork)하여 블링크(blink)를 만들어 화제가 되기도 했다.

[그림 7] 코어 프레임워크 (출처 : 타이젠개발자컨퍼런스 2013)


그림 8] 웹 프레임워크 (출처 : 타이젠개발자컨퍼런스 2013)


[그림 9] 네이티브 프레임워크 (출처 : 타이젠개발자컨퍼런스 2013)


[그림 10] 타이젠 IDE에서 제공하는 코어 애플리케이션 템플릿 (출처 : 자체 제작)



<텔레포니(Telephony) 프레임워크>
텔레포니 프레임워크는 음성 통화, 메시지, 심(SIM), 연락처, 2G/3G/LTE 네트워크 서비스 등을 담당한다. 플러그인 구조로 되어 있어 제조사의 요구 사항에 맞게 변경이 용이하다. 텔레포니 프레임워크는 크게 텔레포니 라이브러리, 플러그인, 서버로 구성되어 있으며 애플리케이션은 DBus를 이용해 텔레포니 API(TAPI)와 통신을 한다.

<BlueZ>
BlueZ는 리눅스 커널 2.4.6부터 사용되는 블루투스를 위한 모듈로 모든 종류의 블루투스 프로토콜과 레이어를 지원한다.

<입력 서비스 프레임워크>
입력 서비스 프레임워크는 텍스트 입력과 관련된 서비스를 수행한다. 기본 기능으로는 다국어 텍스트 입력 및 물리 키보드가 없는 기기의 텍스트 입력을 담당한다. SCIM(Smart Common Input Method) 1.4.7을 기반으로 하고 있으며 클라이언트/서버 구조 및 플러그인 방식으로 구현 되어 있다.

[그림 11] 하이브리드 애플리케이션 (출처 : 타이젠개발자컨퍼런스 2013)


[그림 12] Web Runtime 구조 (출처 : 타이젠개발자컨퍼런스 2013)


[그림 13] 네이티브 애플리케이션 프레임워크가 제공하는 라이프 사이클 (출처 : 타이젠개발자컨퍼런스 2013)



<EFL/Enlightenment>
타이젠은 윈도우 전환 및 애니메이션, 콤포지팅(compositing)을 위하여 Enlightenment 윈도우 매니저를 사용하고 있다. 윈도우 매니저는 데스크톱 윈도우 상에 존재하는 모든 윈도우들을 관장하는 필수 애플리케이션이다.
윈도우가 나타나거나 사라질 때 또는 활성 윈도우 간의 전이가 존재할 때 애니메이션 효과를 적용하며, 스크린 공간 상 각각의 윈도우에 적절한 위치를 지정해 윈도우가 화면 범위를 완전히 벗어나는 경우를 방지해주는 역할을 수행한다. 뿐만 아니라 작업표시줄, 데스크톱아이콘, 바탕화면 등의 기능도 제공한다.
Enlightenment 윈도우 매니저는 내부적으로 EFL(Enlightenment Foundation Libraries) 툴킷을 사용한다. EFL은 GUI 툴킷 라이브러리로 GUI 애플리케이션 개발에 필요한 기본 기능 및 유용한 기능을 제공한다. 타 GUI 툴킷 라이브러리 대비 가벼우면서 높은 성능을 보장한다는 이점을 지닌다. 타이젠에서 코어 애플리케이션을 개발하는데 사용된다.

<GStreamer>
GStreamer는 파이프라인 기반의 멀티미디어 프레임워크이다. 단순한 오디오 재생, 오디오 및 비디오 재생, 녹음, 스트리밍, 편집을 포함하여 미디어를 처리하는 프로그램을 만드는 기능을 제공한다.

<SQLite>
SQLite는 가벼운 데이터 베이스 시스템이다.
일반적인 클라이언트/서버 모델의 데이터 베이스 시스템과 달리 SQLite는 독립적인 서버 프로세스가 필요 없으며, 파일 하나에 데이터 베이스 내용을 저장한다. 애플리케이션에서는 단순히 함수 호출만으로 SQLite의 데이터 베이스 기능을 사용할 수 있다.
타이젠은 이 외에도 X11 윈도우 시스템, ConnMan, PulseAudio, Geoclue 등 다양한 모듈로 구성되어 있다. 지금까지 타이젠 플랫폼 내에 사용되는 다양한 프레임워크 및 모듈에 대해서 알아봤다.

[그림 14] 네이티브 프레임워크에서 제공하는 다양한 컨트롤 (출처 : 타이젠개발자컨퍼런스 2013)


[그림 15] 웹킷과 웹킷2 구조 비교 (출처 : 타이젠개발자컨퍼런스 2013)


[그림 16] 입력 서비스 프레임워크 아키텍처(출처 : 타이젠개발자컨퍼런스 2013)


[그림 17] 데스크톱에서 실행한 Enlightenment 윈도우 매니저 (출처 : 자체 제작)


타이젠 앱챌린지 소식

이번 호를 마치기 전에 타이젠 앱챌린지 소식을 전한다.
지난 7월 9일 타이젠 공식 블로그를 통하여 타이젠 앱챌린지 소식[6]이 공개되었다. 총 상금 약 46억원(404만달러)이 걸린 이번 앱챌린지는 지금부터 오는 11월 1일까지 접수를 받는다.
9개 카테고리에 54개에 달하는 상이 개발자들의 참여를 기다리고 있다. 심사위원단이 심사를 하게 되며 선정된 개발자에게는 3만 달러부터 20만 달러까지 상금이 지급된다. 10위 안에 든 HTML5 애플리케이션의 경우 별도로 5만 달러를 지급한다. 타이젠 애플리케이션을 개발할 예정이라면 앱챌린지에 꼭 참여하도록 하자.

[그림 18] 타이젠 앱챌린지 로고 (출처 : 타이젠 공식 웹사이트)



마치며

이번 호에서는 타이젠 플랫폼이 어떻게 구성되어있는지 큰 그림을 그려보고 내부 구성 요소 일부를 살펴보았다.
타이젠은 수많은 모듈로 구성되어 있기 때문에 지면 관계상 모든 내용을 소개할 수는 없었으나 이번 호를 통해 타이젠 플랫폼 자체에 대한 이해가 높아졌으리라 기대한다.
참고로 이번 호는 타이젠개발자컨퍼런스 2012 및 2013의 발표 자료를 참고하였다. 다음 호부터는 본격적으로 타이젠 기반의 애플리케이션을 작성해보도록 하겠다.



참고

[1] https://www.tizen.org/blogs/tsg/2013/tizen-2.2-beta-sdk-release
[2] http://git-scm.com
[3] https://review.tizen.org/git/
[4] https://review.tizen.org/git/?p=framework/appfw/app-core.git;a=summary
[5] https://review.tizen.org/git/?p=framework/appfw/app-core.git;a=tree;h=refs/heads/tizen_2.2;hb=refs/heads/tizen_2.2
[6] https://www.tizen.org/blogs/bdub/2013/tizen-app-challenge-now-open



/필/자/소/개/

필자

서주영 | seojuyung2@gmail.com

EFL 오픈소스 공식 개발자로 활동하고 있으며 현재 삼성전자 소프트웨어 센터에 재직 중이다. 긍정의 힘을 믿으며 사랑스러운 아내와 귀여운 딸과 함께 행복하게 사는 것이 인생의 목표이다. 프로그래밍을 할 때 기쁨을 느끼며 개발자가 천직이라 생각하는 만년 개발자이다. EFL 및 타이젠 관련 정보를 공유하는 개인 블로그 seoz.egloos.com을 운영하고 있다. 결혼 전까지 모터사이클에 미쳐있던 라이더이기도 하다.



※ 본 내용은 (주)테크월드(http://www.embeddedworld.co.kr)의 저작권 동의에 의해 공유되고 있습니다.
    Copyright ⓒ Techworld, Inc. 무단전재 및 재배포 금지

맨 위로
맨 위로