한국GPT협회 표준교재

802. 뉴스 모니터링 에이전트

Codex 바이브코딩으로 만드는 실전 자동화 — 키워드 수집 → 네이버 본문 추출 → 키워드별 엑셀 분류까지

뉴스 모니터링 에이전트 만들기

Learning Objectives
  • 자연어 지시만으로 외부 API를 호출해 데이터를 모으고 가공하는 실동작 자동화 도구를, 코드 한 줄 직접 쓰지 않고 만든다.
  • 큰 명세를 한 번에 던지지 않고 여러 단계로 분할해 점진적으로 완성하며, 프롬프트 맥락을 유형(역할·입력·규칙·출력·제약)으로 정리해 재사용한다.
  • 수집 → 필터 → 본문 수집 → 분류의 데이터 파이프라인을 이해하고, 자사·경쟁사·트렌드 모니터링이나 다른 API로 응용한다.

이 장의 학습 흐름

  1. 단계 분할 전략을 읽는다 — 왜 한 번에 만들지 않고 5단계로 나눴는지 (이해)
  2. 단계별 프롬프트를 따라 읽는다 — 1~4단계 프롬프트와 그때 만들어진 엑셀을 대조 (사례)
  3. 통합 프롬프트로 한 번에 본다 — 흩어진 지시를 하나로 합친 최종 프롬프트 (사례)
  4. 결과물을 연다 — 코드와 단계별 엑셀 산출물을 직접 열어 본다 (사례)
  5. 응용·확장을 설계한다 — 내 업무 키워드·다른 API로 치환 (응용)
  6. 준비물 — 파이썬 3.10+, pandas·openpyxl, 네이버 개발자센터 검색 API 키. Codex 데스크탑앱이 있으면 직접 생성 실습까지, 없으면 첨부 코드·엑셀로 따라 읽기.
이해

단계 분할 전략

학습 안내읽기. 파이프라인 그림을 먼저 본 뒤, "프롬프트 맥락 유형" 5칸을 한 번 더 읽으십시오 — 이 5칸이 뒤에 나오는 모든 단계 프롬프트의 뼈대입니다.

바이브코딩으로 "돌아가는 도구"를 만든다

여기서 만드는 것은 한 번 쓰고 마는 결과 문서가 아니라, 결과물을 계속 만들어 내는 프로그램입니다. 한 번 완성하면 키워드만 바꿔 매일·매주 다시 실행할 수 있고, 실행할 때마다 그 시점의 최신 뉴스를 새로 수집합니다. 외부 API 호출, 웹 본문 수집, 예외 처리, 파일 저장처럼 "직접 코딩하면 며칠 걸릴" 작업을 자연어 지시로 조립하는 것이 이 도구의 핵심입니다.

완성할 도구의 데이터 파이프라인

만들 에이전트는 다음 다섯 칸을 한 번의 실행으로 통과합니다. 각 칸이 곧 하나의 개발 단계가 됩니다.

INPUT
키워드 목록
계열사명 .md 파일
API
네이버 검색 수집
최신순 · 최대 1,000건
FILTER
네이버 도메인만
n.news.naver.com
SCRAPE
본문 수집
newsct_article 추출
SPLIT
키워드별 분류
엑셀 파일 분리 저장

왜 한 번에 안 만들고 단계로 나눴나

전체 명세를 한 프롬프트에 몰아넣으면 어디서 틀렸는지 확인하기 어렵습니다. 그래서 작게 만들어 실행·검증하고, 통과하면 다음 단계를 얹는 방식으로 진행했습니다. 단계마다 엑셀 한 개가 떨어지므로 눈으로 바로 검증됩니다. 마지막 5단계에서 검증된 지시들을 하나의 통합 프롬프트로 합쳐, 다음부터는 한 번에 재생성할 수 있게 정리합니다.

프롬프트 맥락 유형 — 모든 단계의 공통 뼈대

실제로 Codex에 던진 문장을 정리해 보면, 좋은 지시는 늘 다음 다섯 가지 맥락으로 나뉩니다. 뒤에 나오는 단계 프롬프트는 전부 이 틀에 맞춰 다시 정리한 것입니다.

