소프트웨어 기술이 발전하면 특정 언어로 작성된 소스코드를 다른 언어로 바꿔야 할 때가 종종 있다. 예를 들어 코볼(COBOL)로 짜여진 은행의 계정계 프로그램을 자바와 같은 고급언어로 바꾸거나, 파이썬2로 쓰여진 코드를 파이썬3 환경에서도 계속 이용하고 싶을 때가 있다.

이는 옛날 코드를 재활용하는 것을 넘어 상호운용성을 위해서도 필요하다. iOS용으로 개발된 앱을 안드로이드에서 돌아가는 소스코드를 자동으로 변환시킬 수 있다면, 모바일 앱을 개발하는 기업의 수고는 훨씬 줄어들 것이다.

이처럼 프로그램 소스코드를 하나의 언어에서 다른 언어로 바꾸는 기능을 하는 프로그램을 ‘트랜스컴파일러’라고 부른다. 일반적으로 컴파일러는 인간이 이해하기 쉬운 문법으로 작성된 고급언어를 컴퓨터가 이해하기 쉬운 기계어로 바꿔주는 역할을 하는데, 트랜스컴파일러는 고급언어를 같은 레벨의 고급언어로 바꿔주는 것이 특징이다.

그러나 지금까지 등장한 트랜스컴파일러는 개발자들이 만족할만한 수준까지 올라오지 못했다. 변환된 소스코드가 그 언어의 문법에 맞지 않거나 가독성이 부족할 경우가 많았다. API 구조 등이 환경마다 다르기 때문에 1대 1로 대응해 바꾸는 것이 불가능했다. 결국 트랜스컴파일러로 변환을 한 이후에도 개발자들은 많은 시간을 들여 변환된 코드를 일일이 수작업으로 고쳐야 한다.

특히 이 수작업을 하기 위해서는 두 언어를 모두 능숙하게 다루는 개발자가 필요하다. 예를 들어 코볼 프로그램을 자바로 바꾸려면 코볼과 자바를 모두 다루는 개발자가 있어야 한다. 현실에 이런 개발자는 흔치 않고, 있더라도 몸값이 매우 비싸다.

이런 문제의 해결사로 페이스북이 자청하고 나섰다. 페이스북은 최근 ‘트랜스코더(TransCoder)’라는 이름의 트랜스컴파일러를 만들었다고 발표했다. 목표는 일반 트랜스컴파일러와 같다. 고급 프로그래밍 언어를 자동으로 다른 고급 언어로 바꾸는 것이다.

방법론은 기존과 다르다. 기존의 트랜스컴파일러가 주로 룰(rule) 기반으로 만들어진 반면, 페이스북은 머신러닝 기법, 특히 자연어 번역에서 활용되는 최신 기법 ‘비지도 신경망 학습법’을 활용했다고 페이스북은 밝혔다. 이론대로라면 자연어 번역보다는 트랜스컴파일러를 만드는 게 훨씬 쉽다. 자연어는 무수한 예외와 생략이 점철돼 있지만, 컴퓨터 프로그래밍 언어는 정확한 규칙에 의해 쓰여지기 때문이다. 그러나 지금까지 학습 데이터의 부족 때문에 자연어 번역의 기법을 트랜스컴파일러에 사용하지 못했었다.

트랜스코더 개발을 위해 페이스북은 깃허브를 이용했다. 280만개의 깃허브 오픈소스 리포지토리를 학습데이터로 활용했다. 테스트는 코딩 문제풀이 사이트 긱스포기스(geeksforgeeks)를 활용했다. 긱스포긱스는 취업을 위한 코딩 시험 문제 등을 수집하고 풀이하는 사이트다.

이렇게 데이터와 테스트 플랫폼을 마련한 덕부에 페이스북은 기존 트랜스컴파일러보다 성능이 월등히 뛰어난 트랜스코더를 개발했다고 자랑했다. 회사 측에 따르면, C++에서 자바로 변환할 경우 74.8%의 정확도를 기록했다고 발표했다. 자바에서 C++는 무려 91.6%의 정확도를 기록했다. 다만 아직 파이썬에서 C++로의 변환은 57.8%의 정확도로, 상대적은 낮은 결과를 보였다.

현재 트랜스코더는 자바, C++, 파이썬을 대상으로 하고 있는데, 데이터만 충분하다면 더 많은 언어로 확장될 수 있다고 한다. 다만 코볼이나 포트란과 같은 과거의 언어는 깃허브에 소스코드가 공개된 경우가 많지 않을 것이기 때문에 쉽지는 않을 것으로 보인다.

페이스북이 발표한 논문 원본(영어)을 보려면 여기를 클릭하면 된다.

글. 바이라인네트워크
<심재석 기자>shimsky@byline.network