2000년대 한국 피처폰 게임을 살펴보면 WIPI, SKVM, Raptor라는 이름을 자주 만나게 됩니다. 얼핏 보면 통신사마다 사용했던 비슷한 플랫폼 세 종류처럼 보이지만, 세 이름은 정확히 같은 층위의 개념이 아닙니다.
먼저 결론부터 말하면 WIPI는 여러 휴대폰에서 공통으로 사용할 실행 환경을 만들기 위한 표준 규격이고, SKVM은 SK텔레콤에서 사용한 자바 계열 가상 머신입니다. ARAM에서 말하는 Raptor 계열은 LG텔레콤용 WIPI-C 프로그램을 만들고 포장하던 도구와 형식의 계보를 가리킵니다.
이 차이는 오래된 게임을 다시 실행할 때 중요합니다. 파일의 겉모습이 비슷해도 내부 코드와 패키지 구조, 게임이 휴대폰에 요청하는 기능이 다르기 때문입니다.

붕어빵 타이쿤 3 메인 화면. ARAM이 피처폰 게임의 화면과 입력 환경을 현대 기기에서 다시 구성한 모습입니다.
WIPI는 공통 규격입니다
WIPI는 Wireless Internet Platform for Interoperability의 약자입니다. 이동통신사마다 달랐던 실행 환경을 하나의 규격으로 묶어, 같은 콘텐츠를 여러 휴대폰으로 옮기기 쉽게 만들려는 목적으로 등장했습니다.
TTA 모바일 표준 플랫폼 규격은 WIPI의 중심을 두 부분으로 설명합니다. 하나는 휴대폰 하드웨어 차이를 감추는 HAL이고, 다른 하나는 애플리케이션이 화면, 입력, 파일과 같은 기능을 사용할 수 있게 하는 Basic API입니다. C와 Java를 모두 지원하도록 규격화한 것도 특징입니다.
다만 공통 규격이 있다고 해서 모든 WIPI 게임이 완전히 같은 것은 아닙니다. 통신사와 제조사는 선택 기능이나 자체 서비스를 추가할 수 있었고, 화면 크기와 입력 방식, 사운드, 저장소 같은 단말기 조건도 달랐습니다. 같은 제목의 게임이라도 KTF판과 LGT판을 별개의 빌드로 확인해야 하는 이유입니다.
ARAM에서는 WIPI 프로그램이 기대하는 코드 실행 환경과 휴대폰 서비스를 함께 재현합니다. 파일을 인식하는 것만으로는 부족하며, 프로그램이 호출하는 API와 기기별 동작까지 맞아야 실제 화면이 나오고 조작할 수 있습니다.
SKVM은 SK텔레콤의 자바 실행 환경입니다
SKVM은 WIPI처럼 이동통신 3사가 함께 사용하기 위해 만든 표준의 이름이 아닙니다. XCE가 개발하고 SK텔레콤에서 사용한 모바일 자바 계열 가상 머신입니다. 당시 자료에서도 SKVM을 모바일 자바 애플리케이션을 해석해 실행하는 환경으로 설명합니다.
일반적인 자바 실행기가 있다고 해서 SKVM 게임이 바로 동작하지는 않습니다. 게임은 SKVM 고유의 API와 패키지 구성, 그래픽과 입력 규칙, SK텔레콤 단말 서비스에 맞춰 만들어졌기 때문입니다. 따라서 에뮬레이터는 자바 코드만 실행하는 것이 아니라 게임이 기대하는 SKVM 환경도 함께 제공해야 합니다.
ARAM에서 SKVM 게임을 별도 계열로 구분하는 것도 이 때문입니다. 같은 자바 계열인 MIDP 프로그램과도 필요한 API와 패키지 해석 방식이 다를 수 있으므로, 파일 확장자나 프로그래밍 언어만 보고 같은 실행 경로로 처리할 수 없습니다.
Raptor는 LGT WIPI-C 계열을 구분하는 이름입니다
Raptor는 WIPI와 경쟁했던 별도의 국가 표준이나 SKVM과 같은 자바 가상 머신의 이름으로 이해하면 조금 어긋납니다. ARAM에서 사용하는 Raptor 계열이라는 표현은 LG텔레콤 WIPI-C 개발 환경에서 만들어진 프로그램과 그 패키징 형식을 구분하기 위한 실용적인 이름입니다.
당시 LGT 개발 과정에서는 C로 작성한 코드를 빌드한 뒤 Raptor 도구를 거쳐 모듈과 부가 정보를 만들고 패키지에 넣었습니다. 그래서 Raptor 계열 게임은 큰 틀에서는 WIPI-C 애플리케이션이지만, 다른 통신사의 WIPI 패키지와는 내부 구성과 로딩 과정, 기대하는 통신사 서비스가 다릅니다.
ARAM v0.2.1 릴리스 기록에서도 이를 LGT Raptor 계열 WIPI-C 패키지로 구분합니다. ARAM은 이 계열의 패키지 구조를 읽고, 포함된 코드를 메모리에 배치한 다음, 게임이 호출하는 LGT 쪽 서비스를 연결해야 합니다.
세 계열은 실행 방법부터 다릅니다
세 이름의 차이를 ARAM의 관점에서 정리하면 다음과 같습니다.
- WIPI는 HAL과 공통 API를 정의한 모바일 플랫폼 규격입니다. C와 Java 애플리케이션을 모두 고려하며, 실제 게임은 통신사와 단말기에 따라 다른 조건을 가질 수 있습니다.
- SKVM은 SK텔레콤에서 사용한 모바일 자바 계열 가상 머신입니다. 자바 코드뿐 아니라 SKVM 고유 API와 패키지, 단말 서비스를 재현해야 합니다.
- Raptor 계열은 ARAM에서 LGT WIPI-C 프로그램의 빌드와 패키징 계보를 구분하는 이름입니다. WIPI-C라는 공통 뿌리가 있어도 다른 WIPI 패키지와 같은 방식으로 바로 열 수 있는 것은 아닙니다.

