nbdev를 상용화하지 않기로 결정한 이유.

몇몇 지인들이 왜 nbdev를 상용화하지 않기로 했는지 물어왔습니다. 특히 전업으로 매달릴 만큼 많은 노력을 쏟은 프로젝트인데 말이죠. 그래서 짧게나마 그 이유를 정리해 보려 합니다.
nbdev는 문학적(literate) 프로그래밍과 탐색적(exploratory) 프로그래밍을 지향하는 혁신적인 Python 소프트웨어 개발 프레임워크입니다. 2020년부터 2023년까지 Jeremy Howard, 그리고 이후 합류한 Wasim Lorgat와 함께 이 프로젝트를 진행했습니다. 뛰어난 소프트웨어 엔지니어들과 협업하며 개발자 도구와 탐색적 프로그래밍의 가능성을 탐구할 수 있었던 건 큰 행운이자 즐거운 경험이었습니다. 많은 분들이 좋아해 주신 도구를 만들었을 뿐 아니라, 저 자신도 개인 프로젝트와 업무에서 nbdev를 즐겨 사용했습니다.
제품 리서치 과정에서 다양한 배경의 개발자들을 인터뷰하며 이들의 고충과 요구사항을 파악했습니다. 인터뷰한 모든 개발자가 공통적으로 겪는 핵심 과제가 하나 있었습니다. 바로 다른 엔지니어들에게 nbdev 사용을 설득하기가 매우 어렵다는 것이었습니다.
도입을 가로막는 가장 큰 요인은 다음과 같았습니다:
저는 이러한 문제들을 해결하는 것이 곧 nbdev 상용화의 기회가 될 수 있다고 봤습니다.
Jeremy, Wasim과 저는 결국 "개발자를 위한 WordPress"라는 아이디어에 합의했습니다. 별도의 설치 없이 nbdev 프로젝트를 만들고 공유할 수 있는 호스팅 사이트를 구축하자는 구상이었습니다. 탐색과 공유를 장려하는 플랫폼에서 프로젝트를 호스팅하고 싶은 사람들을 타깃으로 삼되, Glitch처럼 탐색적이면서도 Wordpress만큼 쓰기 쉽고 실용적인 서비스를 목표로 했습니다.
호스팅 도구를 논의하기 시작한 무렵, 머신러닝 세계에 거대한 지각변동이 일어났습니다. 생성형 AI, 특히 Stable Diffusion의 폭발적인 등장이었죠. nbdev를 만든 조직인 fast.ai 역시 방향을 전환하고 있었습니다. fast.ai의 핵심 사명은 딥러닝을 최대한 많은 사람에게 접근 가능하게 만드는 것이었고, 생성형 AI는 무시하기엔 너무 중요한 흐름이었습니다. 이에 따라 Jeremy는 Stable Diffusion 강좌에 역량을 집중하게 되었습니다.
이 피벗으로 인해 nbdev, 생성형 AI 연구, 수익화라는 서로 다른 우선순위 사이에서 상당한 혼란이 있었습니다. 결국 fast.ai 관련 전반에 대한 컨설팅 서비스를 fast.ai partners 형태로 제공하기로 했습니다. 이를 통해 재정적으로 자립하면서도 생성형 AI와 연구를 포함한 fast.ai의 더 큰 사명을 함께 추구할 수 있었습니다. 하지만 결국 너무 많은 영역에 분산된 관심이 비생산적이라는 결론에 이르렀고1, 컨설팅을 제외한 모든 것에서 손을 떼고 다시 기반을 다지기로 했습니다.
얼마 지나지 않아 ChatGPT가 등장했고, 텍스트-이미지 모델과는 비교할 수 없을 정도로 큰 변화를 머신러닝 분야에 가져왔습니다. 곧 모든 클라이언트가 언어 모델에 관심을 보이기 시작했고, 저는 자연스럽게 LLM 운영화(operationalization)에 전념하게 되었습니다(20년 넘게 머신러닝 분야에서 쌓아 온 전문성이기도 합니다). 더불어 LLM은 소프트웨어 개발 방식 자체를 근본적으로 바꿔 놓았는데, 특히 nbdev가 지원하고자 했던 유형의 개발이 그러했습니다2. 이러한 요인들과 앞서 언급한 문제들을 종합해 보면, nbdev에서 한 발 물러나 다른 일에 집중할 적절한 시점이라는 판단이 섰습니다.
이 과정에서 몇 가지 중요한 교훈을 얻었습니다:
nbdev와 완전히 인연이 끝난 것 같지는 않습니다. 적절한 시기가 오면 이 프로젝트나 관련 아이디어를 다시 꺼내 볼 수도 있습니다. Posit이 문학적 프로그래밍과 탐색적 프로그래밍 분야에서 진행하고 있는 작업이 흥미로운데, nbdev에서 탐구했던 아이디어들이 많이 반영되어 있습니다. Wasim도 Posit 팀에 합류했으니, 어떤 결과물이 나올지 기대가 큽니다.7
다음에 어떤 일을 하고 있는지는 다른 글에서 풀어보겠습니다 😊.
이 과정에서 여러 차례 번아웃을 겪었는데, 당시에는 원인을 알지 못했습니다. 돌이켜 보면 너무 많은 것에 동시에 집중하려 했던 것이 근본 원인이었습니다.↩︎
LLM을 활용한 코딩, 특히 노트북에서의 코딩이 어떤 모습일 수 있는지에 대해서는 이 데모를 참고하세요.↩︎
호스팅 솔루션의 문제는, 정작 저 자신이 사용하고 싶지 않은 서비스라는 점이었습니다. GitHub/GitLab 이외의 곳에 코드를 호스팅하는 모습을 도저히 상상할 수 없었습니다.↩︎
공유된 확신이 없으면 구성원을 하나로 묶어 주는 접착제가 사라지고, 결국 서로 멀어지게 됩니다.↩︎
이에 대해서는 향후 글에서 더 자세히 다루겠습니다.↩︎
항상 그런 것은 아니지만, 그룹 내 역학 관계에 따라 충분히 그럴 수 있다고 생각합니다.↩︎
이전에 Posit 및 JJ Allaire와 협력하여 Quarto 위에 nbdev를 구축한 바 있습니다. 현재 Posit의 제품 및 전략에 대해 자문하고 있으며, 아직 공개할 수 없는 추가 프로젝트들이 로드맵에 있습니다.↩︎