본문 바로가기

바이브코딩

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

 

그래서 이 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를 통해 바이브 코딩을 시작해보았다.

 

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

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