MIDP |
 |
MIDP는 모바일 인포메이션 디바이스(MID)를 목표로 CLDC 컨피규레이션을 기반으로 설계된 자바 클래스 라이브러리에 대한 명세이다. 그러므로, MIDP 명세는 CLDC의 명세를 확장하거나, 구체화 하거나, 변경을 가하고 있다. 우선 MIDP에서 좀 더 구체화된 하드웨어 디바이스들의 특징을 보자 |
|
디스플레이 요구사항 |
|
|
- 96x54 이상의 스크린 사이즈 |
|
- 비트 이상의 디스플레이(모노크롬) |
- 종횡비(aspect ratio)가 약 1:1에 근접 |
입출력 요구사항 |
|
|
- 한 손, 혹은 두 손으로 입력가능한 입출력 메커니즘 |
메모리 요구사항 |
|
|
- MIDP 컴포넌트를 위한 128K의 비휘발성 메모리 공간 |
|
|
- 애플리케이션이 생성하는 데이터의 저장을 위한 8K의 비휘발성 메모리 공간 |
|
|
- 자바 런타임을 위한 32K의 휘발성 메모리 공간 |
네트워킹 요구사항 |
|
|
- 양방향이고, 무선이며, 제한된 대역폭에, 간헐적으로 연결될 수 있음 | 그리고, MIDP 명세서는 다음과 같은 부분들을 정의하고 있다.
애플리케이션 모델 |
유저 인터페이스와 이벤트 핸들링 |
영속적 저장공간 |
네트워킹 |
타이머 지원 | |
2.1 JAM과 신개념 애플리케이션 모델 |
|
Application의 다운로드와 실행이라는 혁신적인 모델을 제시했던 Java언어의 특징을 한껏 살려서 자원이 적은 기기에서 실행모듈을 download하여 실행토록한다는 아이디어가 midlet이다. 이 프로그램방법은 applet과 유사한점이 많다. MIDlet과 ‘애플리케이션 관리 소프트웨어’라는 개념은 초창기의 자바 애플릿 만큼이나 혁명적이다. 하지만, 지금은 많은 분들이 애플릿이라는 경험을 통해서 실행코드의 네트웍 이동성에 대해서는 이미 친숙해 진 상태일 것이므로, MIDlet이라는 새로운 애플리케이션 모델을 받아들이기에는 큰 무리가 없을 것 같다. JAM(Java Application Manager)는 CLDC/MIDP 플랫폼의 새로운 애플리케이션 모델을 지원하기 위한 애플리케이션 관리 소프트웨어이다. JAM의 역할은 MIDP 애플리케이션, 즉, MIDlet을 다운로드하여 설치하고, 업그레이드하고, 실행하고, 삭제하는 것이다. <표 6>은 이러한 JAM의 기본 기능들을 정리한 것이다.
왜 JAM이라는 이해하기 쉽지 않은 새로운 애플리케이션 모델을 도입해야만 했을까? 필자가 사용하는 모 이동통신 단말기는 SMS 기반의 인터넷 기능이 디폴트로 내장되어 있다. 이 단말기로 WAP 서비스를 받기 위해서는 단말기 A/S 센터로 가서 소프트웨어 업그레이드를 해야 했다. 이 때, 서비스 매뉴얼에 충실한 직원이, “몇 개의 게임은 즐길 수 없게 되며, 전화번호 저장공간이 300개에서 200개로 줄어들게 됩니다. 그래도 업그레이드를 받으시겠습니까?”라고 물었다. 추측하건대, WAP 브라우저는 SMS 브라우저보다 메모리 풋프린트가 크고, 그 차이로 인해, 전화번호 저장공간 100개를 희생시키는 것이다.
여기서 우리는 세 가지의 개선점을 발견할 수 있다. 첫째는 고객이 굳이 소프트웨어 업그레이드를 받기 위해 A/S 센터를 찾는 번거로움을 없애준다면 좋을 것이다. 둘째는 게임과 같은 취향에 따라 다양한 선택의 폭을 가진 애플리케이션을 직접 고를 수 있도록 하면 좋을 것이다. 셋째는 이렇게 설치한 프로그램이 업그레이드되었을 경우, 자동적으로 업그레이드를 수행해 주면 좋을 것이다. JAM이 등장한 이유 중의 하나가 이런 것들을 가능하게 하기 위한 것이다.
|
기 능 |
통 신 방 법 |
추출(retrieval) |
삭제(removal) |
인스톨(installation) |
추출한 MIDlet을 디바이스에 설치하는 기능. |
실행(launching) |
MIDlet을 호출하는 기능. |
버젼 관리 |
설치된 MIDlet을 새로운 버전으로 업그레이드 하는 기능. |
삭제(removal) |
설치된 프로그램을 삭제하는 기능 | | [ 표 5 - JAM의 기본 기능 ] |
JAM의 구현은 주로 C와 같은 네이티브 언어로 작성된 소프트웨어 모듈로 이루어 지는 데, CLDC 1.0 베타와 MIDP Early Access 1에는 JAM을 통한 애플리케이션 관리를 기본으로 하고 있다. <그림 4>는 JAM을 통한 애플리케이션의 설치 과정에 대한 예이다. 실행과 업그레이드 및 삭제 과정은 일반적인 애플리케이션의 일종으로 보면 된다. 즉, 사용자 인터페이스를 통해 설치한 애플리케이션을 찾아서 수행하고, 업그레이드하고, 삭제하는 작업을 수행하는 하나의 애플리케이션이라고 생각하면 된다는 것이다. |
[ 그림 4 - JAM을 통한 애플리케이션 설치과정 ] |
이 글의 뒷부분에서 실제로 MIDlet을 개발하고, 배포하는 과정을 살펴보면서 좀 더 구체적으로 언급하겠지만, 우선은 여기서 JAM과 연관하여, MIDlet 수트(suite)의 구성과 애플리케이션 디스크립터, 애플리케이션 라이프 사이클에 대하여 알아 보도록 하자. 아래 그림에서 동작되는 순서를 정리해 보자
1. Descriptor file로 링크되어 있는 WML 문자열을 선택한다. |
2. WAP browser로 부터startJAM 를 호출한다. |
3. Descripter file을 다운로드한다. |
4. JAR file과 icon file을 다운로드한다. |
5. JAR file을 저장한다. |
6. main class name이름으로 KVM 시작한다. |
7. JAR file로 부터 class를 로딩한다. |
8. 다운완료 메시지나 과금 작업을 호출한다. | |
[ 그림 5 - MIDlet배포시 흐름도 ] |
MIDlet 배포 파일 - JAR. |
|
앞에서 MIDP 애플리케이션, 즉 MIDlet은 JAR 파일의 형태로 배포되어야 한다고 얘기했다. 이 JAR 파일에는 MIDlet 수트의 패키지가 들어갈 수 있는데, MIDlet 수트의 패키지는 다음과 같은 세 가지의 구성요소를 가지고 있다.
JAR 컨텐츠에 대한 설명을 담고 있는 매니페스트(manifest) |
MIDlet 클래스를 상속한 클래스들과 다른 공유 클래스들 |
MIDlet이 사용하는 리소드 파일들(예를 들면 아이콘, 이미지 등) | 매니페스트 파일에 포함되는 JAR 컨텐츠에 대한 설명은 MIDlet 애트리뷰트라고 하는 JAM이 사용할 애플리케이션에 대한 정보이다. 즉, JAM이 애플리케이션을 다운로드하여 설치하고, 업그레이드하고, 실행하고, 삭제하기 위해서는 애플리케이션의 이름, 버전, 제공자, 등의 정보가 반드시 필요하며, 이러한 MIDlet 애트리뷰트를 매니페스트를 통해 제공할 수 있다는 것이다. <표 7>은 MIDP 명세에서 정의된 MIDlet 애트리뷰트들이다. 이러한 애트리뷰트는 다음에 설명할 애플리케이션 디스크립터에서도 정의될 수 있으며, 만약, 애플리케이션 디스크립터와 매니페스트에서 동시에 정의되었을 경우에는 애플리케이션 디스크립터가 우선한다.
애트리뷰트 이름 |
설 명 |
MIDlet-Name
|
MIDlet 수트의 이름 |
MIDlet-Version |
MIDlet 수트의 버전 번호. major.minor.micro의 형태로 정의되며, JAM이 설치 및 업그레이드를 위한 정보로 활용. |
MIDlet-Vendor |
MIDlet 수트의 제공자. |
MIDlet-Description |
MIDlet 수트에 대한 설명 |
MIDlet-<n> |
JAR 파일안에 포함된 MIDlet의 표시이름, 아이콘, 클래스명. 하나의 JAR 파일에 여러 개의 MIDlet이 포함되어 있을 경우, 번호로 식별하게 되며, <n>은 최소값이 1이고, 반드시 순차적인 숫자를 사용하여야 한다 |
MIDlet-Jar-URL |
JAR 파일이 로딩될 URL |
MIDlet-Jar-Size |
JAR 파일의 크기(바이트 단위) |
MIDlet-Data-Size |
MIDlet이 필요로 하는 영속적 데이터의 크기(바이트 단위). 디바이스에서는 이에 따라 추가적인 스토리지를 제공해야 하고, 디폴트는 0이다. |
MicroEdition-Configuration |
시스템 프로퍼티의 microedition.configuration 값과 동일한 J2ME 컨피규레이션(예를 들어, “CLDC-1.0”) |
MicroEdition-Profile |
시스템 프로퍼티의 microedition.profiles 값과 동일한 J2ME 프로파일(예를 들어, “MIDP-1.0”) | |
[ 표 6 - MIDlet 애트리뷰트 ] |
애플릿이 java.applet.Applet 클래스를 반드시 상속해야 하듯이, MIDlet도 javax.microedition.midlet.MIDlet 클래스를 반드시 상속해야 한다. JAM은 MIDlet 클래스를 통해 애플리케이션의 시작, 일시정지, 종료 등을 제어하기 때문이다. 그러므로, MIDlet 클래스를 상속한 클래스를 하나의 MIDP 애플리케이션(MIDlet)이라고 볼 수 있으며, 하나의 JAR 파일 안에는 여러 개의 MIDlet이 존재할 수 있다. 하나의 JAR 파일, 즉, 같은 MIDlet 수트에 포함된 MIDlet들은 리소스와 실행환경을 공유한다. 아이콘, 이미지 등의 리소스 파일은 여러 MIDlet들이 공유할 수 있으며, MIDlet 수트, 즉 JAR 파일 안에 함께 포함된다. 사용자가 특정 애플리케이션을 선택해서 실행하기 위해서는 JAM이 최소한의 애플리케이션에 대한 정보를 사용자에게 보여 주어야 하는데, 이는 MIDlet 애트리뷰트에 정의된 이름과 아이콘을 이용할 수 있다. 예를 들어, 다음 MIDlet 애트리뷰트는 ‘프로미 안녕?’이라는 애플리케이션의 이름과, promy.gif 파일 아이콘을 JAM이 사용자에게 보여 주고, 사용자가 선택할 수 있게 한다.
MIDlet-1 : 프로미 안녕?, promy.gif, promy.example.midp.HelloPromy |
2.3 애플리케이션 디스크립터, JAD |
|
JAM이 네트웍을 통해 MIDP 애플리케이션을 다운로드하려면, 우선은 JAR 파일을 봐야 한다. JAR 파일을 추출하는 방법은 여러가지가 있겠지만, 가장 손쉬운 방법이 브라우저를 이용하는 것이다. 웹 브라우저이든, WAP 브라우저이든, 혹은 MME이든 상관없이 브라우저는 컨텐츠, 혹은 파일을 네트웍에서 찾아 다니는 가장 보편적이고 일반적인 방법이다. 그러므로, WAP 브라우저(혹은 MME)가 탑재된 브라우저를 통해 다운로드할 JAR 파일을 찾고, JAM이 그 파일을 다운로드하여, 설치하는 것은 가장 생각하기 쉽고, 구현하기 쉬운 모델이다. 브라우저와 JAM의 연동 문제는 이 글의 마지막 부분에서 다시 생각하기로 하자.
JAR는 인터넷에서 이미 보편화된 파일 포맷이다. 그러므로, 기존의 J2SE 기반의 JAR 파일과 앞에서 설명한 MIDP 수트를 포함한 JAR 파일을 구분할 방법이 없다. 그러므로, 브라우저가 올바르지 못한 J2SE 기반의 JAR 파일을 JAM으로부터 다운로드하게 만들 수 있다. MIDP 애플리케이션만 있는 웹사이트를 별도로 접속할 수 있도록 해서, 이러한 염려를 기우로 만들 수 있다고 해도, 문제는 또 있다. 이미 다운로드하여 설치한 애플리케이션의 JAR 파일을 다시 다운로드하여 설치하려고 했을 경우, 똑똑한 JAM이라면, 사용자에게 그것이 부질없는 일이라는 것을 알려주어야 할 것이다. 그런데, JAM이 앞에서 설명한 JAR 파일 내에 있는 매니페스트 정보를 통해서 애플리케이션에 대한 정보를 알아야 한다면, 일단은 그 JAR 파일을 다운로드하고 난 후에 비로소 이미 설치했던 프로그램임을 알 수 있다. 그렇게 되면, 아까운 통신비용을 회수할 수 있는 방법은 없는 것이다.
그러므로, 네트웍을 통해 JAM에게 MIDP 애플리케이션과 JAR 파일의 정보, 즉, MIDlet 애트리뷰트를 전송할 수 있는 효율적인 방법이 필요하고, JAD(Java Application Descriptor)라는 애플리케이션 디스크립터는 훌륭한 해결책이다. MIDP 명세에는 모든 JAR 파일은 그에 상응하는 JAD 파일을 가질 것을 명시하고 있으며, JAD 파일은 다음과 같은 MIME 타입을 가지고 있다.
MIME 타입 : text/vnd.sun.j2me.app-descriptor 확장자 : jad
JAD 파일의 내용으로는 <표 7>에서 살펴본 MIDlet 애트리뷰트가 들어간다. 여기서는 sun tech tip에서 제공하는 예제에서 하나를 보기로하자. 파일은 run.jad이다. |
filename: Run.Jad
MIDlet-Name: SunSamples MIDlet-Version: 1.0 MIDlet-Vendor: Sun Microsystems, Inc. MIDlet-Description: Sample suite from MIDP early access workspace. MicroEdition-Profile: MIDP-1.0 MicroEdition-Configuration: CLDC-1.0 MIDlet-Jar-URL: http://localhost/midp/examples.jar MIDlet-Jar-Size: 111K MIDlet-1: Sokoban, /icons/Sokoban.gif, example.sokoban.Sokoban MIDlet-2: Tickets, /icons/Auction.gif, TicketAuction MIDlet-3: Colors, /icons/ColorChooser.gif, example.Color MIDlet-4: Stock, /icons/Stock.gif, example.stock.StockMIDlet MIDlet-5: Tiles, /icons/Tiles.gif, example.tiles.Tiles MIDlet-6: ManyBalls, /icons/ManyBalls.gif, example.ManyBalls MIDlet-7: Sampler, /icons/App.gif, Sampler MIDlet-8: Properties, /icons/App.gif, example.PropExample MIDlet-9: HttpTest, /icons/App.gif, example.HttpTest
| | 위의 jad파일을 실행하면 응용프로그램을 선택할수있는 메뉴 같은 것이 나오는데 그것은 MIDlet-<n>부분에 여러 개를 두었기 때문이다. MIDlet Attribute 중에서 다음은 반드시 들어가야 하는 필수적인 애트리뷰트들이다.
MIDlet-Name |
MIDlet-Version |
MIDlet-Vendor |
MIDlet-Jar-URL |
MIDlet-Jar-Size | |
|
| |