수년 전만 해도 자바ME는 비교적 간단한 흑백 LCD 기반의 애플리케이션을 핸드셋에서 돌리기 위한 추가적인 사양에 불과했다. 현재는 WIPI나 DTV 미들웨어에서 보듯이 필수적인 부분으로 자리매김하고있다.
자바ME는 이제 임베디드 디바이스를 위한 애플리케이션 실행환경으로서 명실상후반 산업계 표준 플랫폼이라고 할 수 있다. 자바ME의 새로워진 모습들에 대해 알아보자.
자바 기술은 JCP(Java Community Process)를 통해 진화, 발전, 정의 된다. JCP는 개방된 커뮤니티 기반 표준 단체이며, 자바 기술 스펙을 정의하고 개정하는 절차를 의미하기도 한다.
자바 기술에 시장의 요구사항을 반영 충족시키기를 바라는 공통된 관심을 공유하는 개인과 단체라면 누구나 JCP의 멤버가 될 수 있다. JCP는 개방된 커뮤니티 기반 프로세스이기는 하지만 자바 관련 등록상표에 대한 권한은 썬마이크로시스템즈(이하 썬)에 있다. 썬은 자바의 개방성과 호환성의 유지를 위해 PMO(Program Management Office)를 운영하고 있다.
JCP의 프로세스는 비교적 간단하다. 자바 플랫폼을 확장하고자 하는 JCP 멤버가 공식 제안, 즉 JSR(Java Specification Request)을 제출하면 JCP 에 정의된 초안, 검토 및 승인 투표 라이프사이클로 이뤄진다.
누구나 개인 또는 기업 대표의 자격으로 자바 커뮤니티 프로세스(JCP)에 참여할 수 있다. 예를 들어 JCP 메일링 리스트에 가입하여 JSR과 JCP 절차에 관한 정기적인 업데이트를 받을 수 있다. 또 공개 논평 요청에 응답하여 JSR 공개 검토에 참여할 수 도 있고, 심지어는 개발 프로세스를 통해 JSR을 정의하는 전문가 그룹의 멤버가 될 수도 있다.
자바ME 개발에 관한 최신 정보를 유지하려면 관련된 최신 JSR들의 동향을 항상 주의 깊게 살펴보는 것이 중요하다. 자세한 내용은 JCP 홈페이지(http://jcp.org)에서 확인할 수 있다.
자바ME는 완전히 새로운 스펙을 정의하는 것이 아니라 기존의 여러 자바 기술을 휴대형 단말기와 임베디드 기기에 맞도록 개정한 것이라고 볼 수 있다. 자바ME 플랫폼은‘Configuration’,‘ Profile’,‘ Optional Package’로 불리는 확장 가능한 소프트에어 스택들의 집합체라고 할 수 있다.
<그림 2>에서 보는 것처럼, 임베디드 디바이스를 위한 자바 애플리케이션 환경에는 임베디드 자바, 퍼스널 자바, 자바ME, 자바 카드 등이 포함된다. 하지만 자바SE를 기반으로 한 초기 기술인 임베디드 자바와 퍼스널 자바는 자바ME의 계보에서 완전히 분리되어 있으며 이제는 단종(end-of-life) 단계에 들어섰다. 자바ME 환경은 보다 강력한 PDA 같은 대형 휴대형 단말기를 위한 CDC(Connected Device Configuration)와 이동 전화처럼 리소스가 보다 제한된 장치를 지원하는 CLDC(Connected Limited Device Configuration) 등 두 종류의 기술로 구분된다.
CDC 1.0은 상위 자바SE 1.3를 기반으로 호환되며, CDC 1.1은 자바SE 1.4를 기반으로 상위 호환된다. 마지막으로, 자바 카드 기술은 자바 기반 스마트 카드의 개발을 지원한다. MIDP는 최초의 자바ME API였고 현재 가장 인기 있는 자바ME API이기 때문에 자바ME를 처음 접한 사람들은 대부분 자바ME를 MIDP(Mobile Information Device Profile)와 동일시하는 경향이 있다. 하지만 <그림 2>에서 보는 것처럼 MIDP는 자바ME의 구성요소 중 하나일 뿐이다.
자바 플랫폼과 마이크로 자바 기술은 Oak 언어와 임베디드 자바 및 퍼스널 자바 애플리케이션 환경의 시절로부터 먼 길을 거쳐왔다. 자바ME는 하이엔드 PDA와 비교적 큰 임베디드 기기 같은 전자 장치와 휴대폰, 로우엔드 PDA, 그리고 디스플레이나 사용자 인터페이스 장치가 없는 headless 장치 같은 보다 제한된 장치를 위해 조직화된 아키텍처로 발전해왔다.
JCP는 자바ME 플랫폼 스펙(JSR 68)으로 자바ME의 여러 구성요소들뿐 아니라 플랫폼의 전반적인 아키텍처를 정의하고 있다. 자바ME는 대형 풋프린트를 가진 하나의 모노리식(monolithic) 플랫폼이라기보다는 세 가지 종류의 소프트웨어 스택으로 이루어진 다계층(multi-layered) 구조를 가지고 있다.
CLDC와 같은 컨피규레이션은 다양한 종류의 장치를 위한 기본서비스를 제공하며, MIDP와 같은 프로파일은 좀더 한정된 부류의 장치에서 흔히 볼 수 있는 보다 높은 레벨의 서비스를 지원한다. 옵션 패키지는 모든 디바이스에 꼭 필요한 특정 디바이스군에서 필요로하는 추가적인 API를 정의한다. 이런 구성의 장점은
개발자들이 타깃 장치의 기능과 애플리케이션의 리소스 요구 모두에 적합한 소프트웨어 스택을 조합할 수 있게 해줌으로써 재사용과 효율성을 증가시킨다. 반면, 단점으로는 선택할 수 있는 조합의 개수가 늘어남에 따라 디바이스간의 호환성이 떨어질 수 있다는 점이다. 이러한 단점을 보완하기 위해 JCP에서는 JTWI(JSR-185), MSA(JSR-248,249)와 같은 패키지 JSR을 정의하고 있다.
<그림 3>에서는 소프트웨어 스택을 따라 올라가면서 기능이 추가되는 자바ME 플랫폼의 전반적인 구성을 보여준다.
자바 플랫폼과 마이크로 자바 플랫폼, 마이크로 에디션은 지난 5년 간 JCP를 통해 진화해 오면서 다양한 종류의 자바ME API를 산출했으며 이 중 다수는 폭넓게 사용되었다. 하지만, 다양한 자바ME APISEt으로부터 조합할 수 있는 가지 수의 증대가 오히려 호환성을 위협하게 되었다. 따라서 잘 정의되고 일관된 방식으로 시장에 도입되어 휴대폰 업계 전반에 걸쳐 높은 수준의 호환성과 상호 운용성을 유지하기 위한 취지로 JCP는 스펙을 정의하였다. JTWI는 다음과 같은 JSR을 통합 패키지화 하여 무선핸드세트를 위한 공통의 아키텍처 및 프로그래밍 인터페이스를 정의한다.
Connected Limited Device Configuration (JSR 30)Mobile Information Device Profile 2.0 (JSR 118)Wireless Messaging API (JSR 120)Mobile Media API (JSR 135)
이어서 JTWI는 다음 사항을 적용한다.
최소 컨피규레이션: CLDC 1.0 (JSR 30)기본 스펙: MIDP 2.0 (JSR 118), WMA 1.1 (JSR 120)권장 스펙: MMAPI 1.1 (JSR 135)
컨피규레이션은 기본적인 최소 공통분모(lowest-commondenominator)로서 자바ME 런타임 환경을 정의한다. 여기에는 가상 머신(Virtual Machine)과 주로 자바SE에서 파생된 일련의 코어 클래스(Core Class)가 포함된다. 각각의 컨피규레이션은 대체로 유사한 기능을 가진 다양한 종류의 장치에 맞게 조정된다. 현재는 CLDC(Connected Limited Device Con- figuration)와 CDC(Connected Device Configuration)의 두 가지 컨피규레이션이 정의되어 있다.
● CLDC(Connected Limited Device Configuration)
CLDC는 연산 능력, 배터리 수명, 메모리, 네트워크 대역폭 등에 엄격한 제약이 있는 장치들을 위한 자바ME 컨피규레이션이다. 이러한 제약은 장치들이 지원할 수 있는 자바 애플리케이션의 종류에 직접 영향을 미친다.
CLDC 1.0은 16bit 또는 32bit 프로세서에 160KB 이상의 비휘발성 메모리와 32 KB 이상의 휘발성 메모리를 갖추고, 전력소비가 낮고 통상적으로 배터리를 사용하며, 네트워크 연결이 비교적 불안정한 디바이스들을 대상으로 한다. 이 컨피규레이션의 핵심을 이루는 것은 참조 구현(Reference Implementation)인 KVM(K Virtual Machine)이나 최적화 구현(Optimized Implementation)인 CLDC Hotspot Implementation 같은 자바 가상 머신이다. 이들은 자바SE에서 일부 기능을 제거한 자바 가상 머신이다. 가령, CLDC는 클래스 마무리(finalization)나 스레드 그룹(thread group)을 지원하지 않는다.
CLDC는 자바SE 개발자들에게 친숙한 표준 코어 자바 언어 패키지의 서브세트를 정의하며 제한적 장치에 맞추어진 클래스를 추가한다. 이와 더불어, CLDC는 규모가 큰 java.net이나j ava.io 패키지를 이용하기에는 메모리가 부족한 장이체서 I/O를 지원하기 위해 간소화된 GCF(Generic Connection Framework) 패키지, javax.microedition.io를 도입했다. GCF는 HTTP, 데이터그램, 스트림 등을 포함한 다양한 종류의 접속을 생성하고 I/O를 수행하는 인페이스와 클래스의 계층이다.
● CDC(Connected Device Configuration)
CDC는 CLDC가 지원하는 것보다 강력한 장치들, 가령 하이
엔드 휴대폰 및 PDA, 더욱 정교한 임베디드 기기(셋톱박스, TV를 통해 네트워크 기반 컴퓨팅 기능을 제공하는 장치, 인터넷 어플라이언스와 같은 웹 기반 장치, 심지어 자동차 네비게이션 시스템 등)에 사용할 수 있도록 설계되었다.
CDC를 지원하는 장치는 32bit 프로세서와 일반적으로 ARM 기반 장치, 2MB 이상의 메인 메모리와 2.5MB 이상의 ROM, 그리고 일정한 형태의 네트워크 접속성을 갖추고 있어야 한다.
이 컨피규레이션의 핵심을 이루는 것은 자바SE 기능을 완비한 CDC Hotspot Implementation과 같은 최적화된 자바 가상 머신이다.
<그림 5>에서 보는 것처럼, CDC는 CLDC의 합집합(SuperSEt)으로 GCF(Generic Connection Framework)와 같이 자바SE에 포함되지 않은 새 클래스를 비롯하여 CLDC가 정의한 모든 클래스를 포함한다.
프로파일 또는 옵션 패키지는 애플리케이션의 라이프사이클 관리와 사용자 인터페이스 구동, 디바이스에서 로컬로 영속적 데이터(persistent data)를 유지보수 및 업데이트한다. 또 네트워크 서버에 저장된 정보에 안전하게 액세스하기 위한 클래스도 제공한다. 프로파일은 컨피규레이션이 제공하는 클래스의 코어 세트에 도메인별(domain-specific) 클래스를 추가한다. 이 클래스들은 디바이스의 특정한 용도에 맞게 조정되고 기본 구성에서 빠져 있는 기능을 제공한다.
현재 두 개의 표준 CLDC 기반 프로파일이 존재한다. 세 개의 프로파일은 CDC를 기반으로 한다. <그림 6>은 프로파일과 기본 컨피규레이션의 관계와 프로파일의 상호 관계를 보여준다.
MIDP와 IMP의 경우처럼 동일한 컨피규레이션 위에 복수의 프로파일이 존재할 수 있다. 이들은 상호간에 의존성을 가질 수도 있다. 예를 들어, 퍼스널 프로파일은 퍼스널 베이직 프로파일을 확장하며, PBP는 다시 파운데이션 프로파일에 의존한다. 자바ME가 발전함에 따라 앞으로 더 많은 프로파일이 생길 것으로 기대된다.
● CDC 기반 프로파일: MIDP 및 IMP
MIDP(Mobile Information Device Profile)와 IMP(Information Module Profile)는 서로 매우 유사기 때문에 함께 살펴볼 것이다.
최초의 자바ME 프로파일인 MIDP는 세계 전역에 걸쳐 주로 PDA와 휴대폰을 비롯한 휴대형 통신기기에 수백만 개가 배치되는 등, 현재 가장 발달되고 널리 채택되고 있는 프로파일이다.
IMP의 타깃은 MIDP 디바이스와 유사한 특성을 지녔지만 사용자 인터페이스 기능이 거의 또는 전혀 없는 자판기와 같은 headless 임베디드 기기, 산업용 애플리케이션, 보안 시스템 등이다.
JSR 195에서 최초로 정의된 IMP는 애플리케이션 관리를 비롯하여 스토리지, 네트워킹, 보안, 타이머 API 등을 비롯한 모든 기능을 MIDP에서 차용하고 있다. IMP 1.0은 사용자 인터페이스(UI)를 위한 API, 특히 javax.microedition.lcdui를 제외한 MIDP 1.0의 진부분집합(strict subset)이다. IMP 애플리케이션을 IMlet이라고 부르지만, 모든 취지와 목적으로 볼 때 MIDlet이라고 할 수 있다. 참고로 이들은 MIDlet을 서브클래스하고, MIDlet과 동일한 패키징, 배치, 보안 기능과 라이프사이클을 가지고 있다.
MIDP 1.0은 JSR 37에 정의되어 있으며 여전히 널리 사용되고 있다. JSR 118에 의해 정의된 MIDP 2.0은 MIDP 프로파일의 기능을 크게 강화시켰다. MIDP 2.0에는 네트워킹, 사용자 인터페이스, 로컬 영속적 데이터 보관, MIDlet 라이프사이클 등을 위한 원래의 API 외에, TCP 소켓 스트림, UDP 데이터그램, 그리고 직렬, 푸쉬 서비스(pushSErvice), 및 보안 접속을 지원하기 위한 새로운 네트워킹 API가 추가되었다.
IMP-NG라고도 알려진 JSR 228은 IMP의 차세대 버전이다. 새 버전에서는 MIDP 2.0의 새로운 보안 및 네트워킹 타입과 API, 그리고 PushRegistry와 platformRequest()를 비롯한 기타 API를 포함하고 있다. IMP 1.0과 마찬가지로 UI, 게임, 미디어 API는 포함되지 않았다. <리스트 1>의 예제 코드는 화면상에 “Hello, MIDP!”를 출력한다.
● CDC 기반 프로파일: FP, PBP, PP
CDC는 CLDC보다 풍부한 컨피규레이션이다. 메모리 용량과 처리 능력이 더 큰 하이엔드 휴대형 단말기와 임베디드 기기를 겨냥하고 있지만 컨피규레이션 프로파일 패턴은 동일하다. CDC는 디바이스에 대해 포괄적인 로우 레벨 인터페이스를 제공하며, 하나 이상의 CDC 기반 프로파일이 특정한 종류의 디바이스에 적합한 기능을 가진 클래스를 제공한다. <그림 8>은 파운데이션 프로파일, 퍼스널 베이직 프로파일, 퍼스널 프로파일의 상호 의존 관계를 보여준다.
파운데이션 프로파일에는 CDC 내의 모든 클래스가 포함되며, 더 많은 자바SE 클래스와 보안 기능, 그리고 기타 API가 추가된다. Personal Basis Profile에는 CDC와 FP가 모두 포함되며, 사용자 인터페이스 클래스의 최소 코어 세트가 다른 기능들과 함께 추가된다.
퍼스널 프로파일에는 CDC, FP, PBP가 모두 포함되며, 중량(heavyweight) AWT(Abstract Window Toolkit) API 및 애플릿(Applet) 지원을 포함하여 더욱 완비된 AWT 세트를 제공한다. 각 프로파일의 특징에 대해 좀 더 자세히 살펴보자.
- 파운데이션 프로파일 : 파운데이션 프로파일은 이름이 의미하듯 다른 CDC 기반 프로파일을 구축하기 위한 토대가 된다. 파운데이션 프로파일은 CDC의 인터페이스와 클래스를 모두 제공할 뿐 아니라, 보안, 유틸리티, 로케일(locale) 클래스를 추가하여 컨피규레이션을 확장한다. 파운데이션 프로파일은 AWT나 Swing을 비롯한 어떤 UI 클래스도 제공하지 않으므로, 사용자 인터페이스가 필요 없는 소형기기에 적합한 프로파일이다.
- 퍼스널 베이직 프로파일 : 퍼스널 베이직 프로파일은 파운데이션 프로파일 위에 구축되며 퍼스널 프로파일의 서브세트이다. PBP는 CDC와 파운데이션 프로파일 인터페이스 및 클래스를 모두 지원하면서도 자동차 기기, 소비자 기기, 간단한 어플라이언스와 같이 심플한 사용자 인터페이스를 요하는 디바이스에서 그래픽, 이미지, 위짓(widgets)을 지원하는 AWT(Abstract Windowing Toolkit)의 경량(lightweight) API 서브세트를 포함한다. 이 프로파일은 또한 자바빈즈 프로그래밍과 새로운 Xlet 애플리케이션 모델을 지원한다.
- 퍼스널 프로파일 : PP는 이제는 단종된 퍼스널 자바 애플리케이션 환경을 새롭게 재편한 것이다. 퍼스널 프로파일은 퍼스널 베이직 프로파일의 수퍼 세트이며 CDC와 파운데이션 프로파일에 기술된 자바 패키지를 모두 제공한다. 아울러, PBP에 빠져 있는 중량 AWT 클래스 및 애플릿 지원이 추가되었다. 따라서 퍼스널 프로파일은 자바SE와 매우 유사한 모습을 지닌 더욱 풍부한 애플리케이션 환경을 제공한다.
이 프로파일은 하이엔드 PDA, 셋톱박스, 기타 하이엔드 어플라이언스와 같이 진보된 사용자 인터페이스와 안전한 네트워크 접속을 요구하는 디바이스를 대상으로 하고 있다. 퍼스널 프로파일 1.0은 JSR 62에 의해 정의되었으며, 최근에는 퍼스널 프로파일 1.1이 JSR 216에서 정의되었다.
옵션 패키지는 일종의 프로파일 확장이라고 할 수 있다. 옵션 패키지는 메시징이나 멀티미디어, 위치 기반 서비스처럼 일부 디바이스와 애플리케이션에서만 요구하는 상대적으로 좁은 영역의 기능을 정의한다. 따라서 프로파일의 정의는 대부분의 디바이스
가 필요로 하는 공통된 기능만을 지원하는 데 집중할 수 있다. 프로파일은 런타임 환경을 제공하는 한편 옵션 패키지는 특정한 종류의 기능을 제공할 수 있다.
모든 자바ME 옵션 패키지는 JCP에 의해 정의되어 표준 API가 된다. 이름에서 알 수 있듯이 이 패키지는 옵션으로 포함된다. 핸드세트 제조업체들이 특정한 제품에 이를 포함시킬 수도 있고, PDA 개발자처럼 확장성 있는 환경에서도 이를 포함시킬 수 있다. 예를 들어, 특정한 MIDP 핸드세트는 Java APIs for Bluetooth (JSR 82)를 포함시킴으로써 블루투스 접속에 대한 지원을, WebSErvices API for Java ME (JSR 172)를 포함시킴으로써 엔터프라이즈 통합에 대한 지원을 추가할 수 있다.
옵션 패키지의 수는 점점 증가하고 있으며, 일부는 CLDC 환경을 일부는 CDC 혹은 양자 모두를 지원한다. 일부는 이미 승인을 받았으나 다수의 새로운 패키지들은 현재 정의 단계에 있다.
‘PlayerMidle.java’는 웹 상의 멀티미디어 파일을 재생해주는 기능을 한다. 썬의 JME 개발툴인 Wireless Toolkit을 이용하여 컴파일/실행 후 url을 묻는 입력란에 아래와 같이 입력하여 테스트해 볼 수 있다.
http://java.sun.com/products/java-media/mma/media/testwav.wav
http://java.sun.com/products/java-media/mma/media/testmpeg.mpg
차세대 디바이스를 위해 더욱 풍부한 플랫폼을 정의하는 MSA(MobileSErvice Architure)는 m-commerce를 위해 더욱 강화된 보안상 안전한 API를 정의한다. 그래픽 기능은 현재 배치되어있는 Mobile Media API 뿐 아니라 3D 그래픽을 위한 API나 SVG(Scalable Vector Graphic)를 포함하여 더욱 유연하고 세련된 UI 구성을 가능하게 한다. 또한, 이미 널리 배치되어 있는 SMS(JSR 120)과 MMS(JSR 205) API에 추가로 SIP(JSR 180)와 블루투스(JSR 82)를 포함시킴으로써 통신 기능이 훨씬 강화되었다. 위치 기반 서비스를 위해 Location(JSR 179)과 개인 일정 관리를 위한 PIM(Personal Onformation Management; JSR 75)이 추가되며, 마지막으로 웹 서비스, 콘텐츠 핸들러가 추가되어 더욱 강력한 웹기반의 애플리케이션 연결성을 제공한다. MSA는 현재 JCP 중에 있으며 올 8월경에 최종 릴리즈될 예정이다(<그림 9> 참조).
그렇다면 MSA 이후에 나아갈 진화방향은 어떤 것일까? 제 4세대에는 좀 더 나은 그래픽 환경을 제공할 것이다. Advanced Graphical User Interface(JSR 209)로 정의되는 이런 그래픽 환경은 레이아웃 기능, 더욱 풍부한 컴포넌트, 더 뛰어난 2D 그래픽 등을 선보이게 될 것이다.이런 아이템들은 CDC 기반의 디바이스와 맞물려 자바SE 플랫폼의 일부가 모바일 디바이스에서 실현되도록 할 것이다. 제 1세대 모바일의 핵심 분야였던 게임은 Open GL ES(JSR 239)와 더불어 더욱 발전할 것이다. 미래의 디바이스에는 MSA로 정의되는 현재의 성능을 뛰어넘는 그래픽 기능을 강화한 하드웨어와 3D 성능을 선보이게 될 것이며, 온라인 게임은 모빌리티 커뮤니티로 확대될 것이다.
웹 2.0과 JSR 290으로 정의된 자바 기술은 마크업(markup)과 자바 사이에 독특한 통합을 만들어낼 것이다. 자바는 마크업을 로딩, 랜더링, 조작하는 데 사용될 것이며 동시에 마크업에 임베디드 될 수도 있다. 결과적으로 좀 더 나은, 또 좀 더 많은 UI요소들이 사용자와 디바이스에 모두 적용될 것이다. @
* 이 기사는 ZDNet Korea의 제휴매체인 마이크로소프트웨어에 게재된 내용입니다.
지금 뜨는 기사
이시각 헤드라인
ZDNet Power Center










