외부 라이브러리와 함께하는 검증된 코드 변환

외부 라이브러리와 함께하는 검증된 코드 변환
안내: 본 포스트의 한글 요약 및 분석 리포트는 AI 기술을 통해 자동 생성되었습니다. 정보의 정확성을 위해 하단의 [원본 논문 뷰어] 또는 ArXiv 원문을 반드시 참조하시기 바랍니다.

초록

본 논문은 Go 프로젝트를 Rust로 자동 변환하면서 외부 라이브러리 의존성을 정확히 매핑하고, 불투명 타입을 다루는 교차 언어 검증 파이프라인을 제시한다. 라이브러리 매핑(RAG)과 프로토버프 기반 어댑터 합성을 통해 컴파일 성공률과 I/O 동등성 검증률을 평균 2배 이상 향상시킨다.

상세 분석

이 연구는 대규모 언어 모델(LLM)이 코드 변환에 활용될 때 가장 취약한 두 가지 문제, 즉 외부 라이브러리 API의 오탐(환상)과 불투명 타입을 포함한 함수의 의미론적 동등성 검증을 동시에 해결한다는 점에서 의미가 크다. 첫 번째 단계에서는 “Retrieval‑Augmented Generation”(RAG) 방식을 도입해 Go 패키지‑crate 매핑을 사전 구축한다. 구체적으로, 각 Go 패키지에 대해 후보 Rust crate를 키워드 검색과 LLM 제안 기반으로 선정하고, 해당 crate의 공개 API와 import 경로를 포함한 지식베이스(K_crate)를 자동 생성한다. 이렇게 만든 K_crate는 API 설명과 시그니처를 질의하면 가장 적합한 Rust 함수와 필요한 import 구문을 반환한다. 이 과정은 LLM이 단순히 텍스트를 생성하는 것이 아니라, 실제 존재하는 라이브러리 메타데이터에 기반해 정확한 호출 코드를 제시하도록 만든다.

두 번째 단계는 불투명 타입을 다루는 교차 언어 검증이다. Go와 Rust는 런타임과 메모리 모델이 다르기 때문에 직접적인 값 비교가 불가능하다. 논문은 이를 해결하기 위해 언어 중립적인 인터미디엇 데이터 포맷(IDF)으로 protobuf 스키마(T_Proto)를 사용한다. 소스 Go 타입 정의를 LLM이 분석해 protobuf 메시지로 변환하고, 이를 기반으로 Go와 Rust 각각에 대해 캐리어 타입(T_GoProto, T_RustProto)과 (de)serialization 코드를 자동 생성한다. 이렇게 생성된 어댑터는 외부 라이브러리의 공개 생성자·직렬화 함수만을 이용해 불투명 객체를 IDF 형태로 변환한다. 이후 동일 입력을 두 언어에서 실행하고, protobuf 메시지를 역직렬화해 비교함으로써 I/O 동등성을 검증한다.

실험에서는 6개의 실제 Go 저장소(crypto, networking, 데이터베이스 등)를 대상으로 전체 파이프라인을 적용했다. 기존 LLM‑기반 변환기와 비교했을 때, 컴파일 성공률은 최악의 경우 100%까지 회복됐으며, 평균 95.83%의 동등성 검증 성공률을 기록했다. 특히 외부 의존성이 많은 프로젝트에서 성공률이 2배 이상 상승한 점이 눈에 띈다.

이 논문의 핵심 기여는 (1) 외부 라이브러리 매핑을 위한 RAG 기반 사전 지식베이스 구축, (2) 불투명 타입을 안전하게 다루는 protobuf 기반 어댑터 합성, (3) 함수‑단위 모듈식 번역과 검증 파이프라인을 결합해 전체 저장소 수준에서 실용적인 코드 마이그레이션을 가능하게 한 점이다. 또한, Go‑Rust에 국한되지 않고, 다른 정적 타입 언어 쌍에도 적용 가능한 일반화 가능성을 제시한다.


댓글 및 학술 토론

Loading comments...

의견 남기기