BRIEFING
규칙을 컴파일해서 재사용하는 크롤러는 어떻게 설계할까
규칙을 컴파일해서 재사용하는 크롤러는 어떻게 설계할까
Scope
핵심 질문
사이트별 추출 규칙을 매 요청마다 해석하지 않고 컴파일·캐시해 재사용하는 크롤러는 어떻게 설계하는가?
Research
핵심 근거
- 규칙 언어는 selector, transform, validation을 데이터로 표현하고 실행기는 이를 내부 plan으로 변환할 수 있다.
- compile 단계와 execute 단계를 분리하면 parsing과 validation 비용을 반복하지 않아도 된다.
- 규칙 버전과 대상 schema를 함께 저장해야 재현성과 rollback이 가능하다.
참고 자료
- 일반적인 분산시스템·데이터 엔지니어링 설계 원칙
Draft
재사용형 크롤러는 '규칙을 읽는 단계'와 '페이지에 규칙을 적용하는 단계'를 분리하는 것이 핵심이다.
규칙 표현
규칙에는 CSS/XPath selector, attribute 선택, 문자열 정리, 날짜 파싱, 필수값 검증 같은 정보를 담을 수 있다. 가능하면 임의 코드를 넣기보다 제한된 DSL로 표현하면 검증과 캐시가 쉽다.
Compile 단계
원본 규칙을 읽어 selector를 파싱하고 transform chain을 확인한 뒤 내부 실행계획으로 바꾼다. 잘못된 규칙은 이 단계에서 실패시킨다.
Cache
규칙의 hash와 version을 key로 compiled plan을 캐시하면 같은 사이트 수천 페이지를 처리할 때 반복 parsing을 피할 수 있다.
Execute 단계
페이지 DOM과 compiled plan만 받아 추출한다. 실행기는 가능한 한 stateless하게 유지하면 worker 확장이 쉽다.
Versioning
어떤 데이터가 어떤 규칙 버전으로 추출됐는지 기록해야 parser 변경 후 재처리와 결과 비교가 가능하다.
핵심
규칙을 configuration으로 저장하되 실행 전에 한 번 검증·정규화해 compiled plan으로 만들고, versioned cache에서 재사용하는 구조가 가장 단순하다.