본문으로 건너뛰기
데이터 수집 자동화

크롤러 설계부터 장애 대응까지, AI에게 맡긴다면

리셀 알림 플랫폼

사이트가 바뀌어 수집이 멈추면 AI가 직접 원인을 찾아 고치고, 사람은 그 내용을 승인만 하면 됩니다. 사람이 하던 일을 AI가 대신하죠. 수십 개 쇼핑몰을 24시간 지켜보던 수집 시스템을, 사람 없이도 스스로 굴러가게 다시 만든 이야기입니다.

끊어진 데이터 연결을 emerald 코어(AI 에이전트)가 스스로 다시 잇고 수정 PR을 만들어 내는 self-healing 크롤러 개념도

크롤러는 잘 돌았습니다. 사람이 붙어 있는 동안에는요

맞춤형 크롤러의 다음 벽, 사이트가 바뀔 때마다 개발자가 필요했다

이 고객사는 이미 수십 개 한국 쇼핑몰(나이키, 무신사, 아디다스 등)을 실시간으로 지켜보며 데이터를 모으는 맞춤형 시스템을 돌리고 있었습니다. 한정판이 새로 풀리거나 재입고되면 경쟁사보다 빨리 회원에게 알리는, 이 고객사의 핵심 시스템이었죠. 문제는 운영이었습니다. 쇼핑몰은 수시로 화면을 바꾸고, 그때마다 수집은 아무 말 없이 빈손으로 돌아옵니다. 누군가 '어, 알림이 안 오네?' 하고 알아챈 다음에야 담당자가 사이트를 열어 바뀐 곳을 찾고, 손보고, 확인하고, 다시 띄웁니다. 이 일이 사이트가 바뀔 때마다 되풀이됐습니다.

처음엔 사이트가 늘 때마다 프로그램을 하나씩 복사해서 붙이는 방식이었습니다. 사이트가 30곳을 넘고 서버도 세 대로 늘자 손이 더 많이 갔습니다. 서버마다 수십 개씩, 다 합쳐 70개 가까운 프로그램이 동시에 돌아가는데, 하나가 멈춰도 누군가 알림을 보고 직접 다시 켜야 했죠. 게다가 사이트가 바뀌어 수집이 막히면 그 사이트를 만든 담당자만 고칠 수 있었고, 결국 그 한 사람의 시간이 전체의 발목을 잡았습니다. 사람이 덜 매달려도 되는 구조가 필요했습니다.

구체적인 어려움

  • 쇼핑몰이 화면을 바꾸면 수집이 조용히 멈춰, 한참 뒤에야 알아챔
  • 막힐 때마다 담당 개발자가 직접 사이트를 뜯어보고 고쳐야 함
  • 70여 개 프로그램이 멈춰도 자동 복구가 없어 사람이 직접 다시 켬
  • 그 사이트를 아는 사람만 고칠 수 있어 한 사람에게 일이 몰림
  • 새 사이트 하나 추가하는 데도 복사·수정·등록을 손으로
  • 오래된 구조라 같은 서버에서 처리할 수 있는 양도 제한적

크롤러 자체는 잘 만들어 뒀어요. 그런데 사이트가 바뀔 때마다 결국 사람이 붙어야 했습니다. 알림이 안 온다는 걸 누가 알아채고, 개발자가 코드를 고치고… 그 사이에 우리는 이미 늦은 거죠. 이걸 사람 없이 돌아가게 할 수 있냐고 물었습니다.

고객사 운영팀

고장을 스스로 감지하고, AI가 고쳐서 PR까지 올리는 크롤러

사람이 하던 분석 → 수정 → 테스트 → 배포를 AI Agent 루프가 대신한다

생각은 단순했습니다. 사람이 하던 고장 대응을 시스템 안에 넣자는 거였죠. 수집이 연달아 빈손으로 돌아오면 시스템이 스스로 '고장 났다'고 판단하고, AI가 사이트를 다시 살펴 고칠 방법을 찾아 수정안을 만든 뒤, 사람에게 승인만 요청합니다. 그러려면 먼저 AI가 안전하게 손댈 수 있는 자리를 정하고, 사이트마다 다르던 부분을 프로그램 바깥의 '설정'으로 빼내야 했습니다.

가장 먼저 바꾼 건 사람만 고칠 수 있던 구조였습니다. 예전엔 사이트마다 프로그램 안에 수집 방법이 깊이 박혀 있어서, 바뀔 때마다 개발자가 코드를 열어야 했죠. 이걸 코드 밖의 '설정값'으로 빼냈습니다. 이제 무엇을 어떻게 가져올지는 프로그램이 아니라 설정에서 정해집니다. AI가 건드려도 안전한 자리를 먼저 만들어 둔 셈입니다.

이 시스템은 한 대가 아니라 세 대의 서버에 나뉘어 돕니다. 가장 강한 중심 서버가 수집기 28개와 함께 알림·자가복구·모니터링을 도맡고, 나머지 두 서버가 각각 22개·20개의 수집기를 돌리며 결과를 중심 서버로 보냅니다. 한 서버에 문제가 생겨도 전체가 멈추지 않게 역할을 나눠 둔 구조입니다.

