여준호

여준호님의 아티클

여준호

여준호

170초 걸리던 제출이 1초로 줄었습니다. 전세계 바이브코더들의 토큰 5천억 개 트래킹하는 tokscale의 1.1.0 릴리즈

tokscale은 AI 코딩 어시스턴트의 토큰 사용량을 GitHub 잔디처럼 시각화해주는 오픈소스입니다. 출시 이후 GitHub 스타 480개를 넘겼고, 현재까지 유저들이 트래킹한 토큰은 5천억 개를 돌파했습니다.

그런데 어느 날, GitHub Issue에 당황스러운 리포트가 올라왔습니다.

"Submit 버튼을 누르면 거의 3분 가까이 기다려야 해요. 이게 정상인가요?"

output.jpg

170초.

농담이 아니었습니다. 5천억 개의 토큰을 트래킹하는 서비스에서, 데이터 제출에 거의 3분이 걸리고 있었습니다.

문제의 원인을 찾아서

tokscale에서 사용자가 자신의 사용 데이터를 제출하면, 서버는 날짜별로 데이터를 저장합니다. 1년치 데이터를 제출한다면 대략 365개의 날짜 레코드가 데이터베이스에 기록되는 구조입니다.

문제는 이 저장 로직에 있었습니다. 기존 코드는 각 날짜마다 개별적으로 INSERT 또는 UPDATE 쿼리를 실행하고 있었습니다. 332일치 데이터를 제출하면 332번의 쿼리가 순차적으로 실행되는 방식이었죠.

프로덕션 환경에서 문제는 더 커집니다. tokscale의 프로덕션 데이터베이스는 Neon이라는 Serverless Postgres를 사용하고 있었습니다. Serverless 데이터베이스의 특성상 각 쿼리마다 네트워크 왕복 비용이 발생합니다. 연결 풀링이 있더라도 쿼리 하나당 약 500밀리초의 레이턴시가 붙었습니다.

계산은 간단했습니다. 500밀리초 × 332회 = 166초. 거기에 트랜잭션 오버헤드까지 더하면 170초가 나오는 것이었습니다.

해결책은 오픈소스 커뮤니티에서 왔습니다

깃허브에서 @hellosunghyun 님이 Pull Request를 바로 열어주셨습니다.

해결 방법은 명확했습니다. 332개의 개별 쿼리를 2개의 배치 쿼리로 통합하는 것이었습니다.

기존 방식에서는 각 날짜마다 "이 날짜가 이미 존재하는가?"를 확인하고, 존재하면 UPDATE, 존재하지 않으면 INSERT를 실행했습니다. 이 로직 자체는 문제가 없었지만, 실행 방식이 비효율적이었습니다.

새로운 방식에서는 먼저 모든 날짜 데이터를 메모리에서 처리합니다. 어떤 날짜가 새로 추가되어야 하고, 어떤 날짜가 업데이트되어야 하는지를 미리 분류합니다. 그런 다음 새로 추가할 날짜들은 하나의 INSERT 문으로, 업데이트할 날짜들은 하나의 UPDATE 문으로 일괄 처리합니다.

결과는 극적이었습니다. Neon Serverless 환경에서 170초 걸리던 작업이 1초 내외로 줄어들었습니다. 쿼리 수가 332개에서 2개로 줄었으니 당연한 결과이기도 했습니다. 네트워크 왕복 비용이 166배나 절감된 셈입니다.

PR에는 상세한 타이밍 계측 코드까지 포함되어 있어서, 앞으로 어느 단계에서 시간이 소요되는지 모니터링할 수 있게 되었습니다. 단순히 문제를 해결하는 것을 넘어서, 미래의 성능 이슈를 예방할 수 있는 관측 가능성까지 확보한 것입니다.

v1.1.0에 담긴 것들

이번 릴리즈는 성능 개선만 있는 것이 아닙니다. 여러 컨트리뷰터분들의 기여가 함께 담겼습니다.

@cantalupo555 님은 모델명 매칭 로직을 개선해주셨습니다. 기존에는 하드코딩된 모델명만 인식했는데, 이제는 동적으로 prefix와 suffix를 감지해서 다양한 모델 변형을 자동으로 인식할 수 있게 되었습니다.

@Skyline-23 님은 Headless 모드에서의 로그 집계 기능을 추가해주셨습니다. GUI 없는 환경에서 CLI만으로 Codex 와 같은 AI 코딩 에이전트를 쓰시는 분들도 tokscale을 사용할 수 있도록 하는 기능입니다.

그리고 @hellosunghyun 님은 성능 개선 PR 외에도 멀티 계정 Cursor 로그인 기능을 구현해주셨습니다. 여러 Cursor 계정을 사용하는 분들이 각 계정의 사용량을 따로 트래킹할 수 있게 되었습니다.

이번 일을 통해 배운 것들

AI 코딩 에이전트와 바이브 코딩의 함정입니다. 솔직히 말하면 이 코드는 AI 에이전트의 도움을 받아 작성했습니다. 로직 자체는 정확했지만, N+1 문제는 놓쳤습니다. AI가 만든 코드도 결국 사람이 리뷰해야 하고, 특히 성능 관련 패턴은 아직 사람의 경험이 필요한 영역인 것 같습니다.

그리고 결국 이 문제를 찾고 고친 것도 오픈소스 커뮤니티였습니다. 혼자서는 발견하지 못했을 문제를 사용자가 리포트해주었고, 해결책은 컨트리뷰터가 PR로 보내주었습니다. AI가 만든 버그를 사람들이 함께 고친 셈입니다. 메인테이너로서 제가 한 일은 리뷰하고 머지하는 것뿐이었습니다. AI 시대에도 오픈소스 커뮤니티의 집단 지성은 여전히 유효하다는 걸 느꼈습니다.

기여해주신 모든 컨트리뷰터분들께 다시 한번 감사드립니다. 🙏

GitHub 스타 480개는 그냥 숫자가 아니라, 그만큼의 개발자분들이 "이거 괜찮네"라고 인정해주신 거라고 생각합니다. 그 응원 덕분에 계속 만들고, 컨트리뷰터분들도 함께해주시는 것 같아요. 스타 하나하나가 오픈소스를 유지하는 힘이 됩니다.

AI 코딩 어시스턴트를 사용하면서 "나 요즘 토큰 얼마나 쓰고 있지?" 궁금하셨던 분들은 tokscale 을 한번 사용해보세요. GitHub 잔디처럼 여러분의 AI 사용량을 시각화해드립니다. 마음에 드시면 스타도 부탁드립니다!

Screenshot 2026-01-28 at 8.24.06 AM.png뭔가 풍성해진 깃허브 리드미(프로젝트 소개) 화면.

Tokscale

여러 AI 코딩 에이전트의 토큰 사용량을 추적하는 CLI 도구와 글로벌 리더보드

5
2