본문 바로가기

바이브코딩

최신 기사들을 요약 및 노션에 업로드 해주는 프로그램 만들기(3)

AI 기반 보안 뉴스 자동 수집 및 요약 시스템 구축기

Groq LLM + Notion API를 활용한 보안 뉴스 자동화 파이프라인

프로젝트 개요

AI가 자동으로 보안 뉴스를 수집하고, 한국어로 요약/번역해서 Notion에 정리해주는 시스템을 만들었습니다.

주요 기능

  • RSS 피드 자동 수집: BleepingComputer, The Hacker News 등 주요 보안 매체
  • AI 요약 및 번역: Groq API(Llama 3.1)를 활용한 한국어 요약
  • Notion 자동 업로드: 구조화된 형태로 Notion DB에 저장
  • 자동 태깅: 키워드 기반 태그 자동 생성

기술 스택

구분 기술
언어 Python 3
LLM Groq API (Llama 3.1 8B Instant)
저장소 Notion API
데이터 수집 RSS Feed (feedparser)
웹 스크래핑 requests, BeautifulSoup

프로젝트 구조

AI Project/
├── run.py                 # 메인 실행 파일
├── config.yaml            # 설정 파일 (RSS 소스, 키워드 등)
├── requirements.txt       # 의존성 패키지
├── .env                   # API 키 (GROQ_API_KEY, NOTION_TOKEN 등)
├── app/
│   ├── pipeline.py        # 메인 파이프라인 로직
│   ├── collectors.py      # RSS 수집기
│   ├── parser.py          # 웹페이지 본문 추출
│   ├── summarizer.py      # LLM 요약 모듈
│   ├── notion_client_wrapper.py  # Notion API 클라이언트
│   └── storage.py         # 중복 체크용 저장소
└── data/
    ├── seen.json          # 이미 처리한 기사 ID
    └── summarizer.log     # LLM 응답 로그

동작 흐름

1. RSS 피드에서 최신 뉴스 수집
         ↓
2. 중복 체크 (이미 처리한 기사 스킵)
         ↓
3. 웹페이지 본문 추출
         ↓
4. Groq LLM으로 한국어 요약 + 번역
         ↓
5. Notion DB에 구조화된 형태로 저장

핵심 구현 포인트

1. LLM 프롬프트 설계

처음에는 복잡한 파싱 로직을 사용했지만, LLM 응답 형식이 일관되지 않아 실패율이 높았습니다. 결국 파싱 없이 마크다운 형식 그대로 저장하는 방식으로 변경해서 안정성을 크게 높였습니다.

SYSTEM_PROMPT = (
    "You are an assistant who summarizes and translates news articles into Korean. "
    "Provide a structured summary and full translation in a clean, readable format."
)

2. Rate Limit 대응

Groq 무료 티어는 분당 30건 제한이 있어서 429 에러가 자주 발생했습니다. Exponential Backoff를 적용해서 자동 재시도하도록 구현했습니다.

if "429" in str(e):
    wait_time = 30 * (attempt + 1)  # 30초, 60초, 90초...
    time.sleep(wait_time)

3. Notion 블록 자동 변환

LLM이 출력한 마크다운 헤딩(##, ###)을 Notion의 heading 블록으로 자동 변환합니다.

if line.startswith('## '):
    # Notion heading_2 블록으로 변환
elif line.startswith('### '):
    # Notion heading_3 블록으로 변환

실행 결과

--- Collecting News ---
  - bleepingcomputer: Collected 10 items from RSS.
  - thehackernews: Collected 10 items from RSS.
------------------------
==== Run Summary ====
Time: 2026-01-18T08:50:50Z
collected: 20
filtered: 20
processed: 20
notion: 20
skipped_seen: 0
errors: 0
=====================

20개 기사를 자동으로 수집, 요약, Notion에 업로드 완료! 


Notion 결과 예시

각 기사는 다음과 같은 구조로 저장됩니다:

  • 제목: 원문 기사 제목
  • 소스: BleepingComputer / TheHackerNews
  • URL: 원문 링크
  • 위험도: Low / Medium / High
  • 태그: 자동 추출된 키워드 (예: ransomware, zero-day, vulnerability)
  • 본문: AI가 생성한 요약 + 전체 번역

 

 

다 완성하고 나서 원래 1일 1 Tistory 글을 작성하려고 했는데 일요일날 실패!! ㅠ. 여하튼 프로그램 다 작성하고 Opus 4.5에게 상세하게 프로젝트 결과물에 대해서 작성해달라고 하니까 진짜 세세하게 작성을 해줘서, 중간 중간 이상한 문맥들을 삭제하고 조금씩 고쳐서 위와 같은 글을 작성했습니다

 

https://www.notion.so/2e683330f490800ebc33eed53450e733?source=copy_link

 

뉴스 스크랩 | Notion

Hosted by Notion Sites — The easiest way to get a website up and running.

www.notion.so

 

해당 노션 링크이고, 보실 분들은 편하게 봐주셔도 괜찮을 것 같습니다..! 가끔 이슈 트러블링이나 기능 구현을 추가하면 또 블로그 글을 작성할 예정이며 다음에는 다른 프로젝트로 돌아오겠습다

 

이미지 채우고 싶어서 항상 블로그 글 복사해서 나노바나나에게 맡기는 중..