핵심 요약
기존의 웹 스크래퍼는 웹사이트 구조가 변경되면 CSS 셀렉터가 깨져 유지보수가 어렵다는 고질적인 문제가 있다. Pluckr는 LLM을 활용하여 사용자가 Zod로 정의한 데이터 구조에 맞춰 적절한 셀렉터를 자동으로 생성하고 검증한다. 생성된 셀렉터는 캐싱되어 이후 요청에서 비용을 절감하며, 페이지 구조가 바뀌면 자동으로 셀렉터를 갱신하는 자가 치유 기능을 수행한다. 이를 통해 개발자는 복잡한 셀렉터 관리 없이 안정적으로 데이터를 추출할 수 있다.
배경
Node.js 및 TypeScript 지식, Zod 스키마 라이브러리 사용법, LLM API(Gemini, OpenAI 등) 사용 경험
대상 독자
웹 스크래핑 자동화 및 데이터 추출 파이프라인을 구축하는 Node.js 개발자
의미 / 영향
웹 데이터 추출 분야에서 LLM이 단순한 데이터 변환을 넘어 인프라의 회복 탄력성을 높이는 도구로 진화하고 있음을 보여준다. 이는 수동 셀렉터 관리 시대를 끝내고 선언적 데이터 추출 시대로의 전환을 가속화할 것으로 예상된다.
섹션별 상세
Pluckr는 Zod 라이브러리를 사용하여 추출하고자 하는 데이터의 구조를 명확하게 정의하는 스키마 우선 접근 방식을 채택했다. 개발자는 제목, 가격, 재고 상태 등 필요한 필드와 데이터 타입을 정의하기만 하면 되며, 추출된 결과물은 정의된 스키마에 따라 완벽하게 타이핑되어 런타임 에러를 방지한다. 이는 데이터의 일관성을 보장하고 후속 처리 과정에서의 안정성을 높이는 핵심 요소이다.
LLM은 제공된 HTML과 스키마를 분석하여 각 필드에 적합한 CSS 셀렉터를 에이전트 루프를 통해 생성한다. 생성된 셀렉터는 실제 HTML에서 테스트 및 검증 과정을 거친 후 캐시에 저장되어 다음 요청부터는 LLM 호출 없이 즉시 실행되는 구조를 갖췄다. 만약 웹 페이지의 구조가 변경되어 기존 셀렉터가 작동하지 않으면, Pluckr는 이를 감지하고 자동으로 LLM을 호출하여 새로운 셀렉터를 생성하는 자가 치유 과정을 수행한다.
Vercel AI SDK를 지원하여 Google Gemini, Anthropic Claude, OpenAI 등 다양한 LLM 모델을 선택하여 사용할 수 있는 유연성을 제공한다. 추출할 HTML 소스에 제약이 없어 fetch, Puppeteer, Playwright 등 어떤 도구와도 결합이 가능하며, 캐시 저장소 역시 기본 인메모리 방식 외에 SQLite와 Redis를 지원한다. 이러한 구조는 단일 프로세스부터 대규모 분산 환경까지 대응할 수 있는 확장성을 보장한다.
실무 Takeaway
- 전통적인 정적 셀렉터 방식에서 벗어나 LLM을 활용한 동적 셀렉터 생성으로 스크래핑 유지보수 비용을 획기적으로 절감할 수 있다.
- Zod 스키마를 진실의 원천으로 삼아 데이터 추출 과정의 유효성 검사와 타입 안정성을 동시에 확보한다.
- 성공적인 셀렉터를 캐싱하고 실패 시에만 LLM을 호출하는 전략을 통해 API 비용 효율성과 처리 속도를 모두 최적화한다.
언급된 리소스
AI 분석 전체 내용 보기
AI 요약 · 북마크 · 개인 피드 설정 — 무료