김현수 학생 인터뷰

Posted by

1) 간략한 자기소개 부탁드립니다.

저는 카이스트 전산학부 (수리과학과 복수전공)를 졸업하고 20년도 가을에 카이스트 정보보호대학원에 진학하였습니다. 현재 석사 졸업을 앞두고, 퓨리오사 AI 라는 AI 시스템 반도체 스타트업에 취업 예정입니다.

2) 차세대 소프트웨어 오류 검출 시스템에 대한 연구로 최우수 국제 학술대회에서 최우수 연구 기록물상 (Best Artifact Award) 받았다고 들었습니다. 연구하신 시스템 수상하신 상에 대해 간략히 소개 부탁드립니다.

연구 기록물 (artifact)는 연구 논문을 제외한 연구의 결과물입니다. 제가 하는 연구는 전산 분야이기 때문에 기록물이라고 하면 연구를 위해 개발한 소프트웨어의 소스코드, 데이터 세트, 또는 소프트웨어를 사용하기 위한 매뉴얼 등이 있습니다. 최근 학회의 추세는 연구 논문을 제출할 때 단순히 논문만 내는 것이 아닌, 해당 연구를 하면서 자연스럽게 만들어진 기록물도 같이 받고 있습니다. 이는 연구 기록물이 해당 연구를 활용하려는 다른 연구자들에게 큰 도움이 되기 때문입니다. 따라서 학회에서도 연구 논문과 함께 제출받은 기록물의 우수성도 평가하고 있습니다. 소프트웨어의 경우 코드의 퀄리티까지는 아니더라도 해당 소프트웨어가 정상적으로 동작하는지 여부, 문서화의 정도 (처음 보는 사람이 얼마나 잘 재현할 수 있는 지 등) 등을 평가하고 있습니다. 이러한 관점에서 Best Artifact Award는 학회에 논문이 합격한 연구자 중 중 가장 우수한 품질의 연구 기록물을 제출한 연구자에게 수여되는 상입니다.

제가 이번에 소프트웨어 분야 국제 최우수 학회인 ICSE 2022 (The 44th ACM/IEEE International Conference on Software Engineering)에서 Best Artifact Award를 받은 논문은 Learning Probabilistic Models for Static Analysis Alarms로 소프트웨어 정적분석 시스템에 대한 연구입니다. 소프트웨어 정적 분석은 소프트웨어를 실행하지 않고 소스코드 수준에서 소프트웨어의 버그를 찾는 기술입니다. 소프트웨어를 실행하지 않고 분석하면 자연스럽게 과해석 (overestimate)하게 됩니다. 즉 소스 코드상의 오류가 실제 버그가 아닌데도 버그라고 판단 (오탐)하는 경우가 많습니다. 정적분석은 버그가 존재할 경우 무조건 잡아내기 때문에 안전하게 소프트웨어를 분석할 수 있는 방법이지만 오탐률이 높을 경우 개발자에게 너무 많은 거짓 알람 (false alarm)을 보내서 디버깅 과정에서 업무 효율을 크게 떨어뜨립니다. 따라서 정적분석에서 오탐률을 줄이는 것은 매우 중요한 문제입니다.

이러한 문제를 해결하기 위해 나온 것이 알람 랭킹 기반 시스템입니다. 이는 소스코드 내에서 버그로 의심되는 지점을 집합 형태로 보여주는데, 기본적으로 랭킹 시스템이기 때문에 우선순위에 따라 의심 지점들을 정렬해서 보여줍니다. 기존 랭킹 시스템은 데이터 흐름만을 사용해 버그 의심 지점을 탐지하다 보니 오탐인 버그가 실제 버그와 데이터 흐름이 혼합되어 있으면 이것이 실제 버그인지 오탐인지 구분을 잘하지 못했습니다. 저는 학습 가능한 확률 모델을 사용해서 이 문제를 해결했습니다. 기존에 사용되던 데이터 흐름 기반의 간단한 확률 모델이 아닌, 데이터 흐름과 다양한 메타 정보를 종합하여 사용하는 복잡한 모델을 사용했고 정적분석의 오탐률을 획기적으로 줄일 수 있었습니다. 이 기술은 현업 개발자들이 사용하고 있는 대부분의 정적분석 도구에 바로 적용하여 오탐률을 줄이는 데 활용할 수 있습니다.

3) 해당 연구 주제를 선택하신 계기는 무엇인가요?

학부 때 우연한 계기로 허기홍 교수님 연구실에서 학부생 인턴을 했습니다. 이때 처음 참여한 프로젝트가 바로 Learning Probabilistic Models for Static Analysis Alarms 논문의 초기 버전이었습니다. 학교에서 수업만 듣다가 실제로 큰 프로젝트에 참여하게 되면서 많은 것을 배우게 되었고, 소프트웨어 분석 분야가 정말 흥미롭게 느껴졌고 이 분야에 대해서 더 깊게 공부하고 싶다고 느껴 대학원에 지원하게 되었습니다. 대학원 입학 후에도 허기홍 교수님 연구실에서 계속 해당 프로젝트를 수행했습니다.