리듬스타 메인 화면. 제목이 같아도 통신사판과 패키지 형식이 다르면 별개의 입력으로 확인해야 합니다.
이 차이 때문에 에뮬레이터는 먼저 파일 내부를 검사해 어떤 계열인지 판별합니다. 그다음 계열에 맞는 로더로 코드와 리소스를 읽고, 필요한 실행 엔진과 휴대폰 서비스를 연결합니다. 화면 출력, 키 입력, 사운드, 저장 기능 중 하나라도 게임의 기대와 다르면 첫 화면 전에 멈추거나 진행 중 문제가 생길 수 있습니다.
같은 게임 이름만으로 호환성을 판단할 수 없습니다
피처폰 시절에는 같은 게임이 여러 통신사용으로 따로 출시되는 일이 흔했습니다. 제목과 그림이 같아도 내부 프로그램은 WIPI-C, SKVM 또는 다른 자바 계열로 만들어질 수 있고, 같은 계열 안에서도 버전과 대상 단말기가 다를 수 있습니다.
따라서 ARAM에서 호환성을 확인할 때는 게임 이름과 함께 통신사, 실행 계열, 패키지 형식, 파일의 SHA-256을 기록하는 것이 좋습니다. 확장자를 바꾸는 것만으로 다른 계열의 파일이 되지는 않으며, 한 통신사판이 실행된다고 해서 다른 통신사판까지 같은 결과가 보장되는 것도 아닙니다.
ARAM 호환성 기록이 인식, 로딩, 실행, 첫 화면, 플레이 가능, 완료를 나누어 표시하는 이유도 여기에 있습니다. 파일 형식을 알아보는 일과 게임을 끝까지 정상적으로 실행하는 일 사이에는 여러 단계가 있습니다.
WIPI, SKVM, Raptor는 모두 한국 피처폰 게임의 역사에서 만나는 이름이지만 서로 같은 종류의 이름은 아닙니다. 이 차이를 이해하면 왜 같은 게임도 통신사판에 따라 결과가 달라지는지, 에뮬레이터가 왜 여러 실행 경로를 가져야 하는지 조금 더 선명하게 볼 수 있습니다.