우연과 인연
과학/공학계에서 연구를 한다는 것을 생각하면 어떠한 장면이 연상되는가? 구글 그림 검색에 “과학 연구”라는 말을 넣어보았다. DNA 나선 구조와 더불어 하얀 실험복을 입고 현미경을 들여다보는 사람이 잔뜩 나온다. 영어로 “scientific research”라고 검색해보아도 비슷한 사람이 잔뜩 나온다.
이처럼 혼자 무언가를 골똘히 들여다보고 궁리하는 것은 연구에서 빠질수 없는 장면이 맞지만, 그보다 더 멋진 장면은 우연이 이어준 사람과 사람들간의 인연일 것이다. 우연히 지나가던 귀인이 툭 던진 한마디에 큰 프로젝트가 시작되는 일도 잦고, 궁리의 꼬리가 끝이 보이지 않아 막막할 때 생각치도 못한 과거의 인연에서 빛이 새어 나오기도 한다. 오늘은 그런 한 장면을 이야기해 볼까 한다.
연구자로 살다보면 여러가지 계기로 전혀 예상치 못한 연구 주제를 만나는 경우가 있다. 그러한 여러가지 계기 중 교수로서 가장 신이 나는 순간은 학생이 도전적인 문제를 스스로 제안하는 경우다. 세상에 대한 불만으로 가득 찬 눈빛이면 더욱 좋다. 현재 최첨단 소프트웨어 기술이라는 것이 고작 이런 수준이라는 것이 부끄러운 마음도 곁들이고. 어떻게 풀어야 할지는 당장 모르겠지만, 몇 년간 밀어주시면 뭐라도 해보겠다는 포부로 마무리 되면 아주 최고다.
TurboTV연구도 이렇게 시작했다. 갓 석사로 입학한 승완이와 연구 주제를 찾기 위해 자주 만나서 이야기를 나누던 2021년 2학기였다. 연구 주제를 찾는 석사 신입생에게 내가 주문한 것은 간단했다.
- 우리의 피부에 직접 와닿는 실제 문제를 찾을 것 (논문을 위해서, 졸업을 위해서 하는 연구 말고)
- 현재 최신 기술로도 안풀려서 개발자들의 골머리를 썩이는 문제일 것
- 완벽한 해결책이 안보인다고 겁먹지 말고, 개똥같은 아이디어라도 스스로 생각해 볼 것
몇 주간 계속 이야기를 나누면서 우리의 논의는 점점 TurboFan으로 수렴해갔다. TurboFan 은 전세계에서 가장 많이 쓰는 구글 Chrome 웹브라우저에 들어가는 JavaScript 컴파일러이다. JavaScript는 실행기(interpreter) 위에서 직접 프로그램을 실행하는 언어이지만 속도를 위해 실행중에 코드를 최적화하고 기계어로 번역해서 돌리곤 한다. 이 때 쓰는 프로그램이 TurboFan이다. 승완이의 말에 따르면 TurboFan은 매우 복잡한 프로그램이라 최적화 과정에 오류가 많고, 이러한 오류 때문에 프로그램이 잘못 번역되는 경우가 많다고 했다. 원본 프로그램과 다르게 번역된 프로그램은 오동작을 일으키거나 최악의 경우 해커들의 공격 대상이 되어 심각한 보안 문제로 이어질 수 있다. 승완이는 학부 때 보안을 전공하고 해킹에 경험이 있었던 터라, 이 문제에 관심이 많은 듯 했다. 준비해온 여러 가지 실제 사례를 함께 보면서 문제의 중요성을 확인했다. 내가 주문한 대로 제법 근사한 상이 차려졌다.
좋은 문제를 찾았으니 이제 좋은 해결책을 함께 찾아볼 차례다. 훌륭하게도 스스로 찾아온 개똥같은 아이디어부터 살펴보았다. 승완이가 가져온 몇 가지 개똥 아이디어는 친환경 바이오매스 에너지원으로서 작은 손선풍기를 돌리기엔 괜찮았으나, 큰 TurboFan을 돌리기에는 화력이 딸렸다. TurboFan은 매우 복잡하고 긴 C++코드로 작성되어 있고, 자주 코드가 바뀌기 때문에 올바른지 검사하기가 매우 까다롭다. 바이오매스로 일단 한 번 덤벼보겠다는 어린 학생의 당찬 포부는 멋있었지만, 그러다가 석사만 10년 하는 수가 있다고 말리며 일단 돌려보냈다. 당장 뾰족한 수가 떠오르지 않았다. 잠시 연구실에 남아서 혼자 자료를 뒤적여 보았지만 별 소득은 없었다. 저녁시간도 되었고 해서 곧 나도 집으로 향했다.
퇴근길, 무거운 짐을 이고 가는 듯 하던 순간, 갑자기 머릿속에서 무언가 번쩍 떠올랐다. 희한하게도 출퇴근길 기계동 앞 잔디밭에서는 항상 좋은 생각이 많이 난다. 떠오른 것은 번역 검산(translation validation)이라는 기술이다. 박사과정을 하던 당시 이웃 연구실에서 LLVM 컴파일러의 동작을 검사하기 위해 번역 검산을 연구하던 것을 본 기억이 났다. 컴파일러가 코드를 변환 (다른 언어로 번역하든 혹은 같은 언어로 최적화하든)할 때, 변환 전과 후의 의미가 동일한지 검사하는 기술이다. 그리고 그 연구로 박사 학위를 받고 지금은 미국 텍사스 AWS에서 일하는 이준영 박사도 자연스레 떠올랐다. 이 쪽 분야에 연구 경험이 많은 이박사에게 조언을 구해볼 수 있을 것 같았다.
그렇게 생각을 정리하곤 집에 와서 잠시 다른 일을 하던 차에, 어디에선가 이메일이 한 통 왔다. 굉장히 신기하게도 바로 그 이준영 박사였다. 메일함을 뒤져보니 2021년 11월 8일 오후 8시 11분으로 기록이 되어있다. 안부와 함께 이런저런 질문이 담긴 메일이었다. 바로 답장을 보내고, 조금 뒤 8시 30분에 줌에서 만나기로 했다. 우리의 문제를 설명해주었더니 이박사도 매우 흥미로워 했다. LLVM과 같은 전통적인 컴파일러와 다르게 TurboFan은 JIT (just-in-time) 컴파일러 (미리 컴파일 하는 것이 아니라 실행중에 그때그때 컴파일)라는 독특한 점이 있었고, 그래프에 기반한 특이한 언어를 사용했기 때문에 새로운 검산 방법이 필요하다는 것에 동의를 했다. 그리고 함께 의기투합하여 문제를 풀어보기로 했다. TurboTV (Translation Validation for TurboFan)의 시작이었다.
그 때부터 본격적인 연구에 들어갔다. 승완이는 TurboFan의 소스코드를 샅샅히 뒤져가며 동작을 파악했고, 이박사의 경험을 발판으로 삼아 새로운 번역검산기를 만들기 시작했다. 그 때 쯤, 본인의 석사 연구를 마무리하고 졸업을 몇 달 앞두고 있던 우석이도 합류를 했다. 둘은 놀라운 속도로 일을 진행했다. 대다수 큰 소프트웨어가 그렇듯이 TurboFan도 제대로된 설명서가 없다. 또한 늘 그렇듯이 우리의 연구를 위해 잘 준비된 도구도 당연히 없다. 결국 이럴 때는 맷집 싸움이다. 맨 땅에 헤딩해가며 코드를 한 줄 한 줄 읽고, 실제로 프로그램을 돌려보고, 개발자 게시판을 통해 구글의 직원들에게 물어가면서 한발씩 나아갔다. 필요하면 스스로 디버깅 도구도 만들고, 이박사와 함께 엄밀한 이론적 토대도 만들어 갔다.
2023년 초, 1년 반동안 갈고 닦은 시스템을 정리하여 CAV에 제출했는데 아쉽게 탈락하였다. 중요한 문제이고, 열심히 한 것은 알겠는데 이론적 깊이나 놀랄만한 실험 결과가 없다는 것이었다. 기존 기술과 근본적으로 다른 것이 무엇이냐는 질문은 뼈아팠다. 이를 논문에서 잘 설명하기 위해 굉장히 많은 논의를 했었는데 부족했다. 논문 제출전 며칠이 생각이 난다. 우리 학생들은 대전에, 이박사는 텍사스에 있었고, 나는 코로나로 미루어 둔 신혼여행 차 몰디브였다. 수많은 커밋과 슬랙 메세지, 줌 대화가 태평양-대서양-인도양을 오갔다. 아쉽게 논문은 탈락했지만, 몰디브 해변가에 앉아서 글쓰는 작가의 삶이 꽤나 매력적이라는 사실을 알게 된 것은 큰 수확이었다.
결과가 다소 아쉽긴 했지만, 몇 가지 믿는 구석이 있었기에 걱정없었고 쉴새없이 달려나갔다. 우리는 제출 이후에 심사가 진행되는 동안 이미 시스템을 확장하고 기술을 고도화해 가고 있었다. 그 때 쯤에 우석이가 졸업을 하고, 재성이가 새로 대학원에 들어왔다. 재성이는 들어오자마자 전체 시스템을 금세 파악하고, 빠진 구석을 채워나갔다. 덕분에 더 탄탄한 실험 결과를 보일 수 있게 되었다.
그렇게 채워 넣은 것들 중 한 가지 구석은 또 우연한 기회에 찾아왔다. 심사가 진행되고 있던 2023년 4월 어느 날, 학교에서 Wasm (WebAssembly) 실행기 검증에 관한 초청강연이 있다고 해서 학생들을 이끌고 가보았다. 맨 앞자리에 앉아서 가만히 발표를 듣다보니 TurboTV도 Wasm과 연결할 구석이 있을 것 같았다. 발표 내내 잡힐듯 말듯 머리가 근질거리다가, 끝날 때 쯤 재미난 생각이 하나 떠올랐다.
- LLVM에는 LLVM 비트코드를 Wasm으로 번역하는 뒷단이 있다.
- TurboFan에는 Wasm을 TurboFan IR (TurboFan 이 내부적으로 사용하는 중간 언어)로 번역하는 앞단이 있다.
- 이준영 박사가 만든 Alive2를 이용하면 LLVM 코드의 의미를 논리식으로 바꿀 수 있다.
- 우리 TurboTV를 이용하면 TurboFan IR 의 의미를 논리식으로 바꿀 수 있다.
- 이 두 논리식이 동치인지를 검사하면, LLVM 비트코드 -> Wasm -> TurboFan IR 로 이어지는 코드 변환이 올바른지 검사할 수 있지 않을까?
강연을 듣고 오는 길에 학생들에게 이와 같은 이른바 “교차언어 번역검산” 아이디어를 구현해보자고 제안했다. 그 일은 주로 재성이가 맡았는데, 들어온지 몇 달되지 않았음에도 놀라운 성과를 보여주었다. 순식간에 초기 버전을 완성하고 꾸준히 성능을 끌어올렸다. 그리고는 두 달 쯤 후, 예상했던대로 LLVM의 뒷단에서 Wasm 을 잘못 만들어내는 버그를 발견했다.
그 이후부터는 모든 것이 일사천리로 진행되었다. 몇 달동안 논문을 탄탄하게 보강하여 ICSE 2024에 제출하였고 좋은 평가를 받으며 채택되었다. 가장 신경쓴 일은 설명을 간명하게 하는 것이었다. 우리의 시스템은 복잡하고 실험한 것은 많았지만, ICSE는 분량을 10장 밖에 허용하지 않았다. 그래서 글과 그림을 정말 옥구슬처럼 군더더기 없이 갈고 닦아야 했다. 이러한 노력을 알아준 한 심사위원은 아래와 같은 평을 남겼다. 이제껏 받은 심사평 중 가장 자랑스러운 축에 속한다.
It is impressive how much material has been crammed into 10 pages while still being highly readable. – Reviewer C
이 연구 과정에서는 유난히 좋은 일이 많았다. Chrome의 심각한 버그를 찾아서 상금을 받기도 하고, 이 연구로 승완이는 학교에서 우수 석사학위 논문상을 받았으며, 우리는 후속 연구를 제안하여 아마존 연구상을 받고 거하게 회식을 즐겼다. 그리고 2024년 4월 재성이가 ICSE에서 멋지게 발표하면서 TurboTV의 첫번째 장면이 일단락 되었다. 특히, 재성이는 석사 3학기차에 ICSE에서 발표를 하는 영광을 얻었다. 처음 참가하는 해외 학회라 보통 일이 아니었을텐데, 피나는 연습으로 멋지게 해 내었다.
이 연구를 하면서 인연의 중요성을 다시 한번 크게 깨닫는다. 내 주변 사람이 얼마나 내 인생의 궤적을 바꾸는지, 잠시 스친 우연이 얼마나 큰 인연으로 다가오는지. TurboTV의 대상이었던 TurboFan은 물론이고, 컴파일러 오류 검사 시스템 연구는 지금껏 내 관심사 밖의 일이었다. 3년전만 해도 이런 주제로 발표를 하고 학생들과 함께 상까지 받을 것이라곤 전혀 예상치 못했다. 우연이 맺어준 학생들과 동료들의 덕이다.
우리 연구자들이 열심히 글을 쓰고 발표를 하는 것은 바로 이런 인연을 맺기 위함일 것이다. 오랜기간 우리의 노력으로 잉태한 열매가 널리널리 퍼져 새로운 인연으로 돌아오기를 바라는 마음. 식물의 열매가 달고 화려한 것은 결국 씨를 널리 퍼트리기 위함이 아니던가. 방구석에 혼자 앉아 키보드만 두드리는 꽃이라면 홀로 외로이 시들기만 할 뿐. 그러기에 오늘도 우리는 간절히 바라면서 글을 쓴다. 이 열매가 널리 퍼져가기를, 그리하여 우연히 이를 맛본 누군가에게 큰 인연이 되기를, 그리고 언젠가 또 다른 형태로 나에게 멋진 우연으로 다가 오기를.