← 좌우로 스크롤하여 차트를 확인하세요

세 대의 서버가 역할을 나눠 — 수집 결과와 복구 신호는 중심 서버로 모입니다

도메인별 zero-result·heal trigger·crawl error·Discord 429 비율을 보여주는 크롤러 모니터링 대시보드

현황판 — 사이트별 수집 상태와 자동복구 발생을 한눈에

그 위에 '스스로 고치는' 흐름을 얹었습니다. 어떤 사이트에서 수집이 연달아(기본 다섯 번) 빈손으로 돌아오면, 시스템은 그걸 고장 신호로 보고 운영팀 채널에 'OO 사이트 수집이 막혔다'고 먼저 알립니다. 걸리는 시간은 보통 몇 분 안쪽. 사람이 눈치채기도 전에 시스템이 먼저 손을 든 셈이죠.

healer가 셀렉터 실패를 감지해 운영 Discord로 보낸 자동 경고 알림

막히는 즉시 운영 채널로 날아오는 자동 경고 — 사람이 알아채기 전에 시스템이 먼저 신고합니다

알림만 띄우고 끝이 아닙니다. AI는 짐작으로 고치지 않습니다. 직접 그 사이트에 들어가 화면이 어떻게 바뀌었는지, 데이터를 더 빠르고 정확하게 받아올 길은 없는지 살펴보고, 가장 나은 방법으로 수집 설정을 다시 맞춥니다. 사람 담당자가 장애 때 하던 일을 똑같이 하되, 사람을 기다리지 않고 새벽이든 주말이든 바로 시작한다는 게 다른 점이죠.

여기서 가장 신경 쓴 건, AI가 고친 걸 함부로 운영에 반영하지 않게 막는 일이었습니다. AI가 만든 수정안은 먼저 자동 검사를 통과해야 합니다. 통과하면 '이렇게 고쳤습니다' 하고 검토 요청만 올리지, 운영에 바로 반영하지 않아요. 감지부터 검토 요청까지 사람 손 하나 없이 가는 완전 자동 방식과, 운영자가 버튼 하나로 시작하는 반자동 방식을 모두 갖췄습니다. 어느 쪽이든 최종 반영은 사람이 결정합니다. 고치다 실패가 거듭되면 정해진 횟수에서 멈추고 사람을 부릅니다.

← 좌우로 스크롤하여 차트를 확인하세요

고친 내용은 자동 검사를 통과해야만 검토 요청으로 — 운영 반영은 사람이 결정합니다

crawler-healer 봇이 셀렉터 깨짐을 감지해 strategy를 html에서 api로 바꾸고 자동으로 올린 GitHub Pull Request 화면

AI가 자동으로 올린 검토 요청 — 사람은 이 내용만 보고 반영 여부를 정합니다 (바로 운영에 들어가지 않음)

한 가지 더. AI에게 권한을 줬다고 다 맡긴 건 아닙니다. AI가 자율적으로 움직일수록 '무엇을 어디까지' 건드릴 수 있는지 울타리부터 쳐야 한다는 게 요즘 권장되는 방식인데, 그대로 따랐습니다. AI가 손댈 수 있는 건 사이트별 수집 설정뿐이고, 시스템의 핵심과 중요한 정보는 아예 접근하지 못하게 잠가 뒀습니다. 사이트에서 긁어온 내용은 '명령'이 아니라 '읽을거리'로만 취급해서, 페이지에 '이전 지시를 무시하라' 같은 게 숨어 있어도 AI가 휘둘리지 않습니다. 그리고 누가 언제 무엇을 고쳤고 누가 승인했는지를 전부 기록으로 남겨, 나중에 그대로 되짚을 수 있게 했습니다.

눈에 보이지 않는 밑바닥도 같이 손봤습니다. 오래되고 느리던 내부 구조를 요즘 방식으로 싹 바꿔, 같은 서버로 더 많은 사이트를 더 빠르게 처리하게 만들었습니다. 예전엔 프로그램이 멈추면 사람이 일일이 다시 켰지만, 이제는 멈추는 즉시 시스템이 알아서 다시 살립니다. 새 서버를 더하거나 사이트를 늘릴 때도 설정만 바꾸면 알아서 맞춰지고요. 그동안 무슨 일이 있었는지는 현황판이 사이트별로 다 보여 줍니다.

main·sub·sub2 3서버의 CPU·메모리·디스크·Load average를 보여주는 서버 리소스 대시보드

서버 현황판 — 세 대 서버의 상태를 실시간으로

여기까지가 '잘 돌게' 만드는 일이었다면, 그다음은 '잘 돌고 있는지 한눈에 보는' 일이었습니다. 수십 개 프로그램이 쏟아내는 활동 기록을 한곳에 모아, 문제가 될 만한 신호만 따로 추려 봅니다. 어딘가 이상하면 곧장 어느 사이트에서 무슨 문제가 났는지 원본 기록까지 펼쳐 짚어 냅니다.