해당 프로젝트의 연구 주제는 거창하게 출발했다기보단 소프트웨어 공학 분야의 문제를 머신러닝 기술을 접목해서 해결해보자는 단순한 아이디어에서 출발했습니다. 머신러닝 기술은 일반적으로 패턴화된 문제를 상당히 잘 다루는 기술이기 때문에, 먼저 기존 랭킹 시스템을 계속 보면서 문제점을 찾아내고 이들의 공통적인 패턴을 찾는 데 집중했습니다. 허기홍 교수님께서 항상 말씀하시는 것처럼 사람이 못하면 기계도 못한다는 것을 항상 생각하면서 문제를 분석하고 정형화된 해결 방법을 모색했습니다. 매우 시간이 오래 걸리고 또 더디게 진행되는 작업이어서 처음엔 힘들었지만, 약 한 달 정도 시간이 흐른 뒤에는 랭킹 시스템의 고질적인 문제점과 패턴화된 해결방안을 찾을 수 있었습니다. 이후에는 찾은 내용을 바탕으로 시스템을 개발하고 그것을 테스트한 뒤 논문을 작성하는 일반적인 수순을 밟았습니다. 저는 논문이 한 번 작성되는 끝나는 줄 알고 있었는데, 한 번에 붙는 경우보다 학회에서 여러 번 떨어지는 것이 부지기수이며 학회의 리뷰를 바탕으로 논문의 퀄리티를 점진적으로 향상해야 한다는 것을 배웠습니다. 리뷰를 바탕으로 여러 번의 수정과 추가 실험을 통해 마침내 올해 ICSE 2022에 논문을 붙일 수 있었습니다.

4) 이처럼 완성도 높은 시스템을 연구하는 것은 쉽지 않았을 텐데 연구를 진행하면서 어려웠던 점이 있나요?

처음 대학원에 들어와서 했던 연구인 만큼, 연구에 대해서 잘 몰랐던 점과 연구와 학업의 적절한 시간 분배가 가장 어려웠습니다. 특히 시험시간이라도 겹쳐버리면 정말 도중에 포기해버리고 싶은 생각이 많이 들었습니다. 기억에 남는 일화는 학교 시험 기간에 연구 논문의 시스템을 구현하고 있었는데, 이때 구현하던 시스템이 어렵기도 했고 시험공부도 틈틈이 하면서 하니까 진도가 잘 나가지 않았습니다. 한 1~2주 정도 진행이 안 되는 상황에서 교수님께서도 답답하셨는지 서둘러서 마무리하라고 계속 말씀하셨습니다. 급한 마음에 일단 밤을 새우며 실험을 위한 프로그램을 작성했습니다. 프로그램이 완성되고 너무 졸린 나머지 실행만 시키고 그대로 잠이 들었는데, 아침에 일어나보니 프로그램에 버그가 있어 실험이 제대로 진행되지 않고 종료되어 버린 절망적인 상황이 벌어져 있었습니다. 크게 혼날 것을 각오하고 이 일을 교수님께 말씀드리자 교수님께서는 혼내시기보다는 같이 해결해보자고 오피스로 나오라고 하셨습니다. 주말 내내 교수님 오피스에서 교수님이랑 같이 코딩하고 실험하며 오류를 잡았던 것은 평소에는 생각해본 적도 없는 신선한 경험이었고, 이 경험을 통해 연구란 것을 이렇게 하는 거구나, 프로그램은 이렇게 작성해야 하는 것이구나 등 많은 것을 배울 수 있었고, 교수님의 실력에 다시 한번 감탄할 수 있었습니다.

 또 다른 일화는 논문에 대한 기록물을 제출하는 과정에서 있었습니다. 제가 작성한 프로그램에 대해서는 완벽하게 기록물을 준비했지만, 다른 기관의 연구자가 구현했던 모듈은 정상적으로 동작하지도 않았고 이에 대한 기록물도 전혀 없었습니다. 아무런 문서도 없이 다른 사람이 작성한 코드의 버그를 수정하고 재현하는 것이 너무 힘들었습니다. 프로그램에 사용한 함수나 자료구조에 대한 설명 또는 프로그램의 입/출력이 무엇인지에 대한 내용만이라도 문서화가 되었다면 작업이 훨씬 쉬웠을 텐데 눈앞이 깜깜했습니다. 이때 몸소 프로그램의 문서화가 얼마나 중요한지 또 연구 기록물의 관리가 해당 연구를 활용하려는 다른 연구자에게 얼마나 도움이 되는지 느낄 수 있었습니다.

5) 앞으로의 포부는 무엇인가요?

대학원에 와서 연구라는 것을 처음 제대로 접해봤을 뿐 아직 연구가 무엇인지 제대로 알지 못합니다. 다만 저는 이론적인 연구보다는 이번에 했던 연구처럼 제가 연구한 내용이 곧바로 산업계에 바로 활용될 수 있는 실용적인 연구를 하고 싶습니다. 실용적인 연구를 하려면 연구 능력도 중요하지만, 무엇보다 실제 산업계에서 어떤 것이 중요한 문제인지 정확하게 식별할 수 있어야 한다고 생각합니다. 따라서 우선은 석사를 졸업하고 평소 관심 있던 회사에 소프트웨어 개발자로 취직하여 산업계에서 실제 쓰이는 기술들, 또 그러한 기술들의 문제점들을 제 눈으로 보고 직접 경험하면서 실전 경험을 쌓고 싶습니다. 풍부한 경험을 갖춘 뒤 다시 학계로 돌아와서 허기홍 교수님처럼 실용적인 연구를 하는 연구자가 되고 싶습니다.

 

Share on Social Media

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다