Git은 메신저다
지난 글에서 git을 “보험”으로 소개했다. 이 글에서는 한 단계 더 나아간다.
Git은 보험이기도 하지만, 더 본질적으로는 메신저이다.
코드를 노트북에만 두면 아무도 그 코드를 읽지 않는다. 한 명의 머릿속에서 시작해서 한 명의 머릿속에서 끝난다. 그러나 GitHub에 push되는 순간 그 코드는 메시지가 된다. 다른 사람이 읽고, 비판하고, 인용하고, fork해서 발전시킬 수 있는 메시지.
대학원생에게 이건 단순한 협업 도구의 차원이 아니다. 연구의 영향력 자체와 직결되는 사안이다.
코드 공개가 빠진 연구는 사실상 죽은 연구다
조금 과격한 표현이지만, 2020년대 후반 robotics/AI 분야에서 이 명제는 점점 사실에 가까워지고 있다.
1. 재현성 위기 (reproducibility crisis)
논문에 적힌 수식과 알고리즘만으로 결과가 똑같이 재현되는 경우는 거의 없다.
- 데이터 전처리의 미묘한 차이
- 하이퍼파라미터의 default 값
- 라이브러리 버전
- GPU/CUDA 버전
- 학습 시 random seed
이 모든 디테일이 결과를 좌우하는데 논문에는 다 적히지 않는다. 그래서 같은 알고리즘이라도 코드가 공개된 baseline이 사실상의 reference로 자리 잡는다. 코드가 없는 알고리즘은 후속 연구자가 “쓰기 어렵다”는 이유로 자연스레 제외된다.
2. 인용은 코드를 따라간다
본인의 경험상 명확하다. GitHub에 코드를 올려두고 README에 사용법을 정성스럽게 정리하면, 그 분야 후속 연구들이 baseline으로 채택하기 시작한다. Patchwork++는 KITTI에서 ground segmentation을 쓰려는 연구의 거의 default가 되었고, KISS-Matcher도 비슷한 흐름이다. 공통점은 단순했다: 한 줄로 설치되고, 한 줄로 돌아가게 만들었다는 것.
코드가 한 줄로 돌아간다는 사실 그 자체가 진입 장벽을 크게 낮춘다. 일단 시도해본 사람이 인용한다. 논문 PDF는 읽히고 그것으로 끝나지만, 코드는 다른 사람의 손과 머리 안으로 들어간다.
3. 학회/저널 분위기 변화
CVPR, ICRA, RSS 같은 주요 학회는 이미 reproducibility checklist를 도입했고 점점 strict해지는 추세이다. RA-L도 reproducibility statement를 권장한다. “코드를 공개하지 않은 논문이 손해를 보는 시대”가 이미 시작됐다.
본인이 git/GitHub을 통해 얻은 것
조금 사적인 이야기를 잠깐 풀자.
박사 과정 초반의 첫 open-source release는 부끄러울 정도로 README가 허술했다. “그래도 안 올리는 것보다는 낫겠지”라는 마음으로 일단 push했다. 그게 박사 과정의 가장 큰 변곡점 중 하나가 됐다.
- 처음 보는 사람들이 issue를 달아주고, 버그를 잡아주고, PR을 보내줬다.
- 학회에서 처음 만난 분들이 “아, 그 코드 쓰는 사람이세요?”라고 인사해주셨다.
- 그 코드를 baseline으로 쓴 후속 논문들이 쌓여 인용 수가 빠르게 늘었다.
논문 한 편을 써서 PDF만 archive에 던져두는 것과는 비교가 안 되는 영향력이었다. 코드가 메신저였다. 필자가 자고 있을 때도 그 코드는 다른 대륙의 누군가의 GPU 위에서 돌고 있었다.
같은 흐름에서 Patchwork++, KISS-Matcher, ERASOR도 코드 공개와 함께 살아 움직이는 연구가 되었다. TEASER++와 Hydra에서는 co-maintainer로서 다른 사람의 contribution을 받는 경험까지 할 수 있었다.
이런 경험들이 누적되면서 RA-L Best Paper Award (2022), RSS Pioneers (2024) 같은 평가도 따라왔다고 본인은 생각한다. 물론 논문 자체의 기여가 가장 본질적이지만, 그 기여가 사람들의 손에 닿게 만든 건 GitHub이었다.
그렇다고 무작정 push하면 절대 안 된다
여기서 매우 중요한 caveat이 있다. 이 글이 “모든 연구실 코드를 공개하라”고 말하는 게 절대 아니다.
대학원생이 다루는 코드는 거의 항상 다음 중 하나 이상에 해당한다.
- 지도교수가 책임자인 과제의 산출물
- 산학협력/기업 과제의 일부 (NDA가 걸려 있을 수 있음)
- 특허 출원이 예정된 알고리즘
- 라이선스 제약이 있는 데이터셋을 사용
- 공동연구자(다른 학생, 협력 기관)의 기여가 섞여 있음
이 중 어느 하나라도 걸리면, 코드 공개는 본인 혼자 결정할 수 있는 사안이 아니다. 반드시 지도교수와 사전에 합의해야 한다.
이 시리즈의 입장:
- 공개 여부의 결정권은 본인이 아니라 지도교수에게 있다.
- 그러나 일단 공개가 결정된 코드라면, 메신저로서 잘 만들어 보내자.
지도교수가 공개에 신중한 데에는 종종 학생이 모르는 합리적 사정이 있다. “보수적이어서”가 아니라 “특허 검토 중이어서”일 수도 있고, “다음 후속 연구의 lead time을 확보하기 위해서”일 수도 있다. 이 글의 메시지를 빌미로 지도교수와 갈등을 만들지는 말자.
그래도 가능한 절충안
코드 전체 공개가 어렵더라도 다음과 같은 중간 단계를 제안해볼 수는 있다.
- demo video, 학회 발표 슬라이드만 공개 (코드는 비공개 유지)
- paper의 figure/table만 재현하는 minimal 코드만 공개
- interface는 공개, 핵심 알고리즘 구현은 비공개
- embargo 기간을 두고 일정 시점 이후 공개 (예: 다음 후속 논문 게재 후)
이런 절충안을 지도교수와 함께 논의해보자. “전부 닫느냐 vs 전부 여느냐”의 이분법보다 협상의 여지가 훨씬 넓다.
정리
- Git은 메신저이다. 노트북 안에만 있는 코드는 누구에게도 닿지 않는다.
- 코드 공개가 동반된 연구가 인용되고, 사람들의 손에 들어가고, 후속 연구의 baseline이 된다.
- 그러나 공개 여부는 본인 단독으로 결정할 일이 아니다. 반드시 지도교수와 합의하라.
- 합의된 코드라면, 다음 글들에서 다룰 “잘 자른 patch”와 “좋은 README”로 메시지의 품질을 높이자.
다음 글에서는 본격적으로 git을 잘 쓰기 위한 첫 번째 실전 사고법, patch적으로 사고하기를 다룬다.
대학원생을 위한 Git 시리즈입니다.