코딩 에이전트의 등장으로 오픈소스 프로젝트를 둘러싼 ‘기존 코드의 중력’이 약해지고, 성숙한 코드베이스가 제공하던 경쟁 우위가 빠르게 줄어들고 있다는 경험담.
지난주 나는 새로운 코딩 에이전트 몇 가지를 제대로 써보기 시작했다. 조심스럽고 실험적인 방식이 아니라, 정말로 “업무에” — 3일 동안 rqlite에 — 적용해 본 것이다. Claude Code. Copilot CLI. 그동안 내가 소프트웨어를 작성하는 방식에 완전히 통합하지는 못했던 도구들이다.
스타 트렉 에피소드 The Doomsday Machine을 알고 있다면 — 커크가 난파한 함선에 홀로 남은 데커 준장을 발견하는 편 — 내게 오래도록 남아 있는 한 장면이 있다. 커크가 데커에게 승무원들은 어디 있냐고 묻는다. 데커는 그들이 세 번째 행성에 있다고 말한다. 커크는 “세 번째 행성은 없다”고 말한다. 거의 혼수상태처럼 보이는 데커가 말한다.
“그걸 내가 모를 것 같나? 있었지, 하지만 이제는 없어!”
오픈소스 소프트웨어를 둘러싸고 있던 해자(방어선)에 대해 내가 느끼는 감정이 대략 그렇다.
rqlite는 오픈소스 분산 데이터베이스다. 나는 거의 매주 이 코드베이스에서 작업한다. 본업 외에 내가 하는 가장 중요한 프로젝트다. 결국 내가 만들었고, 대부분의 오픈소스 개발자들이 자신이 만든 것에 애정을 갖는 것과 같은 방식으로 나도 이를 아낀다. 돈 때문이 아니다 — 나는 본업이 있다 — 자부심, 가능한 한 좋은 상태로 만들고 싶다는 추진력, 그리고 사람들이 유용하게 써주길 바라는 마음 때문이다. 진지한 오픈소스 프로젝트를 유지보수해 본 사람이라면 내가 무슨 말인지 정확히 알 거라 생각한다.
하지만 무엇을 바꿔야 하는지 아는 것과 실제로 바꾸는 것은 다른 문제다. rqlite에는 기능 추가와 리팩터링 백로그가 길게 쌓여 있었다. 나는 그것들을 모두 꽤 잘 이해하고 있었다. 각 변경이 어떤 모습일지, 대략 얼마나 걸릴지, 왜 중요한지 모두 알고 있었다. 다만 나는 그것들을 하지 않았다. 일이 지루했기 때문이다. 투자할 시간 대비 수익이 정당화되지 않았다. 그래서 그대로 쌓여 있었다.
지난주, 이 도구들과 함께 나는 그 백로그에서 항목들을 하나씩 끌어내기 시작했다. 내가 미뤄오던 기능들 — 코드를 이해하지 못해서가 아니라, 노력 대비 효과가 과하다고 느꼈기 때문인 — 이 갑자기 이전보다 훨씬 적은 시간만으로 끝났다. 수년간 출시하고 싶었던 기능들이 손이 닿는 거리에 들어왔다. 작업이 거의 가벼운 느낌이었다.
그게 첫 번째 깨달음이었다. 나는 항상 하고 싶었지만 “비용이 안 맞는다”고 판단해 접어두었던 일들을 할 수 있게 됐다.
두 번째 깨달음은 그 직후 찾아왔고, 훨씬 덜 유쾌했다.
오랫동안 rqlite의 진짜 강점은 소스 코드가 비밀이라는 데 있지 않았다. MIT 라이선스다. 누구나 읽을 수 있다.
강점은 “이미 존재한다”는 사실이었다.
이미 합의(Consensus)를 처리하고, 이미 SQLite를 내장하고, 이미 프로덕션에서 돌아가는, 작동하는 성숙한 분산 데이터베이스. SQLite 기반 분산 데이터베이스에 새 기능이 필요하다면, 가장 저항이 적은 길은 rqlite에 그 기능을 넣거나, rqlite를 포크하거나, rqlite에 기여하는 것이었다. 코드베이스에는 중력이 있었다. 처음부터 시작한다는 것은 수년치 작업 — 아키텍처, 엣지 케이스, 장애 모드, 얻어낸 교훈 — 를 다시 재현한다는 뜻이었다. 단 하나의 기능을 추가하려고 누구도 그런 일을 하지는 않을 것이다.
그 “중력”이 해자였다. 비밀이 아니라. 특정 설계 아이디어도 물론 중요했지만, 핵심은 그것만이 아니었다. 해자는 작동하는 시스템 안에 응축되어 있는 막대한 누적 투자였다. 그 모든 코드가 이미 작성되어 있고 이미 동작한다는 사실이었다.
이 도구들은 rqlite를 바꾸는 일을 더 쉽게 만들어 주는 데 그치지 않는다. 새로운 무언가를 만드는 일도 더 쉽게 만든다.
새 시스템을 rqlite가 이미 서 있는 수준까지 끌어올리는 비용이 크게 떨어졌다. 0이 된 것은 아니다 — 분산 시스템은 여전히 어렵고, 프로덕션 경험은 여전히 중요하다. 하지만 성숙한 코드베이스와 새 출발 사이의 격차는 예전 같지 않다. 이미 존재하고, 코드가 작성되어 있고, 엣지 케이스가 처리되어 있다는 이점은 1년 전보다 덜 중요해졌다.
그게 나를 불안하게 만들었다. 누군가가 rqlite를 포크해서 기능을 추가할까 봐 걱정한 적은 없었다. 걱정은 누군가가 자신만의 분산 데이터베이스를 만들고, 그 기능을 내가 상상했던 것보다 훨씬 빠르게 추가해 내 작업을 변두리로 밀어낼지 모른다는 것이다. 잘 구조화된 코드베이스가 “이미 존재한다”는 사실 — 그 누적된 작업 — 이 이제는 단순히 덜 중요해졌다.
하지만 이건 양날의 검이다.
다른 사람들에게 장벽을 낮춰주는 동일한 도구들이 내 백로그도 비워주었다. 노력 대비 효과가 맞지 않아 수년간 묵혀두었던 기능들이 이제는 출시되고 있다. rqlite는 오랜만에 훨씬 빠르게 개선되고 있고, 작업은 진심으로 즐겁다.
다만 안락함은 사라졌다. 오픈소스 프로젝트에도 경쟁자가 있고, 그 유지보수자들도 나와 같은 도구를 쓸 수 있다. 사람들이 원하는 기능이 내 목록에 너무 오래 머물면, 누군가가 자기 시스템에서 그 기능을 만들어 출시해 버릴 것이다. 그 압박은 정신을 바짝 차리게 한다.
몇 년 전 나는 오픈소스에서 진짜 가치는 코드가 아니라 그 뒤의 팀이라고 썼고, 그건 여전히 사실이다. 하지만 바뀐 것은, 다른 누군가가 그 격차를 얼마나 빠르게 메울 수 있는지다.
소스 코드는 해자였다. 하지만 이제는 아니다.