8년의 갈망, AI로 3개월 만에 구축한 SQLite 개발 도구

6 hours ago 1
  • 오랫동안 부족했던 SQLite용 고품질 개발 도구를 AI의 도움으로 단기간에 완성
  • 공식 문법 명세 부재와 복잡한 C 코드베이스로 인해 파서 구축이 가장 큰 난관이었음
  • Claude Code 등 AI 코딩 에이전트를 활용해 초기 구현을 빠르게 진행했으나, 스파게티 코드 문제로 Rust 기반 재작성을 단행
  • AI는 코드 생성·리팩터링·학습 보조·UX 개선에 큰 효율을 보였지만, 설계 지연·코드 단절·의존성 중독 같은 부작용도 발생
  • 결론적으로 AI는 구현 속도를 높이는 도구일 뿐, 설계와 소프트웨어의 방향성은 인간이 책임져야 함

SQLite 개발 도구를 AI로 구축한 3개월의 기록

  • SQLite용 고품질 개발 도구를 오랫동안 원했으나, 기존 오픈소스 도구들은 신뢰성·속도·유연성 면에서 부족했음
    • PerfettoSQL 유지보수 중 포매터, 린터, 에디터 확장 등 기능 수요가 있었지만 적합한 도구가 없었음
    • 개인 프로젝트로 새 도구를 만들고자 했으나, 난이도와 반복 작업의 부담으로 수년간 미뤄짐

프로젝트의 난점

  • SQLite는 공식 문법 명세나 안정된 파서 API가 없음
    • 내부적으로 파스 트리를 생성하지 않아, 소스코드에서 직접 파서 로직을 추출해야 했음
    • 400개 이상의 문법 규칙을 일일이 매핑해야 하며, 테스트 작성과 디버깅이 매우 반복적이고 피로한 작업
  • SQLite의 C 코드베이스는 복잡하고 밀도가 높아 이해가 어려움
    • 가상 테이블 API와 구현을 파악하는 데만 며칠이 소요될 정도로 구조가 난해함

AI와 함께한 개발 과정

  • 2025년 말부터 Claude Code 등 AI 코딩 에이전트를 본격 활용
    • 초기에는 AI에게 대부분의 설계·구현을 위임해 “vibe-coding” 방식으로 진행
    • 결과물은 동작했지만 코드베이스가 스파게티 형태로 복잡해 유지 불가능한 수준이 됨
  • 이후 전체를 Rust로 재작성하며 구조를 재정립
    • C 대신 Rust를 사용해 상위 구성요소(검증기, 언어 서버 등) 개발 용이
    • AI를 “자동완성 강화 도구”로 제한하고, 설계·검토·테스트를 직접 주도
    • 린팅·검증·테스트 자동화 등 AI 산출물 검증용 스캐폴딩 구축

AI가 가능하게 한 것들

  • 관성 극복

    • AI가 구체적 문제 단위로 작업을 쪼개 시작을 쉽게 만들어줌
    • “SQLite 파싱을 이해해야 한다” 대신 “AI가 제안한 접근을 검토한다”로 전환되어 실행 속도 향상
  • 코드 생성 및 리팩터링 속도

    • 명확한 요구사항이 있을 때 AI는 표준적이고 일관된 코드를 빠르게 작성
    • 비표준적 설계(파서 구조 등)에서는 오히려 방해가 되어 직접 작성 필요
    • 대규모 코드 생성 후 지속적 리팩터링이 필수이며, 이를 통해 품질 유지
  • 학습 보조자 역할

    • AI가 Wadler-Lindig 포매팅 알고리듬 등 새로운 개념을 실시간으로 설명
    • Rust, VS Code 확장 등 익숙하지 않은 영역에서도 빠른 진입 가능
    • 프로젝트 맥락을 잃었을 때 “이 컴포넌트 설명해줘” 같은 질의로 즉시 맥락 복원
  • 완성도 향상

    • 에디터 확장, Python 바인딩, WASM 플레이그라운드, 문서 사이트 등 부가 기능 개발 비용을 낮춤
    • 구현 부담이 줄어 UX 개선에 집중 가능, 오류 메시지·CLI 설계 등 사용자 경험 강화

AI 사용의 부작용

  • 중독성

    • “한 번 더 프롬프트”를 반복하는 슬롯머신형 보상 구조
    • 피로할수록 프롬프트 품질이 떨어지고, 결과가 나빠져 악순환 발생
  • 코드베이스와의 단절

    • AI가 생성한 코드가 많아질수록 세부 구조에 대한 감각 상실
    • 맥락을 잃으면 AI와의 대화도 길어지고 비효율적이 됨
    • 해결책으로, 생성 직후 코드를 직접 읽고 “내가 다르게 썼을 부분”을 점검하는 습관 도입
  • 설계 지연과 부식

    • 리팩터링이 쉬워 핵심 설계 결정을 미루는 경향 발생
    • 테스트가 많아도 근본적 설계 오류를 가리기 어려움, 결국 전체 재작성 필요
  • 시간 감각 부재

    • AI는 코드의 시간적 맥락이나 진화 과정을 이해하지 못함
    • 과거 실수를 반복하거나, 이미 해결된 문제를 다시 탐색하는 비효율 발생
    • 문서화로 보완 가능하지만, 설계 의도까지 완전하게 기록하기는 어려움

AI 활용의 상대성

  • 깊이 이해한 영역에서는 AI가 탁월, 빠른 검토와 반복 가능
    • 예: 파서 규칙 생성은 명확한 정답이 있어 효율적
  • 부분적으로 아는 영역에서는 학습 도구로 유용하지만 지속적 주의 필요
    • 예: 포매터 알고리듬 학습
  • 무엇을 만들지 모르는 단계에서는 오히려 해로움
    • 예: 아키텍처 설계 단계에서 비생산적 루프 발생
  • 검증 가능한 문제(컴파일·테스트 통과)는 AI가 강하지만, 디자인·API 품질처럼 정답이 없는 문제에서는 취약

결론

  • 8년간 구상했던 SQLite 도구를 3개월 만에 실현할 수 있었던 것은 AI 덕분
    • 그러나 과정은 단순한 성공담이 아니라, AI 의존의 한계와 대가를 동반
  • AI는 구현의 배속 장치이지만, 설계의 대체물은 아님
    • 기술적 질문에는 정확히 답하지만, 역사·취향·사용자 감각은 결여
  • 진정한 교훈은, AI를 통해 더 빠르게 벽에 부딪히더라도 인간이 설계의 방향과 ‘소프트웨어의 영혼’을 책임져야 한다는 점
  • 앞으로 필요한 것은 실제 사용자와 유지보수를 견디는 수준의 프로젝트 사례 공유
    • 단순한 실험이 아닌, 현실적·지속 가능한 AI 협업 개발 경험의 축적임
Read Entire Article