테스트 코드가 새로운 해자(Moat)가 되는 시대
AI 시대에 진짜 자산은 코드가 아니라 테스트 스위트다
Cloudflare가 1주일 만에 Vite 기반의 Next.js 호환 런타임을 만들었다. 어떻게? Vercel이 수년간 쌓아온 Next.js 문서와 테스트 스위트를 AI에 던져넣었다.
코드를 복사한 게 아니다. 사양(Spec)을 학습한 거다. 그리고 그 사양은 테스트 코드 안에 들어있었다.
성공의 역설
프로젝트가 커질수록 하위 호환성과 거대한 코드베이스라는 짐을 진다. Theseus의 배처럼 부품을 갈아끼우면서도 이름을 유지해야 한다.
반면 경쟁자는 깨끗한 상태에서 시작한다. API 스펙과 테스트만 가져와서 핵심 가치만 추출한 더 가볍고 현대적인 버전을 만든다. 레거시 부담이 0이다.
이게 AI 시대 오픈소스의 근본 문제다.
SQLite의 선견지명
SQLite는 코드는 완전 공개다. 그런데 테스트는 비공개다. 소스 코드의 590배에 달하는 9,200만 라인의 테스트 스위트가 있다.
100% 분기 커버리지. 수백만 건의 테스트 케이스. 10억 개가 넘는 변이(mutation) 테스트. 이게 SQLite가 오픈소스이면서도 상업적 방어력을 갖춘 이유다.
누가 SQLite를 포크해서 더 빠른 버전을 만들 수는 있다. 하지만 SQLite가 30년간 발견한 모든 코너 케이스에 대한 보증은 못 한다. 비행기 블랙박스가 SQLite를 쓰는 이유다.
테스트가 곧 사양이다
과거에는 코드 자체가 가치였다. 어떻게 동작하는지 알고 싶으면 코드를 읽어야 했고, 그래서 코드를 숨겼다.
지금은 다르다. 동작이 어떠해야 하는지를 정의한 테스트가 더 비싼 자산이다. 코드는 AI가 다시 짠다. 테스트가 정의한 행동을 만족시키기만 하면 된다.
결국 "소프트웨어 계약(Contract)"이 코드보다 비싸졌다. 그리고 그 계약을 가장 정밀하게 표현하는 형식이 테스트다.
그럼 오픈소스는 끝인가
아니다. 다만 전략이 바뀔 거다.
앞으로 상업적 오픈소스 기업들은 이런 질문을 받게 된다. 코드는 공개해도 되지만, 테스트도 공개할 건가?
내 생각에는 SQLite 패턴이 표준이 될 것 같다. 코드는 공개, 테스트는 비공개. "우리 제품을 써보고 싶으면 코드 봐라. 우리 제품을 베끼고 싶으면 테스트는 직접 짜라."
솔로 개발자에게도 의미가 있다
7개 프로젝트를 동시에 굴리는 솔로 개발자라면 더 절실하다. AI로 초기 속도는 미친 듯이 빨라졌지만, 테스트 없이 쌓인 코드는 리팩토링 지옥이 된다.
기능 하나 건드릴 때마다 다른 곳이 터질까 무서워서 손을 못 댄다. 그러다 결국 그 프로젝트는 죽는다.
반면 테스트가 잘 되어있는 프로젝트는 AI가 마음껏 리팩토링한다. 테스트가 통과하는 한, AI는 코드를 다시 써도 된다는 허락을 받은 셈이다.
무엇이 좋은 테스트인가
E2E 테스트가 핵심이다. 단위 테스트는 구현에 묶여있어서 리팩토링하면 깨진다. AI가 새로 짠 코드를 검증하기엔 너무 좁다.
진짜 자산이 되는 건 "이 입력에 이 출력이 나와야 한다"를 명세하는 통합/E2E 테스트다. 사용자 시나리오 단위로 작성된 테스트만이 구현 변경에도 살아남는다.
그리고 한 가지 더. AI는 코드 생성은 잘 하지만 의미 있는 테스트 시나리오를 짜는 건 여전히 사람의 도메인 지식이 필요하다. 엣지 케이스는 사람이 발견한다. AI는 그걸 코드로 옮길 뿐이다.
결론
코드를 공개해도 안전하던 시대는 끝났다. 이제 진짜 보호해야 할 것은 동작 명세, 즉 테스트 코드다.
오픈소스 기업이라면 SQLite 패턴을 검토할 때다. 솔로 개발자라면 테스트부터 짜는 습관을 들일 때다. 회사라면 ADR과 테스트 자산의 보안 등급을 다시 매길 때다.
AI가 코드를 쉽게 복제할수록, 테스트의 가치는 올라간다.
동작 흐름
코드는 더 이상 해자가 아니다 — AI가 문서와 테스트만 학습해서 경쟁 제품을 며칠 만에 만든다
진짜 자산은 사양(Contract)이고, 사양을 가장 정밀하게 표현한 형식이 테스트다
SQLite 패턴 — 코드는 공개, 테스트는 비공개. 590배 큰 테스트 스위트가 상업적 해자
E2E 테스트가 핵심 — 단위 테스트는 구현에 묶여있어 리팩토링하면 깨진다
AI에 마음껏 리팩토링을 시키려면 통과해야 할 테스트가 먼저 있어야 한다