[논문 리뷰] Experience on Automatically Converting a C++ Monolith to Java EE
이 논문은 clang-tool 기반 트랜스파일러를 구축하여 대규모 C++ 단일 코드베이스(≈800k LOC, ≈2,500 .cpp 파일, ≈3,000 클래스)를 Java EE로 WildFly에서 실행되도록 자동으로 변환하는 방법을 문서화하고, 다중 상속, 열거형, RAII와 같은 문제를 다루며, ongoing C++ 개발 중 지속적으로 재생성하는 전략을 제시한다.
Converting a large C++ code base (800k lines of code) into Java alone is challenging. Changing the architecture from a monolith into an application adhering to the Java application server standard and to run it on WildFly is a different number. This report describes the experience made during the C++ to Java conversion, the techniques used as well as the way to success of running the Java code on the application server for the first time. The approaches to solve the usual C++ to Java culprits, like multiple inheritance, enum-handling and scoped objects are described. A clang-tool-based software is developed to continuously regenerate the Java, because development on the C++ code base continued.
연구 동기 및 목표
- 베이스 레이어를 통일하고 스택을 현대화하며 유지 관리성과 채용 전망을 개선하기 위해 대규모 C++ 아티팩트를 Java로 전환하려는 동기를 제시한다.
- C++ 특징(예: 다중 상속, 열거형, RAII)이 Java 및 Java 애플리케이션 서버와 어떻게 상호 작용하는지에 대한 도전 과제를 설명한다.
- 트랜스파일러의 아키텍처와 워크플로를 제시하고 C++ 개발이 지속되는 상황에서 자동화된 번역이 어떻게 이루어지는지 설명한다.
- 생성된 Java 아티팩트의 구조, 패키징 및 Java EE(WildFly)와의 통합 방법을 설명한다.
- 전환 과정의 실증적 관찰을 통해 문제 영역과 교훈을 제시한다.
제안 방법
- clang-tool를 기반으로 C++ 핵심 계층 코드를 분석하고 Java 코드로 변환하는 트랜스파일러를 개발한다.
- 중앙 트랜스파일 방문자와 재쓰기/템플릿화를 사용하여 C++ 구성 요소의 Java 대응물을 생성한다.
- Java 템플릿 엔진과 자유 함수 매퍼를 활용해 C++의 free-function을 Java의 정적 메서드로 번역한다.
- C++ 네임스페이스와 STL 사용을 Java 패키지와 임포트로 매핑하는 패키지/임포트 레지스트리를 구현한다.
- 다중 상속, Chain of Command 패턴, DAO 등 도전적 특징에 대한 특수 처리를 적용하고 이를 Java 호환 디자인으로 변환한다.
- 체크인 시마다 Java를 C++로부터 재생성하고 필요한 경우 수동 수정 반영을 위해 체크된 대체를 수행하는 지속적 재생성 기능을 enables 한다.
실험 결과
연구 질문
- RQ1대규모 C++ 단일 코드베이스를 Java EE 아키텍처로 번역하면서 동작을 보존하고 Java 애플리케이션 서버에서 배포 가능하도록 할 수 있는가?
- RQ2Java로의 직접적인 번역을 어렵게 만드는 주요 C++ 관용구(예: 다중 상속, 소멸자, 열거형)는 무엇이며 이를 어떻게 완화할 수 있는가?
- RQ3대규모로 C++를 Java로 번역할 때 수작업 개입 없이도 효과적인 자동화 기술(도구, 템플릿, 규칙)은 무엇인가?
- RQ4번역 과정에서 지속적인 C++ 개발을 어떻게 처리할 수 있는가?
- RQ5Java 패러다임에 맞추기 위한 합리적인 아키텍처적 적응(예: Is-a를 Has-a로 변환하여 DAO를 다루기, Chain of Command 처리 등)은 무엇인가?
주요 결과
- 아티팩트는 약 2,500개의 CPP 파일, 약 3,000개 클래스, 약 800,000 줄의 코드로 구성된다.
- 약 400개 클래스가 다중 기반 클래스에서 상속하며, 대부분이 DAO 또는 Chain 패턴에 해당하여 선택된 완화 전략을 안내한다.
- 자동 번역 후 수작업으로 조정이 필요한 클래스는 약 10개에 불과했다.
- 트랜스파일러는 템플릿 기반 배출 전략과 재쓰기 표를 사용하여 C++ 구성 요소를 Java에 대응시키며, 복잡한 타입 처리와 연산자/메서드 재작성도 포함한다.
- 중앙 패키지 레지스트리는 추론된 사용을 바탕으로 임포트를 모아 일관된 Java 패키지 구조를 가능하게 하며 누락 임포트를 피한다.
- 이 접근 방식은 Java 생태계에서 열거형, RAII 스타일의 자원 관리 및 복잡한 상속의 실용적 처리를 입증하였으며 Java 애플리케이션 서버(WildFly)에서의 배포를 가능하게 한다.
- 워크플로우는 C++ 기반이 진화함에 따라 Java 코드의 지속적 재생성을 지원하며, 필요한 경우 수동 수정 반영을 위한 체크된 대체 메커니즘을 제공한다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.