🐾 Pet-Pass Dev Blog

바이브 코딩 개발기 · 이슈 #1 📖 약 5분

AI가 크롤링에 집착하다
토큰을 다 써버린 날

#바이브코딩 #데이터파이프라인 #토큰

목차

  1. 단순한 질문에서 시작
  2. AI들이 포털에 도착했다
  3. 결국 어떻게 됐는가
  4. AI가 나쁜 게 아니었다
  5. 바이브 코딩에서 사람의 역할

단순한 질문에서 시작

이 이야기는 아주 단순한 질문에서 시작됐다.

"반려동물 동반 가능한 업소 리스트 가져와줘."

들어보면 쉬울 것 같다. 데이터가 어딘가에 있을 테고, AI가 그걸 가져오면 되지 않나. 실제로 데이터는 있었다. 식품안전나라 공식 포털에 정부가 인증한 반려동물 동반가능 업소 목록이 공개되어 있었다. 문제는 AI들이 그 데이터를 가져오는 방법을 두고 꽤 오랫동안, 꽤 많은 토큰을 소비하며 고집을 부렸다는 점이다.

AI들이 포털에 도착했다

처음 지시를 받은 AI 도구들은 성실하게 움직였다. 식품안전나라 포털에 접근했고, 반려동물 동반가능 업소 관련 페이지를 찾아냈다. 여기까지는 완벽했다. 문제는 그 다음이었다.

포털에는 엑셀 다운로드 버튼이 있었다. 그런데 그 버튼은 fn_downloadExcel()을 호출하는 JavaScript 동적 버튼이었다. 단순한 href 링크가 아니라는 뜻이다. AI 입장에서 이건 '해결해야 할 기술 과제'였고, 그들은 여러 방법을 차례로 시도했다.

시도 1 · 실패

일부 서버 환경에서 포털 접속 자체가 ECONNRESET으로 차단됨. HTML 스크래핑으로 전환, cheerio로 페이지를 파싱해서 엑셀 링크 추출 시도.

시도 2 · 실패

다운로드 버튼이 JS onclick으로만 연결돼 정적 파싱으로 링크를 잡을 수 없었다. onclick 속성을 파싱해서 URL을 역산하는 로직을 새로 작성.

시도 3 · 실패

엑셀에서 눈을 돌려서 페이지 하단부의 있는 데이터 자체를 크롤링 시도. python으로 코드를 작성했으나 실패

시도 4 · 실패

스크래핑 자체는 됐지만 필터링 조건이 맞지 않았는지 데이터 0건으로 처리. 이후 기간 내 토큰이 모두 소진되어버렸다.

이 과정이 여러 세션과 PR을 거쳐반복되었다. 각 시도마다 새로운 코드가 작성됐고, 새로운 에러가 나왔으며, 그 에러를 분석하는 데 또 토큰이 소비됐다. AI들은 포기하지 않고 계속 다음 방법을 시도했다. 그게 오히려 문제였다.

결국 어떻게 됐는가

결말은 허무하게도 간단했다.

사람이 직접 식품안전나라 포털에 들어가서, 엑셀 파일을 내려받고, 그 파일을 프로젝트에 올려놓았다. 그리고 AI에게 "이 파일을 읽어서 필요한 데이터를 파싱해줘"라고 말했다.

✗ AI가 시도한 방법
1. 포털 접속
2. 엑셀(또는 PDF) 다운로드 시도
3. 네트워크 차단 대응
4. JS onclick 역산
5. 크롤링 시도
6. 오데이터 수집
수십 개의 PR, 많은 토큰
✓ 사람이 한 방법
1. 포털 접속
2. 엑셀 다운로드
3. 파일 프로젝트에 추가
약 3분 소요

그 이후 흐름은 훨씬 빨랐다. 나중에는 엑셀 파일의 직접 다운로드 엔드포인트 URL을 찾아내서 코드에 고정값으로 넣는 방식으로 자동화까지 완성됐다

// 최종 해결 방식 — 크롤링 없이, 직접 다운로드 URL 사용 const downloadUrl = process.env.PET_EXCEL_URL || 'https://www.foodsafetykorea.go.kr/...'; const response = await axios.get(downloadUrl, { responseType: 'arraybuffer' });

이 한 줄에 도달하기까지 수십 개의 코드 블록이 쓰이고 지워졌다.

AI가 나쁜 게 아니었다

이 경험을 정리하면서 AI를 탓하고 싶은 마음이 생기기도 했다. 하지만 생각해보면 AI가 틀린 게 아니었다. 그들은 주어진 문제를 성실하게 풀었다. "데이터를 자동으로 수집하는 파이프라인을 만들어라"는 맥락에서 보면, 크롤링과 API 연동은 완전히 합리적인 접근이었다.

문제는 질문이었다. 막연하게 "가져와줘"라고 했을 때, AI는 자신이 할 수 있는 방법 중 가장 그럴싸한 것을 선택한다. 그게 크롤링이었고, 그 방향으로 계속 나아갔다.

사람이 10초면 할 수 있는 일을 AI에게 시키면, AI는 그 일을 코드로 해결하는 방법을 연구하는 데 몇 시간을 쓴다.

바이브 코딩에서 사람의 역할

이 사건을 겪고 나서 생각이 바뀌었다. 바이브 코딩에서 사람의 역할은 단순히 "요구사항을 말하는 것"이 아니다. AI가 잘 하는 일과 사람이 잘 하는 일을 구분하고, 적절한 시점에 개입하는 것이 핵심이다.

좋은 바이브 코딩은 AI를 믿고 맡기는 게 아니라, AI의 진행 방향을 계속 읽으면서 필요할 때 사람이 개입하는 것이다. 그 개입이 늦어질수록 소비되는 토큰이 늘어난다.


이 문제에서 배운 것

AI에게 임무를 줄 때는 접근 방법까지 명시하는 게 효율적이다. "데이터 가져와줘"가 아니라 "이 URL에서 파일 받아서 파싱해줘."

AI가 비슷한 패턴의 코드를 계속 다시 쓰고, 같은 종류의 에러가 반복된다면 — 그때가 사람이 개입할 타이밍이다.

바이브 코딩에서 사람의 개입은 프로젝트를 방해하는 게 아니라, 오히려 앞으로 나아가게 하는 핵심 동력이다.

← 이전 글 다음 글: API 키의 비밀 →