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 협업 개발 경험의 축적임
-
Homepage
-
개발자
- 8년의 갈망, AI로 3개월 만에 구축한 SQLite 개발 도구