SerpApi와 Ruby on Rails를 활용한 네이버 뉴스 맞춤형 워치리스트 구축

Building a Naver News Watchlist With Ruby on Rails

작성자
발행일
2026년 01월 13일

핵심 요약

  • 1 네이버 뉴스 피드 모니터링의 비효율성을 해결하기 위해 SerpApi를 활용한 맞춤형 뉴스 다이제스트 Rails 서비스를 구축합니다.
  • 2 API 전용 Rails 앱에서 NaverNewsFetcher 서비스, Action Mailer, DailyWatchlistJob을 통해 뉴스 수집, 필터링, 이메일 발송 등 전체 워크플로우를 자동화합니다.
  • 3 SerpApi의 안정적인 JSON 결과, 스마트 캐싱, 오류 처리 기능을 활용하여 개발 효율성을 높이고 유지보수 비용을 절감합니다.

도입

뉴스 피드 모니터링은 관련성 있는 정보를 찾는 데 많은 시간과 노력을 소모하게 만듭니다. 수많은 탭과 앱을 오가며 중복된 헤드라인을 확인하고, 이미 읽은 기사를 다시 클릭하는 등의 비효율성은 피로도를 높입니다. 본 문서는 이러한 문제를 해결하기 위해 사용자가 원하는 주제, 매체, 항목 수, 빈도를 직접 설정하고, SerpApi를 통해 네이버 뉴스 결과를 수집하여 맞춤형 다이제스트를 이메일로 전달하는 API 전용 Rails 서비스 구축 방안을 제시합니다.

본 섹션에서는 맞춤형 네이버 뉴스 워치리스트 서비스를 구축하는 구체적인 단계를 상세히 설명합니다. 이 서비스는 API 전용 Rails 8 앱으로 구현되며, SerpApi를 활용하여 네이버 뉴스 결과를 효율적으로 가져오고 관리합니다.

1. API 전용 Rails 앱 생성

프론트엔드가 필요 없는 서비스이므로 --api 옵션과 데이터베이스가 필요 없는 --skip-active-record 옵션을 사용하여 Rails 앱을 생성합니다. (데이터베이스 필요 시 --skip-active-record 생략)

2. SerpApi Gem 추가 및 API 키 저장

SerpApi 공식 Ruby Gem을 bundle add serpapi 명령어로 추가하고, SerpApi 대시보드에서 발급받은 API 키를 Rails 암호화된 credentials에 안전하게 저장하여 앱 내에서 접근할 수 있도록 설정합니다.

3. NaverNewsFetcher 서비스 구현

모든 SerpApi 상호작용을 NaverNewsFetcher 서비스 객체 내에 격리합니다. 이 서비스는 engine: "naver", where: "news", sort_by: :relevance, period: "1d" 등의 기본 검색 파라미터를 정의하며, 쿼리와 추가 옵션을 받아 SerpApi 클라이언트를 통해 검색을 실행합니다. 오류 발생 시 Rails.error.report를 사용하여 보고합니다.

4. Action Mailer를 이용한 이메일 다이제스트

뉴스 결과를 수집한 후, DailyDigestMailer를 사용하여 맞춤형 이메일 다이제스트를 생성하고 발송합니다. ApplicationMailerfrom 주소는 Rails credentials에서 가져오며, 한국어 텍스트가 올바르게 렌더링되도록 charset: "UTF-8"을 설정합니다. 또한, 오류 발생 시 관리자에게 알림을 보내는 error_email 메서드도 추가합니다.

5. 이메일 전송 방법 설정

Gmail SMTP를 사용하여 이메일을 전송하도록 설정합니다. Gmail 앱 비밀번호를 생성하여 Rails credentials에 저장하고, config/environments/production.rb에 SMTP 설정을 추가합니다. 개발 환경에서는 letter_opener Gem을 사용하여 이메일을 브라우저에서 확인할 수 있도록 설정합니다.

6. Daily Watchlist Job 생성

DailyWatchlistJob은 전체 워크플로우를 조율하는 핵심 작업입니다. 이 작업은 정의된 WATCHLIST 항목별로 뉴스를 가져오고, 중복 및 원치 않는 언론사 결과를 필터링하며, 키워드별로 그룹화하여 다이제스트를 구성하고 이메일을 발송합니다. MAX_PAGESRESULTS_PER_PAGE를 통해 페이징 처리를 구현하고, SORT_MAPPERIOD_MAP을 통해 검색 조건을 유연하게 관리합니다.

7. 오류 처리 및 보고

서비스의 안정성을 위해 오류 처리 및 보고 메커니즘을 통합합니다. NaverNewsFetcherDailyWatchlistJob 모두에서 예외 발생 시 Rails.error.report를 사용하여 오류를 기록하고, DailyDigestMailererror_email 메서드를 통해 지정된 수신자에게 오류 알림 이메일을 발송합니다. SerpApi 응답이 "Success"가 아닐 경우에도 명시적으로 오류를 발생시킵니다.

8. 실행 및 테스트

Rails 콘솔에서 NaverNewsFetcher 호출, DailyWatchlistJob 섹션 생성, 전체 DailyWatchlistJob.perform_now 실행 등 각 구성 요소를 테스트하여 서비스가 정상적으로 작동하는지 확인합니다. 개발 환경에서는 letter_opener를 통해 생성된 이메일을 즉시 확인할 수 있습니다.

결론

본 문서를 통해 SerpApi와 Ruby on Rails를 활용하여 네이버 뉴스 맞춤형 워치리스트 서비스를 성공적으로 구축하는 방법을 살펴보았습니다. 이 시스템은 뉴스 피드 모니터링의 비효율성을 제거하고, 사용자에게 가장 관련성 높은 뉴스를 정기적으로 전달하여 정보 과부하를 줄이는 데 기여합니다. SerpApi의 강력한 데이터 수집 기능과 Rails의 유연한 프레임워크를 결합함으로써, 개발자는 스크래퍼 유지보수 부담 없이 핵심 비즈니스 로직에 집중하여 효율적이고 확장 가능한 뉴스 모니터링 솔루션을 구현할 수 있습니다. 향후 스케줄러 연동, 다국어 번역, 다른 플랫폼으로의 다이제스트 전송 등 다양한 방식으로 시스템을 확장할 수 있습니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!