🐾 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한테 일을 줄 때는 접근 방법까지 같이 말해주는 게 훨씬 낫더라고요. "데이터 가져와줘"가 아니라 "이 URL에서 파일 받아서 파싱해줘" 정도로.

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

바이브 코딩에서 사람의 개입은 프로젝트를 방해하는 게 아니라, 오히려 앞으로 나아가게 하는 힘이었던 듯...

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