N 36 21 22
E 127 23 46
Archive vol. 01
Depth0000mSURFACE
Research Note / Development

최신 기사들을 요약 및 노션에 업로드 해주는 프로그램 만들기(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/)

https://thehackernews.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.yamlnotion\_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를 통해 바이브 코딩을 시작해보았다.

어느 정도 완성을 해놓고 이 글을 작성하는 것이라 지금은 파일 구조 상태가 뭔가 많이 늘어났다..

일단 오늘은 어떤 프로그램을 만들 예정이고, 어떻게 시작했는지만 적으려고 했으니 다음파트 부터는, 어떻게 이슈 트러블링을 진행했는지와 어디 까지 완성했는지를 적으러 오겠다.