분당 로그 라인·에러/경고·활성 컨테이너 76개·서버별 로그 볼륨을 보여주는 로그 모니터링 대시보드

기록 모니터링 — 모든 프로그램의 활동을 한 화면에

에러·경고 구조화 로그와 전체 로그 원본을 보여주는 로그 상세 화면

상세 기록 — 문제가 된 요청을 시간·횟수까지 원본으로 추적

마지막으로, AI가 이 시스템을 어떻게 다뤄야 하는지 미리 규칙으로 정리해 뒀습니다. 사이트마다 특이사항과 과거 변경 이력을 적어 두고, 자주 하는 일(사이트 분석·수정·새 사이트 추가·전체 점검)을 명령 한마디로 부를 수 있게 묶었죠. 새 사이트를 붙일 때도 'OO 추가' 한마디면, AI가 사이트를 찾아 확인받고 설정·검사·문서·검토 요청까지 차려 둔 뒤, 꺼 둔 상태로 사람의 최종 승인을 기다립니다.

만들어진 시스템의 핵심

스스로 고장을 감지하는 시스템

수집이 연달아 빈손이면 고장으로 보고 스스로 복구를 시작합니다. 보통 몇 분 안에 운영 채널로 먼저 알립니다.

AI가 직접 수리

AI가 실제 사이트를 살펴 더 나은 수집 방법을 찾고, 설정을 고쳐 자동 검사까지 통과시킵니다.

검사를 통과해야만 검토 요청

AI가 만든 수정안도 자동 검사를 통과해야 검토 요청이 됩니다. 운영 반영 여부는 사람이 결정합니다.

완전 자동·반자동 두 방식

사람 손 없이 검토 요청까지 가는 자동 방식과, 운영자가 버튼 하나로 시작하는 반자동 방식을 모두 갖췄습니다.

죽지 않는 3서버 운영

70여 개 프로그램이 멈추면 사람이 아니라 시스템이 먼저 다시 살립니다. 서버를 더하거나 사이트를 늘려도 설정만 바꾸면 됩니다.

딸깍 한 번이면 새 사이트

'OO 추가' 한마디면 AI가 설정·검사·문서·검토 요청까지 만들어 두고 승인을 기다립니다.

사람의 개입이 '코드 수정'에서 '승인'으로

장애 대응의 주체가 개발자에서 AI Agent로 바뀌었습니다

이 사례의 진짜 성과는 '얼마나 빨라졌나'보다 '누가 일하느냐'가 바뀐 데 있습니다. 예전엔 사이트가 바뀌면 개발자가 처음부터 끝까지 다 떠안았죠. 지금은 시스템이 스스로 고장을 알리고, AI가 살펴보고 고쳐 검사까지 끝낸 뒤 사람에게 '이렇게 고쳤다'고 보여 줍니다. 한 사람에게 몰리던 일이 사라지고, 사람은 반영할지 말지만 정하면 됩니다.

사람 → AI
사이트 변경 대응
살펴보고 고치고 검사까지 AI가 자동으로
2~3분
장애 감지
수집이 연달아 막히면 스스로 감지해 복구 시작
70여 개
동시 운영
세 서버에 나눠 돌고, 멈추면 자동으로 복구
딸깍 한 번
새 사이트 온보딩
사이트 주소만 던지면 설정·검사·검토 요청까지 알아서 차려 놓습니다

실제로 달라진 것들

장애를 사람보다 시스템이 먼저 압니다

전에는 누군가 '알림이 안 온다'고 알아챈 다음에야 대응이 시작됐습니다. 지금은 시스템이 수집 실패를 스스로 잡아내 몇 분 안에 운영 채널로 알리고 복구에 들어갑니다.

셀렉터 수정이 한 사람에게 묶이지 않습니다

그 사이트를 아는 사람만 고칠 수 있던 병목이 풀렸습니다. 살펴보고 고치는 일은 AI가 하고, 운영자는 올라온 검토 요청을 보고 판단만 합니다.

고쳐도 함부로 운영에 들어가지 않습니다

AI가 만든 수정안도 자동 검사를 통과해야 검토 요청이 됩니다. 운영 반영은 사람의 승인으로만 일어나고, 실패가 거듭되면 멈추고 사람을 부릅니다. 자동화하되 안전판은 사람이 쥐고 있습니다.

프로세스가 죽어도 사람이 달려가지 않습니다

예전엔 멈추면 알림 보고 사람이 다시 켰지만, 이제는 시스템이 먼저 살립니다. 무슨 일이 있었는지는 현황판이 사이트별로 다 보여 줍니다.

사람이 붙어 있어야만 돌아가는 시스템, AI가 대신 지키게 할 수 있을까요?

사이트가 바뀔 때마다 개발자가 붙는 게 당연하다고 여기시나요? 이 고객사도 그랬습니다. 고장을 스스로 잡아 고치는 구조, 같이 이야기해 보면 길이 보입니다.