CLDC와 KVM: 제한된 임베디드 환경을 위한 Java ME 구성
CLDC의 Java ME 계층 구조와 KVM, GCF 연결 모델, 버전별 차이, MIDP·IMP 프로파일 및 제한된 임베디드 환경의 대안을 정리한다.
2026-08-14 · 최초 발행 2026-01-12
제한된 메모리에서 Java를 실행하기 위한 구성
CLDC(Connected Limited Device Configuration)는 메모리와 처리 능력이 작은 기기에서 Java 애플리케이션을 실행하도록 만든 Java ME(Micro Edition)의 핵심 구성이다. Sun Microsystems가 개발했으며, 160KB~512KB 메모리를 갖춘 기기를 대상으로 최소화된 JVM인 KVM과 핵심 클래스 라이브러리를 제공한다.
이 구성의 목적은 단순히 JVM을 작게 만드는 데 그치지 않는다. 제조사가 다른 임베디드 기기에서도 Java 애플리케이션을 이식할 수 있도록 공통 기반을 마련하는 데 있다. 일반 JVM을 실행하기 어려운 소형 기기가 늘어나면서, Java ME는 Configuration과 Profile을 나누는 방식으로 기기별 요구를 수용했다.
Java ME 안에서 CLDC가 놓이는 위치
애플리케이션은 MIDlet, 게임, 유틸리티 같은 형태로 Profile 위에서 동작한다. Profile은 MIDP, IMP, PDA Profile처럼 기기 특성에 맞는 API를 제공하고, CLDC 또는 CDC가 그 아래의 기본 API를 맡는다. 바이트코드 실행은 KVM이나 CVM이 담당하며, 최종적으로 RTOS와 프로세서 등 시스템 자원을 사용한다.
| 계층 | 역할 | 구성요소 |
|---|---|---|
| Application | 사용자 애플리케이션 | MIDlet, 게임, 유틸리티 |
| Profile | 기기별 API | MIDP, IMP, PDA Profile |
| Configuration | 기본 API | CLDC, CDC |
| Virtual Machine | 바이트코드 실행 | KVM, CVM |
| OS/Hardware | 시스템 자원 | RTOS, 프로세서 |
CLDC 1.0과 1.1의 차이
CLDC 1.0(JSR-30)은 160KB ROM과 32KB RAM을 최소 메모리로 요구한다. 이 환경에서는 부동소수점 연산, 사용자 정의 ClassLoader, finalization, JNI(Java Native Interface)를 지원하지 않으며 샌드박스 보안 모델을 적용한다.
CLDC 1.1(JSR-139)은 최소 요구 사항이 192KB ROM과 32KB RAM으로 바뀌었다. float, double 부동소수점 연산과 약참조(Weak Reference)를 지원하고, Thread.getName()을 추가했다. Calendar와 TimeZone도 개선했으며 CLDC 1.0 애플리케이션과 하위 호환된다.
최소 라이브러리와 연결 API
CLDC의 java.lang에는 Object, Class, String, StringBuffer 같은 기본 클래스와 Boolean, Byte, Character, Integer, Long, Short 래퍼 클래스가 포함된다. CLDC 1.1에서는 Float와 Double도 추가된다. Thread와 Runnable, Throwable·Exception·Error 계열 예외 역시 이 영역에 속한다.
입출력은 java.io의 InputStream, OutputStream, Reader, Writer, InputStreamReader, OutputStreamWriter로 처리한다. DataInputStream, DataOutputStream, ByteArrayInputStream, ByteArrayOutputStream도 제공된다. java.util에서는 Vector, Stack, Hashtable, Enumeration과 Date, Calendar, TimeZone, Random을 사용할 수 있다.
javax.microedition.io는 GCF(Generic Connection Framework)를 위한 패키지다. Connector가 연결 생성 팩토리 역할을 하고, Connection·InputConnection·OutputConnection·StreamConnection 인터페이스로 네트워크 연결을 추상화한다.
KVM이 줄여야 했던 실행 환경의 부담
KVM(K Virtual Machine)은 CLDC에서 Java 바이트코드를 실행하는 경량 가상머신이다. 이름은 킬로바이트 단위의 메모리에서 동작한다는 특성에서 왔으며, 최소 자원으로 Java 실행 환경을 구성하는 것이 설계 목표다.
KVM은 40-80KB 풋프린트와 인터프리터 방식을 사용한다. C언어로 구현돼 플랫폼 독립성을 확보하고, 클래스 사전검증과 샌드박스 실행으로 보안 모델을 구성한다.
사전검증(Preverification)은 기기에서 수행할 검증 부담을 줄이는 절차다. 개발 PC에서 클래스 파일을 먼저 검증한 뒤 StackMap 속성을 추가한다. 이 방식은 기기 부팅 시간과 메모리 사용량을 낮추는 데 쓰인다.
GCF로 통일한 연결 모델
GCF는 CLDC의 통합 네트워크 연결 프레임워크다. java.net, java.io를 대체하는 설계로, 여러 프로토콜을 단일 API로 다룬다. 연결 URL은 다음 형식을 따른다.
scheme://host:port/path;parameters
| 프로토콜 | URL 형식 | 용도 |
|---|---|---|
| HTTP | http://host/path | 웹 통신 |
| HTTPS | https://host/path | 보안 웹 통신 |
| Socket | socket://host:port | TCP 통신 |
| Datagram | datagram://host:port | UDP 통신 |
| Serial | comm:0;baudrate=9600 | 시리얼 통신 |
| File | file:///path/file | 파일 접근 |
CDC와 구분되는 대상 환경
| 항목 | CLDC | CDC |
|---|---|---|
| 대상 기기 | 휴대폰, PDA, 센서 | 셋톱박스, 네비게이션 |
| 메모리 요구 | 160-512KB | 2MB 이상 |
| JVM | KVM | CVM (HotSpot 기반) |
| 부동소수점 | 1.1부터 지원 | 완전 지원 |
| 스레드 | 제한적 | 완전 지원 |
| ClassLoader | 미지원 | 지원 |
| JNI | 미지원 | 지원 |
| 보안 | 샌드박스 | J2SE 호환 |
CLDC는 휴대폰, PDA, 센서처럼 자원 제약이 큰 기기에 맞춘 구성이다. 반면 CDC는 셋톱박스와 네비게이션처럼 2MB 이상 메모리를 사용할 수 있는 환경을 대상으로 하며, CVM(HotSpot 기반), ClassLoader, JNI와 더 완전한 스레드·부동소수점 지원을 제공한다.
MIDP와 IMP가 더하는 기기별 기능
MIDP(Mobile Information Device Profile)는 휴대폰과 스마트폰을 위한 프로파일이다. MIDP 1.0, 2.0, 2.1, 3.0이 있으며 UI, 영속 저장소, 네트워킹, 게임 API를 제공한다.
IMP(Information Module Profile)는 M2M 장비와 텔레매틱스를 대상으로 한다. UI가 없는 백그라운드 서비스용 프로파일이며 산업용 센서와 원격 모니터링에 사용된다.
MIDlet 빌드와 배포 흐름
개발 환경으로는 Eclipse ME, NetBeans Mobility Pack, Java ME SDK, 제조사 SDK를 사용할 수 있다. Sun Wireless Toolkit이나 제조사 에뮬레이터는 기기 배포 전에 동작을 확인하는 수단이다.
소스 작성 뒤 javac 컴파일, preverify 사전검증, jar 패키징, JAD 메타데이터 생성, 기기 배포 및 테스트 순으로 진행한다.
MIDlet은 시작, 일시 정지, 종료 처리를 위한 생명주기 메서드를 구현한다.
public class MyMIDlet extends MIDlet {
public void startApp() {
// 애플리케이션 시작
}
public void pauseApp() {
// 일시 정지 처리
}
public void destroyApp(boolean unconditional) {
// 종료 처리
}
}
스마트폰 이후의 제약과 대안
CLDC는 표준 Java보다 제한된 API를 제공하며, 인터프리터 방식이라 네이티브 개발보다 성능이 느리다. 스마트폰이 등장한 뒤 생태계도 축소됐다.
| 기술 | 특징 | 용도 |
|---|---|---|
| Android | 완전한 Java/Kotlin 지원 | 스마트폰, 태블릿 |
| iOS | Swift/Objective-C | Apple 기기 |
| Embedded Linux | 완전한 JVM 가능 | IoT, 산업용 |
| RTOS + Native | C/C++ 직접 개발 | 실시간 시스템 |
CLDC는 KVM과 GCF를 통해 제한된 임베디드 환경에서 Java 실행과 네트워크 연결 추상화를 제공했다. Android와 iOS의 부상으로 시장에서의 입지는 줄었지만, Java의 임베디드 확장과 모바일 Java 생태계 형성, 제한된 자원 환경에서의 Java 실행 기술에 기반을 남겼다.