역할 Role
무엇을 만드는 누구인가 — "네이버 뉴스를 수집하는 파이썬 스크립트를 만드는 개발자".
입력 Input
어떤 파일·데이터를 읽는가 — 키워드 .md, 인증정보 .md.
규칙 Rule
수집·필터·추출 조건 — 최신순, 1,000건 제한, n.news.naver.com만, newsct_article 본문만.
출력 Output
산출 파일명·칼럼 규격 — news_YYYYMMDD_HHMMSS-*.xlsx.
제약 Constraint
키 하드코딩 금지, 요청 재시도·호출 간 대기, 본문 중간 저장.
시작 전 보안 점검. API 키는 코드가 아니라 별도 인증정보 파일에 두고, 그 파일은 공유·업로드하지 않습니다(첨부된 naver_api_credentials.md는 실제 키 없이 양식만 들어 있습니다). 웹 본문 수집은 호출 사이에 대기를 두어 상대 서버에 부담을 주지 않도록 합니다.
사례

단계별 프롬프트

금융 · 모니터링

학습 안내읽기 또는 실행. 아래 1~4단계 프롬프트는 실제 Codex에 입력했던 지시를 역할·입력·규칙·출력·제약 유형으로 다시 정리한 것입니다. 각 단계 끝의 엑셀 캡쳐가 그 프롬프트의 실제 결과입니다 — 프롬프트와 결과를 한 쌍으로 대조하며 읽으십시오.

1단계 — 키워드 파일 + 네이버 검색 API로 1,000건 수집 → 엑셀

먼저 검색 키워드를 별도 파일로 분리하고, 네이버 검색 API로 최신순 뉴스를 모아 엑셀로 떨어뜨리는 가장 작은 동작부터 만듭니다.

1단계 입력 프롬프트
# 역할 너는 뉴스 모니터링 자동화 스크립트를 만드는 개발자다. 네이버 검색(뉴스) Open API로 뉴스를 대량 수집해 엑셀로 저장하는 파이썬 프로그램을 만든다. # 입력 — 검색 키워드 (별도 파일) - 우리금융그룹 계열사 명단을 woori_affiliates.md 파일로 만든다. - 한 줄에 계열사명 하나씩 넣는다. - 이 파일을 읽어 검색 키워드 목록으로 사용한다. # 입력 — 인증정보 (별도 파일) - 네이버 API의 CLIENT_ID, CLIENT_SECRET은 naver_api_credentials.md 에 따로 저장한다. - 코드에 키를 하드코딩하지 않는다. # 규칙 — 수집 - 네이버 검색 API(뉴스)로 키워드별 뉴스를 수집한다. - 정렬은 최신순(sort=date). - 전체 수집량은 1,000건으로 제한한다 (개발 중에는 속도 확보를 위해 딱 1,000건만). - 같은 링크가 여러 키워드에서 나오면 중복 저장하지 않고, matched_keywords 에 키워드를 합친다. # 출력 - 결과를 엑셀로 저장: news_YYYYMMDD_HHMMSS-full.xlsx - 칼럼: keyword, matched_keywords, title, originallink, link, description, pubDate

키워드 파일은 다음처럼 한 줄에 하나씩 둡니다(첨부 woori_affiliates.md). 이 파일만 바꾸면 검색 대상이 통째로 바뀝니다.

woori_affiliates.md
우리은행
우리카드
우리투자증권
우리금융캐피탈
우리자산운용
… (한 줄에 계열사명 하나씩)
1단계 결과 — full 엑셀
1단계 산출물 news_..-full.xlsx — 키워드별로 모은 API 검색 결과 1,000건(최신순)

2단계 — 네이버 검색 API 발급받기

1단계 코드를 돌리려면 API 키가 필요합니다. 발급 절차 자체도 프롬프트로 물어 정리했습니다.

2단계 입력 프롬프트
# 질문 네이버 검색 API(뉴스)를 사용하려면 어떻게 발급받는지 단계별로 알려줘. # 알고 싶은 것 - 어디서 신청하는지 (개발자센터) - 어떤 API를 선택하는지 (검색) - CLIENT_ID / CLIENT_SECRET 을 어디서 확인하는지 - 하루 호출 한도와 주의사항 - 발급값을 naver_api_credentials.md 에 어떤 형식으로 넣는지

