피드로 돌아가기
Dev.toBackend
원문 읽기
AST 기반 Template 역추적을 통한 20KB 규모의 Zero-dependency 데이터 추출기 설계
What if you could reverse a template engine?
AI 요약
Context
CSS Selector 기반의 Cheerio나 Headless Browser인 Puppeteer를 활용한 데이터 추출 방식의 취약성 파악. DOM 구조 변경에 따른 파이프라인 붕괴 및 리소스 과소비 문제를 해결하기 위해 Template-driven 추출 방식의 필요성 대두.
Technical Solution
- Template Engine의 정방향 렌더링(Template + Data = Text) 로직을 역전시킨 역방향 추출(Text + Template = Data) 아키텍처 설계
- 단순 Regex 매칭의 한계를 극복하기 위해 Template을 분석하여 의미론적 구조를 정의하는 AST(Abstract Syntax Tree) 도입
- AST 노드 간의 계층 관계와 제어 흐름을 분석하여 복잡한 Loop 및 Nested Data 구조의 정밀한 매핑 구현
- 외부 의존성을 완전히 제거한 Zero-dependency 설계를 통해 보안 제약이 엄격한 CI/CD 및 샌드박스 환경의 실행 가능성 확보
- Type Coercion 옵션을 통한 추출 데이터의 자동 타입 변환(Number, Boolean, Date) 로직 내장
- Safe Mode 설정을 통해 매칭 실패 시 기존 Selector 기반 추출기로 전환하는 Fallback 전략 수립
실천 포인트
1. 정기적으로 HTML 구조가 변경되는 사이트 스크래핑 시 AST 기반 추출 방식 검토
2. 보안 정책상 Headless Browser 실행이 불가능한 환경에서 Zero-dependency 텍스트 파서 적용
3. 템플릿 내 변수 간 구분자(Separator)를 명시하여 데이터 분리 모호성 제거
4. 매칭 실패에 대비한 Safe Mode 및 Fallback 메커니즘 구축