최신 기사들을 요약 및 노션에 업로드 해주는 프로그램 만들기(1)
요즈음은 바이브 코딩을 활용하여 앱을 만드는 시대에 이르렀다. 그래서 나도 쉬운 프로그램부터 하나씩 만들어보기 시작하려고 한다.
일단 여러 활동들을 해보려고 할 때, 최신 기사들은 어떤 것이 있는지 어떤 이슈들이 터지는지 알아보는 것이 중요해졌다.
그래서 아래에 있는 2개의 링크를 기준으로 API를 활용하여 기사들을 다 가져오는 형식으로 만들 예정이었다.
https://www.bleepingcomputer.com/
[BleepingComputer
BleepingComputer is a premier destination for cybersecurity news for over 20 years, delivering breaking stories on the latest hacks, malware threats, and how to protect your devices.
www.bleepingcomputer.com](https://www.bleepingcomputer.com/)
[The Hacker News | #1 Trusted Source for Cybersecurity News
The Hacker News is the top cybersecurity news platform, delivering real-time updates, threat intelligence, data breach reports, expert analysis, and actionable insights for infosec professionals and decision-makers.
thehackernews.com](https://thehackernews.com/)
그래서 이 2가지를 활용해, 내가 만들고 싶은 프로그램에 대해서 프로젝트 명세서를 AI에게 작성해달라고 했다.
더보기
보안 뉴스 자동 수집 · AI 요약 · Notion 정리 시스템
요구 사항 명세서 (Software Requirements Specification)
\
1. 개요
\
본 시스템은 BleepingComputer 및 Hacker News에서 보안 관련 뉴스를 자동으로 수집하고,
AI를 활용하여 한국어로 요약한 뒤 Notion 데이터베이스에 구조화하여 저장하는 것을 목표로 한다.
이를 통해 보안 트렌드 파악, 학습 자료 정리, 개인 또는 팀 단위 지식 관리의 효율성을 높인다.
\
\
2. 시스템 목표
\
-
보안 뉴스 수집의 자동화
-
한국어 중심의 핵심 요약 제공
-
Notion을 활용한 일관된 지식 관리
-
반복 실행 가능한 파이프라인 구축
\
\
3. 기능 요구 사항
\
3.1 뉴스 수집 기능
\
-
BleepingComputer의 공식 RSS를 통해 최신 기사 목록을 수집해야 한다.
-
Hacker News는 공식 API를 사용하여 게시글 정보를 수집해야 한다.
-
보안 관련 키워드를 기준으로 뉴스 필터링을 수행해야 한다.
-
이미 수집된 기사는 중복 처리되지 않아야 한다.
\
\
3.2 본문 파싱 및 전처리
\
-
기사 URL에서 본문 텍스트만 추출해야 한다.
-
광고, 스크립트, 불필요한 HTML 요소는 제거해야 한다.
-
요약에 필요한 최소한의 텍스트만 AI에 전달해야 한다.
\
\
3.3 AI 요약 기능
\
-
모든 뉴스는 한국어로 요약되어야 한다.
-
요약 결과는 다음 정보를 포함해야 한다.
-
사건 또는 이슈 개요
-
영향을 받는 제품 또는 서비스
-
보안 위협 또는 취약점 내용
-
위험도 수준 (Low / Medium / High)
-
간단한 대응 또는 시사점
-
요약 결과는 원문을 그대로 복사하지 않아야 한다.
\
\
3.4 Notion 연동 기능
\
-
Notion API를 사용하여 지정된 데이터베이스에 페이지를 생성해야 한다.
-
각 뉴스는 하나의 페이지로 저장되어야 한다.
-
최소한 다음 속성을 포함해야 한다.
-
제목
-
출처
-
원문 URL
-
한국어 요약
-
위험도
-
태그
-
수집 날짜
\
\
3.5 자동화 기능
\
-
전체 파이프라인은 스크립트 한 번 실행으로 동작해야 한다.
-
주기적 실행(예: 하루 1회)이 가능해야 한다.
-
실행 중 오류 발생 시 전체 시스템이 중단되지 않아야 한다.
\
\
4. 비기능 요구 사항
\
4.1 성능
\
-
뉴스 수집부터 Notion 저장까지 기사 1건당 평균 처리 시간은 합리적인 수준이어야 한다.
-
불필요한 API 호출을 최소화해야 한다.
\
\
4.2 보안
\
-
API 키(OpenAI, Notion 등)는 코드에 하드코딩하지 않아야 한다.
-
환경 변수 또는 별도 설정 파일로 관리해야 한다.
\
\
4.3 확장성
\
-
뉴스 소스는 향후 추가 가능해야 한다.
-
요약 포맷은 수정 및 확장이 가능해야 한다.
\
\
4.4 유지보수성
\
-
코드 구조는 기능 단위로 분리되어야 한다.
-
로그 또는 실행 결과를 확인할 수 있어야 한다.
\
\
5. 구현 및 사용 방법
\
-
폴더 구조 개요
-
app/collectors.py: BleepingComputer RSS, Hacker News 수집기 -
app/parser.py: 본문 추출 및 전처리 -
app/summarizer.py: OpenAI API 기반 요약(Dummy 대체 포함) -
app/notion\_client\_wrapper.py: Notion API 연동 -
app/pipeline.py: 전체 파이프라인 오케스트레이션 -
run.py: 실행 엔트리포인트 -
config.yaml: 키워드/소스/요약/Notion 설정 -
.env.example: 환경 변수 샘플
\
5.1 사전 준비
\
-
Python 3.10+ 권장
-
의존성 설치:
pip install -r requirements.txt -
.env.example를.env로 복사 후 다음 값 설정 -
OPENAI\_API\_KEY(선택: 없으면 Dummy 요약 사용) -
OPENAI\_MODEL(기본값: gpt-4o-mini) -
NOTION\_TOKEN,NOTION\_DATABASE\_ID(선택: 미설정 시 Notion 저장 생략) -
필요시
config.yaml에서 키워드/소스/Notion 속성 매핑 수정
\
5.2 실행
\
python run.py
\
-
실행 결과 요약(수집/필터/처리/Notion 저장/중복 스킵/에러)을 콘솔에 출력합니다.
-
중복 방지를 위해
data/seen.json에 처리된 항목이 저장됩니다
\
5.4 Notion 데이터베이스 스키마 예시
\
-
속성 이름은
config.yaml의notion\_properties에 맞추세요 -
Title(title),Source(select),URL(url),Summary(rich_text),Risk(select),Tags(multi_select),Collected(date) -
Source,Risk의 select 옵션(High/Medium/Low 등)은 사전에 데이터베이스에서 생성해 두면 좋습니다.
\
5.5 주의 사항
\
-
네트워크 및 외부 API 호출 실패 시 해당 항목만 건너뛰고 파이프라인은 계속 진행합니다.
-
OpenAI/Notion 키를 코드에 하드코딩하지 않고 환경 변수로만 사용합니다.
-
뉴스 소스 추가 및 요약 포맷 변경은
config.yaml과 해당 모듈을 확장하여 반영할 수 있습니다.
이렇게 AI 준 기존 명세서를 가지고 약간의 수정을 통해 프로그램을 만들기 시작했다. 저 명세서는 중간에 수정을 거친 명세서이며 Readme.md 파일로 저장 후, Gemini를 통해 바이브 코딩을 시작해보았다.
어느 정도 완성을 해놓고 이 글을 작성하는 것이라 지금은 파일 구조 상태가 뭔가 많이 늘어났다..
일단 오늘은 어떤 프로그램을 만들 예정이고, 어떻게 시작했는지만 적으려고 했으니 다음파트 부터는, 어떻게 이슈 트러블링을 진행했는지와 어디 까지 완성했는지를 적으러 오겠다.