네이버 검색 API 발급 — 정리된 절차

  1. developers.naver.com 로그인 → Application → 애플리케이션 등록.
  2. 사용 API에서 검색을 선택한다.
  3. 환경 추가에서 WEB 설정을 고르고 임의의 서비스 URL을 입력한다(로컬이면 http://localhost).
  4. 등록을 마치면 Client IDClient Secret이 발급된다 — 내 애플리케이션 화면에서 확인.
  5. 발급값을 인증정보 파일에 아래 형식으로 넣는다.
naver_api_credentials.md
NAVER_CLIENT_ID=발급받은_CLIENT_ID
NAVER_CLIENT_SECRET=발급받은_CLIENT_SECRET
참고 — 한도와 규격. 검색 API는 개발자센터 기준 하루 호출 한도가 있습니다(뉴스 검색 기준 일 25,000회 안팎). 한 번 호출에 최대 100건(display), 시작 위치는 최대 1,000(start)까지라서, 이 스크립트는 키워드를 순서대로 검색하다 전체 1,000건에 도달하면 멈춥니다.

3단계 — 네이버 도메인 필터 + 본문 수집 → 엑셀

API가 주는 것은 제목·요약·링크까지입니다. 기사 본문은 링크에 접속해 직접 가져와야 합니다. 그런데 링크 도메인이 제각각이라, 먼저 네이버 뉴스(n.news.naver.com)만 남긴 뒤 그 페이지에서 본문 영역만 추출합니다.

3단계 입력 프롬프트
# 규칙 — 1) 네이버 도메인 필터 - 1단계에서 모은 뉴스 목록에서 link 값에 'n.news.naver.com' 이 포함된 행만 남긴다. - 결과 저장: news_YYYYMMDD_HHMMSS-naver-filtered.xlsx # 규칙 — 2) 본문 수집 - 필터된 각 행의 link URL 에 접속해 네이버 뉴스 본문을 가져온다. - 본문은 newsct_article 영역을 찾아 진짜 기사 본문만 추출한다. - 광고·기자정보·저작권 문구 등 불필요한 텍스트는 제외한다. - 가져온 본문을 body 칼럼으로 추가한다. - 결과 저장: news_YYYYMMDD_HHMMSS-body.xlsx # 제약 — 안정성 - 요청 실패 시 재시도하고, 호출 사이에 짧은 대기를 둔다. - 본문 수집은 건수가 많으니 중간 저장(체크포인트)을 한다.
3단계 결과 — 네이버 필터 엑셀
도메인 필터본 news_..-naver-filtered.xlsx — 링크가 n.news.naver.com인 338건만
3단계 결과 — 본문 엑셀
본문 수집본 news_..-body.xlsxbody 칼럼에 기사 본문이 채워진다

"진짜 본문만"이라는 한 마디가 코드에서는 본문 컨테이너를 골라내는 파서로 구현됩니다. Codex가 만든 본문 추출 부분입니다.

본문 추출 코드
본문 추출 코드 — dic_area/newsct_article 영역만 모으고, 광고·기자정보를 걸러낸 뒤 실패하면 og:description으로 대체

4단계 — 본문 키워드로 키워드별 엑셀 분류

마지막으로, 본문에 어떤 계열사가 등장하는지에 따라 기사를 갈라 둡니다. 담당자가 자기 계열사 파일만 열어 보면 되도록.

4단계 입력 프롬프트
# 규칙 — 분류 - 3단계 본문(body)에 계열사 키워드가 포함되어 있으면, 키워드별로 따로 모은다. - 키워드마다 별도 엑셀 파일을 만든다: news_YYYYMMDD_HHMMSS-body-{키워드}.xlsx # 제약 — 파일명 - 파일명에 쓸 수 없는 문자는 안전한 문자로 치환한다.
4단계 결과 — 키워드 분류 엑셀
키워드 분류본 news_..-body-우리카드.xlsx — 본문에 "우리카드"가 등장한 기사만 모인다
사례

통합 바이브코딩 프롬프트

금융 · 모니터링

학습 안내읽기. 1~4단계에서 검증한 지시를 하나로 합친 최종 프롬프트입니다. 단계가 곧 "처리 단계와 산출물" 목록으로 들어가 있다는 점을 보십시오 — 한 번 검증해 둔 단계를 합치면 이렇게 재현 가능한 한 장짜리 명세가 됩니다.

다음부터는 키워드만 바꿔 이 한 장을 던지면 같은 도구가 다시 만들어집니다. 5단계는 "새 기능"이 아니라 1~4단계에서 검증한 지시를 빠짐없이 합친 통합본입니다.

5단계 — 통합 프롬프트 (한 번에 완성)
# 목표 네이버 뉴스 모니터링 에이전트를 만든다. 키워드 수집 → 네이버 도메인 필터 → 본문 수집 → 키워드별 분류까지 한 번의 실행으로 처리하는 파이썬 프로그램 (pandas, openpyxl 사용). # 입력 파일 - woori_affiliates.md : 검색 키워드(계열사명), 한 줄에 하나 (빈 줄·# 주석은 무시) - naver_api_credentials.md : NAVER_CLIENT_ID / NAVER_CLIENT_SECRET · API 키는 코드에 하드코딩하지 말고 이 파일에서 읽는다. # 처리 단계와 산출물 (한 번 실행은 같은 시각 타임스탬프로 outputs 폴더에 저장) 1. 네이버 검색 API(뉴스)로 키워드별 뉴스를 최신순(sort=date)으로 수집. - 호출당 100건(display), start 는 최대 1,000까지 페이지를 넘기며 모은다. - 전체 1,000건에 도달하면 멈춘다 (개발 중에는 속도 확보를 위해 1,000건만). - 같은 link 가 여러 키워드에서 나오면 중복 저장하지 않고 matched_keywords 에 합친다. → news_YYYYMMDD_HHMMSS-full.xlsx 2. link 에 'n.news.naver.com' 이 포함된 행만 필터. → news_YYYYMMDD_HHMMSS-naver-filtered.xlsx 3. 필터된 각 link 에 접속해 기사 본문을 가져와 body 칼럼을 추가. - 본문은 newsct_article(본문 영역)만 추출하고, 광고·기자정보·저작권 문구 등 불필요한 텍스트는 제외한다. - 본문을 못 찾으면 og:description 으로 대체한다. → news_YYYYMMDD_HHMMSS-body.xlsx 4. body 에 계열사 키워드가 포함되면 키워드별로 분리 저장. - 파일명에 쓸 수 없는 문자는 안전한 문자로 치환한다. → news_YYYYMMDD_HHMMSS-body-{키워드}.xlsx # 출력 규격 (엑셀 칼럼) keyword, matched_keywords, title, originallink, link, description, pubDate (3·4단계 파일은 맨 끝에 body 칼럼을 추가) # 제약·안정성 - 요청 실패 시 재시도하고, API 호출·본문 수집 사이에 짧은 대기를 둔다. - 본문 수집은 건수가 많으니 중간 저장(체크포인트)을 한다. - 실행: python naver_news_monitor.py (--max-results, --output-dir 등 옵션으로 조정 가능하게)
왜 마지막에 합치나. 처음부터 이 한 장을 던질 수도 있지만, 그러면 본문 추출이 빗나갔을 때 어디를 고칠지 막막합니다. 작게 검증 → 통합 순서가 디버깅 비용을 줄이고, 완성 후에는 이 한 장이 "다시 만들기" 버튼이 됩니다.
사례

코드와 산출물 확인

금융 · 모니터링

학습 안내열어 보기. 첨부된 코드와 단계별 엑셀을 직접 여십시오. 코드를 한 줄씩 이해할 필요는 없습니다 — "내 프롬프트의 어떤 문장이 코드의 어디가 됐는지" 한두 곳만 짚어 보면 됩니다.

통합 프롬프트 한 장이 만들어 낸 것은 약 480줄짜리 단일 파이썬 파일 하나입니다. 핵심 두 부분 — API 수집과 본문 추출 — 만 코드 캡쳐로 보겠습니다.

API 수집 코드
API 수집 코드 — display(호출당 100건)·start로 페이지를 넘기며 최신순(sort=date)으로 1,000건까지 모은다
한 번 실행 → outputs 폴더에 떨어지는 파일들
1단계
news_..-full.xlsx — API 검색 결과 전체(최대 1,000건)
3단계 ①
news_..-naver-filtered.xlsx — 네이버 도메인 기사만
3단계 ②
news_..-body.xlsx — 본문(body) 칼럼이 채워진 전체
4단계
news_..-body-{키워드}.xlsx — 계열사별로 갈라 둔 파일들

아래 파일들을 직접 열어 프롬프트와 대조해 보십시오. 엑셀은 가볍게 볼 수 있도록 일부 행만 추린 샘플이며(본문은 길어 일부 잘림), 코드·설정 파일은 실제 완성본입니다.

실행 방법
pip install -r requirements.txt
python naver_news_monitor.py
# 옵션: python naver_news_monitor.py --max-results 1000 --output-dir outputs
사례

응용 — 모니터링 3종

공통 · 모니터링

학습 안내고르기. 같은 파이프라인에서 키워드 목록만 바꾸면 용도가 통째로 달라집니다. 셋 중 내 업무에 가장 가까운 하나를 골라, 키워드 10개를 머릿속으로 채워 보십시오.

응용 1자사 보도자료 모니터링

회사명·브랜드·주요 임원명·신상품명을 키워드로 두면, 자사가 언론에 어떻게·얼마나 노출됐는지 매일 자동 집계됩니다. 본문까지 모으므로 단순 노출 건수가 아니라 맥락(긍정/부정·어떤 사안)까지 검토할 수 있습니다.

응용 2경쟁사 활동 모니터링

경쟁사명·경쟁 제품명·업계 핵심 인물을 키워드로 두면 신제품 출시·제휴·인사·투자 동향을 한 폴더에서 추적합니다. 키워드 파일을 "우리 vs 경쟁 3사"로 구성하면 점유율 체감 비교도 가능합니다.

응용 3AI·산업 트렌드 모니터링

"생성형 AI", "온디바이스 AI", "전고체 배터리"처럼 기술·산업 키워드를 두면 분야 트렌드를 자동 스캔합니다. 본문을 모아 두면 그대로 주간 동향 요약·리서치의 입력 자료가 됩니다.

사례

다른 API로 확장

공통 · API 확장

학습 안내아이디어 읽기. "수집 → 필터 → 가공 → 저장/알림"이라는 뼈대는 그대로 두고 데이터 원천(API)만 교체하는 사고 실험입니다. 각 카드에서 "키워드에 해당하는 것"이 무엇으로 바뀌는지 짚어 보십시오.

확장 1증권 API — 주가·거래량 모니터링 + 뉴스레터

증권사 오픈 API(예: 한국투자증권 KIS Developers)로 관심 종목의 주가·거래량·등락을 수집합니다. 임계치(예: 전일比 ±5%) 돌파 시 알림을 보내고, 종목별 뉴스(이 장의 네이버 수집)와 합쳐 매일 아침 뉴스레터를 자동 발송합니다.

확장 2공공 API — 서울시 건축 인허가 물량 모니터링

공공데이터포털·서울 열린데이터광장의 건축 인허가 데이터로 자치구·용도별 인허가 물량을 주기적으로 수집합니다. 전월 대비 급증 지역을 자동 표시하면 영업·입지 분석의 선행 지표가 됩니다.

확장 3나라장터 OpenAPI — 관심 입찰 모니터링

조달청 나라장터 OpenAPI로 관심 분야 입찰공고를 수집·필터합니다. 업종·금액·지역 조건으로 거른 뒤 마감 임박 공고를 알림으로 받으면, 흩어진 공고를 매일 손으로 검색하던 일이 사라집니다.

공통 골격. 세 확장 모두 이 장의 코드 구조(인증정보 분리 → 수집 → 필터 → 저장)를 그대로 따릅니다. 바뀌는 것은 ① 호출할 API ② 필터 조건 ③ 마지막 단계(엑셀 저장 대신 알림/뉴스레터) 세 군데뿐입니다. Make·n8n 같은 노코드 자동화 도구와 연결하면 알림·발송 단계를 코드 없이 붙일 수 있습니다.
응용

응용 — 알림과 자동 실행

학습 안내선택. 미션 1이 가장 가치 있습니다 — 키워드를 내 업무로 치환하는 순간 이 도구가 내 자산이 됩니다. 2·3은 여유가 될 때.

MISSION 1내 업무 모니터링으로 치환

"계열사 14개"를 본인 업무의 키워드 세트로 바꿔 보십시오 — 자사 브랜드 + 경쟁 3사, 또는 담당 산업의 기술 키워드 10개. 키워드 파일만 바꿔 같은 결과 구조가 나오는지 확인하는 것이 핵심입니다.

MISSION 2요약·알림 한 단계 붙이기

마지막에 "키워드별 엑셀의 제목을 묶어 5줄로 요약"하는 단계를 프롬프트로 추가하거나, 새 기사가 있으면 메일·슬랙으로 알리는 단계를 붙여 보십시오. 발송 단계는 노코드 자동화 도구로 연결할 수도 있습니다.

MISSION 3매일 자동 실행

윈도우 작업 스케줄러(또는 cron)에 python naver_news_monitor.py를 매일 아침으로 등록해, 사람이 누르지 않아도 도는 진짜 "에이전트"로 만드십시오. 날짜가 파일명에 들어 있으니 실행분이 덮어쓰이지 않고 차곡차곡 쌓입니다.

과정 정리
  • "문서를 만드는 바이브코딩"과 "돌아가는 도구를 만드는 바이브코딩"의 차이를 한 문장으로 설명할 수 있다
  • 큰 명세를 5단계로 나눠 만들고 마지막에 통합하는 이유를 설명할 수 있다
  • 프롬프트를 역할·입력·규칙·출력·제약 다섯 맥락으로 정리할 수 있다
  • 수집 → 필터 → 본문 → 분류 파이프라인의 각 단계 산출물을 안다
  • 키워드 교체(자사·경쟁사·트렌드)와 API 교체(증권·공공·나라장터)로 응용 방향을 잡았다