TalkPick 프로젝트는 뉴스 기반 서비스를 제공하는 플랫폼입니다. 이에 모든 서비스의 기반이 되는 양질의 뉴스 데이터를 안정적으로 확보하는 기능이 필요하게 되었고, 프로젝트의 요구사항에 따라 다수 언론사의 RSS 피드를 자동으로 수집하고 가공하여 저장하는 시스템이 필요해졌습니다.
1. 기능 개요
핵심기능
RSS 메타 데이터 수집: 국민일보, 동아일보, 경향신문 등 주요 언론사의 RSS 피드에서 뉴스 메타데이터를 자동 수집합니다.
시스템이 매 1분마다 자동으로 RSS 피드를 체크하여 최신 뉴스를 실시간으로 수집합니다.
뉴스 본문 크롤링: RSS 메타데이터만으로 부족한 전문 내용을 각 언론사별 웹사이트에서 스크래핑합니다.
언론사별 특화된 스크래핑 로직을 통해 정확한 본문과 이미지를 추출합니다.
중복 검증 및 데이터 정제: 링크 기반 중복 검증과 HTML 태그 제거, 문단 구분 처리를 통해 깨끗한 데이터를 생성합니다.
수집된 모든 뉴스는 중복 검증을 거쳐 데이터베이스에 저장됩니다.
병렬 처리: Spring Batch 파티셔닝을 통해 다수 RSS 소스를 동시에 수집하여 처리 효율성을 극대화합니다.
순차 처리 대비 3배 이상의 처리 속도 향상을 달성했습니다.
적용 기술
Spring Batch
파티셔닝 기반 병렬 처리:
역할
여러 언론사 RSS 소스를 독립적인 파티션으로 나누어 병렬 실행합니다.
gridSize: 3으로 설정하여 최대 3개의 언론사를 동시에 처리합니다.
사용 이유
순차 처리 대비 3배 이상의 처리 속도 향상 및 시스템 자원 최적 활용이 가능합니다.
Chunk 기반 데이터 처리:
역할
설정된 크기(chunkSize: 10)만큼 데이터를 묶어서 트랜잭션 단위로 처리합니다.
메모리 효율성을 확보하고 대용량 데이터 처리가 가능합니다.
사용 이유
메모리 사용량 제어 및 오류 발생 시 롤백 범위 최소화가 가능합니다.
장애 허용 기능:
역할
특정 RSS 소스에서 오류가 발생해도 전체 수집 작업이 중단되지 않도록 보호합니다.
에러 발생 시 재시도 및 스킵 처리로 안정성을 보장합니다.
사용 이유
외부 의존성(RSS 서버)에 의한 장애가 전체 시스템에 영향을 주지 않도록 격리합니다.
Quartz 스케줄러
주기적 자동 실행:
역할
매 1분마다 (0 */1 * * * ?) RSS 수집 작업을 자동으로 트리거합니다.
설정된 시간 간격으로 배치 작업을 자동 실행하여 최신 뉴스 데이터를 확보합니다.
사용 이유
수동 개입 없이 지속적인 데이터 수집 및 실시간성을 보장합니다.
중복 실행 방지:
역할
이전 수집 작업이 완료되기 전에 새로운 작업이 시작되는 것을 차단합니다.
사용 이유
동시 실행으로 인한 데이터 중복 및 시스템 과부하를 방지합니다.
REST API 제어:
역할
관리자가 수동으로 스케줄러를 시작/정지할 수 있습니다.
사용 이유
운영 상황에 따른 유연한 수집 작업 제어 및 시스템 점검이나 긴급 상황 시 즉시 대응이 가능합니다.
템플릿 메소드 패턴
AbstractRssMapper:
역할
공통 RSS 처리 로직은 상위 클래스에서, 언론사별 특수 로직은 하위 클래스에서 구현합니다.