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가 놓이는 위치

Java ME 플랫폼MIDlet 애플리케이션MIDP (Profile)CLDC (Configuration)KVM (K Virtual Machine)Host OS / RTOS하드웨어

애플리케이션은 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 애플리케이션과 하위 호환된다.

CLDC 1.1CLDC 1.0정수 연산만제한된 API부동소수점 지원확장된 API

최소 라이브러리와 연결 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언어 구현플랫폼 독립적클래스 사전검증샌드박스 실행

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 파일 접근
ConnectionInputConnectionOutputConnectionStreamConnectionContentConnectionHttpConnectionHttpsConnectionSocketConnectionDatagramConnection

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 메타데이터 생성, 기기 배포 및 테스트 순으로 진행한다.

Java 소스작성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 실행 기술에 기반을 남겼다.

CLDCJava ME임베디드 자바KVMGCF