사내 지식 검색(RAG)을 위한 웹 데이터 수집과 정제: SyncCrawl 파이프라인 아키텍처
사내 인공지능 지식 검색 시스템(RAG: Retrieval-Augmented Generation)의 성능은 결국 검색 대상이 되는 데이터의 품질에 좌우됩니다. 사내 문서뿐만 아니라 관련 법령, 산업 표준, 시장 보고서 등 외부 웹에서 제공되는 정보를 주기적으로 수집하여 지식 베이스에 반영해야 하는 업무가 점차 늘어나고 있습니다.
그러나 외부 웹 페이지를 그대로 가져와 저장하면 배너 광고, 상하단 메뉴 바, 자바스크립트 코드와 같은 불필요한 정보가 다량 포함되어 AI가 엉뚱한 답변을 생성하는 원인이 됩니다. 또한 최근 웹사이트들은 자바스크립트로 화면을 동적 렌더링하기 때문에 단순 HTML 요청만으로는 본문 내용을 가져오기 어려운 환경이 많습니다.
엠파시의 데이터 수집 엔진인 SyncCrawl은 대규모 웹 문서를 안정적으로 가져오고, 검색에 필요한 핵심 텍스트만 추출하여 사내 벡터 저장소로 전달하는 파이프라인 구조를 갖추고 있습니다. 본 글에서는 SyncCrawl의 수집 및 정제 처리 구조를 살펴봅니다.
1. SyncCrawl 데이터 수집 및 정제 파이프라인
웹 문서가 수집되어 사내 지식 검색 시스템에 저장되기까지는 4단계의 처리를 거칩니다.
2. 정적 파서와 가상 브라우저의 하이브리드 수집
모든 웹 페이지를 메모리를 많이 쓰는 가상 브라우저(Headless Browser)로 수집하면 서버 자원 소모가 급격히 늘어납니다. 반대로 단순 HTTP 요청만 사용하면 동적으로 렌더링되는 최신 싱글 페이지 애플리케이션(SPA)의 내용을 읽어오지 못합니다.
- 초기 응답 검사: 대상 사이트의 첫 HTML 응답을 확인하여 순수 정적 콘텐츠는 가벼운 HTTP 클라이언트로 빠르게 수집합니다.
- 동적 렌더링 전환: 본문이 자바스크립트 실행 후에 로딩되는 사이트인 경우에만 가상 브라우저 인스턴스를 할당하여 화면 렌더링 완료 시점의 DOM을 수집합니다.
- 수집 주기 및 예의 지키기(Politeness): 대상 사이트 서버에 부하를 주지 않도록 도메인별 동시 요청 수 제한과 지연 간격(Delay)을 엄격히 적용합니다.
3. 본문 텍스트 추출 및 구조화
웹 문서에서 의미 있는 본문만 골라내는 과정은 사내 AI의 검색 품질을 결정하는 중요한 단계입니다.
- 노이즈 요소 제거: 네비게이션 헤더, 푸터, 사이드바 배너, 스크립트 태그 등 본문과 무관한 HTML 태그를 우선 제거합니다.
- 계층 구조 보존: 문서 내 제목(H1~H4), 표(Table), 목록(List) 등의 구조를 마크다운(Markdown) 형식으로 정리하여 문맥의 흐름을 보존합니다.
- 해시 기반 변경 감지: 수집된 본문 내용의 암호화 해시값을 기존 저장된 값과 대조하여, 내용에 변화가 없는 문서는 벡터 변환 과정을 생략함으로써 시스템 자원을 절약합니다.
4. 사내 검색 데이터베이스(Vector DB) 연동
정제된 문서는 AI 모델이 이해하기 적합한 길이(보통 500~1,000자)로 단락을 분할(Chunking)합니다. 이때 단락 간 문맥 단절을 줄이기 위해 일정한 중첩 구간(Overlap)을 유지합니다.
분할된 단락들은 임베딩 벡터로 변환되어 사내 벡터 데이터베이스에 색인되며, 최종적으로 사내 임직원이 질문을 입력했을 때 관련성이 높은 외부 지식으로서 정확하게 인용될 수 있도록 지원합니다.
인공지능 도입의 성패는 신선하고 신뢰할 수 있는 데이터를 얼마나 체계적으로 공급하느냐에 달려 있습니다. SyncCrawl은 불필요한 노이즈를 걷어내고 실제 필요한 지식만을 사내 인프라로 수급하는 기본기에 충실한 수집 파이프라인을 지향합니다.