[Paper] REMODEL-LLM: C 코드를 Java로 변환하기 위해 LLM 사용
발행: (2025년 12월 12일 오후 06:25 GMT+9)
8 min read
원문: arXiv
Source: arXiv - 2512.11402v1
Overview
논문 REMODEL‑LLM은 컴팩트하고 양자화된 대형 언어 모델(LLM)이 C 프로그램을 자동으로 Java로 번역하는 능력을 평가한다. AST 기반 코드 분석과 엄격히 제어된 프롬프트를 결합함으로써, 저자들은 19개의 20 억 파라미터 이하 모델 사이에 뚜렷한 성능 위계가 존재함을 밝혀냈으며, 경량 LLM을 활용한 언어 간 코드 마이그레이션의 가능성과 현재 한계를 동시에 조명한다.
Key Contributions
- 포괄적인 벤치마크: 19개의 양자화된 LLM(≤ 20 B 파라미터)을 선별된 C‑to‑Java 번역 스위트에 적용.
- 하이브리드 번역 파이프라인: 먼저 C 소스를 추상 구문 트리(AST)로 분해해 의미적 기반을 제공하고, 이후 규칙 기반 프롬프트를 LLM에 전달해 코드 생성.
- 계층형 성능 분류(Tier 1, 2, 3)로, 실행 가능한 Java 코드를 생성할 수 있는 모델과 그렇지 않은 모델을 명확히 구분.
- 실증적 통찰:
function pointers,sizeof,enums와 같은 특정 C 구문이 현재 양자화 모델에서 일관되게 실패함을 확인. - 오픈소스 아티팩트(데이터셋, 프롬프트, 평가 스크립트)를 제공해 재현성 및 추가 연구를 지원.
Methodology
- 데이터셋 구축 – 제어 흐름, 메모리 관리, 자료 구조 등 다양한 언어 기능을 포괄하는 200개의 짧은 C 스니펫을 수집하고, 각각에 대해 손으로 작성한 기준 Java 번역을 매핑.
- AST 추출 – 각 C 스니펫에 대해 Clang 프론트엔드로 AST를 생성. AST는 두 가지 역할을 수행:
- 프롬프트가 참조할 수 있는 언어에 독립적인 구조적 표현 제공.
- 포인터 연산 등 지원되지 않는 구문을 모델 호출 전에 자동으로 탐지.
- 프롬프트 설계 – 고도로 제약된 규칙 기반 프롬프트 작성:
- “You are a code translator. Use the following AST nodes to produce equivalent Java code. Do not add any imports beyond
java.util.*. Do not use unsafe casts.” - 또한 메모리 모델 처리를 올바르게 유도하기 위한 짧은 “translation checklist”를 포함(예:
malloc을new로 대체).
- “You are a code translator. Use the following AST nodes to produce equivalent Java code. Do not add any imports beyond
- 모델 추론 – 19개의 양자화 LLM을 모두 zero‑shot 설정(파인튜닝 없음)에서 동일한 프롬프트‑AST 쌍에 적용. 생성된 Java 코드는 원본 C 동작에서 파생된 단위 테스트 스위트에 대해 컴파일 및 실행.
- 평가 지표 –
- 컴파일 성공률(실행 가능 vs. 비실행).
- 기능 정확도(단위 테스트 통과율).
- 의미 충실도(미묘한 논리 오류에 대한 수동 검토).
Results & Findings
| Tier | Representative Models | Compilation Success | Functional Pass Rate |
|---|---|---|---|
| Tier 3 | llama3.1, gemma3, starcoder2 | 0 % (none compiled) | 0 % |
| Tier 2 | mistral‑nemo, mistral | ~70 % compiled | 10‑20 % passed tests (many semantic bugs) |
| Tier 1 | phi4, deepseek‑coder‑v2, codeqwen | > 90 % compiled | 50‑65 % passed tests |
- 주요 실패 패턴 – Tier 1 모델조차도 다음에서 어려움을 겪음:
- 함수 포인터(Java 인터페이스나 람다로 매핑 불가).
sizeof표현식(리터럴 숫자로 오해).- enum 기반 switch 로직(잘못된 case 처리 생성).
- 추론 한계 – 저자들은 양자화(int8/int4)가 다단계 논리 추론 능력을 감소시킨다고 지적한다. 이는 포인터 별칭 및 저수준 메모리 계산을 올바르게 다루는 데 필수적이다.
Practical Implications
- 레거시 코드 마이그레이션 – 단순하고 보일러플레이트가 많은 C 모듈(예: 기본 I/O 래퍼)에서는 Tier 1 양자화 모델이 이미 사용 가능한 Java 코드를 생성할 수 있어, 마이그레이션 작업을 30‑40 % 정도 절감할 수 있다.
- 툴링 통합 – AST + 프롬프트 파이프라인을 IDE 플러그인이나 CI 기반 마이그레이션 어시스턴트에 래핑하면, 모델이 지원하지 않는 구문을 자동으로 표시하고 수동 검토로 전환하는 “auto‑suggest” 모드를 제공할 수 있다.
- 비용 효율적 배포 – 평가된 모델들은 단일 GPU에서 낮은 메모리 사용량으로 원활히 실행되므로, 조직이 전체 규모 LLM API 비용 없이 자체 번역 서비스를 운영할 수 있다.
- 안전망 – 명확한 계층형 성능을 활용해 다음과 같은 워크플로를 제안한다: 모델 실행 → 자동 컴파일 → 단위 테스트 통과 시에만 번역 결과를 승격, 이를 통해 미묘한 버그 유입을 방지한다.
Limitations & Future Work
- 벤치마크 범위 – 테스트 스위트는 작고 독립적인 스니펫에 초점을 맞추었으며, 복잡한 빌드 시스템을 갖춘 대규모 다파일 프로젝트는 평가되지 않았다.
- 양자화 영향 – 전체 정밀도 모델과의 비교가 없으므로, 양자화 자체가 초래하는 성능 손실 정도는 아직 불명확하다.
- 프롬프트 경직성 – 규칙 기반 프롬프트는 일관성에는 도움이 되지만, 스트림이나 제네릭 사용 등 보다 관용적인 Java 코드를 생성하는 데는 제한이 있을 수 있다.
- 향후 연구 방향(저자 제안):
- 도메인 특화 C‑to‑Java 코퍼스에 대한 파인튜닝 또는 LoRA 어댑터 적용.
- AST‑프롬프트 프레임워크를 확장해 대규모 코드베이스의 점진적 번역 지원.
- 가장 어려운 구문(함수 포인터, 저수준 메모리 연산)에는 전통적인 규칙 기반 트랜스파일러와 LLM 출력을 결합하는 하이브리드 접근법 탐색.
Authors
- Aryan Gupta
- Y. Raghu Reddy
Paper Information
- arXiv ID: 2512.11402v1
- Categories: cs.SE, cs.AI
- Published: December 12, 2025
- PDF: Download PDF