반응형
🌐 NewsAPI + Cloudflare Workers로 GPT 뉴스 요약 시스템 만들기 (한글 번역 포함)
이 글에서는 GPTs에서 실시간 뉴스 요약을 받을 수 있도록 NewsAPI.org와 Cloudflare Workers를 활용한 프록시 서버를 만드는 과정을 안내합니다. 이를 통해 GPT와 외부 뉴스 API를 안정적으로 연동하며, 사용자 요청에 따라 최신 헤드라인을 한글 요약 형태로 반환할 수 있습니다.
✅ 프로젝트 개요
- 목표: GPTs를 통해 “비즈니스” 또는 “기술” 같은 카테고리를 입력하면 NewsAPI로부터 최신 헤드라인 5개를 받아 한글로 요약된 형태로 반환합니다. NewsAPI에서 제공하는 카테고리 종류를 쉽게 선택할 수 있도록 GPTs 메인 화면에 구성하며 영문으로 사용하거나 한글로 사용해도 NewsAPI 서버 전송에 문제가 없도록 하는 것을 포함합니다.
- 구성:
- NewsAPI: 뉴스 데이터 제공
- Cloudflare Workers: 프록시 서버 역할
- GPTs: 사용자 질의 및 요약 출력 담당
1. 🔑 NewsAPI 키 발급 및 설정
- NewsAPI.org 회원가입: Google 계정 등으로 가입을 쉽게 할 수 있습니다.
- 이메일 등록 후 무료 Developer 키 확인
- 발급된 API 키 예시:
6aaacee4321df4ba590a53cac6f1f0430
과 같은 형식의 API 키를 발급 받습니다.
📋 무료 요금제 제한 사항
- 일일 최대 요청 수: 100회
top-headlines
,everything
엔드포인트 사용 가능 (실시간 스트리밍은 불가)
⚠️ GPTs 내 Action 스키마로 키를 전달하면 오류가 날 수 있으므로, Cloudflare Workers에 하드코딩하는 방식이 가장 안정적입니다.
2. ⚙️ Cloudflare Workers 설정 및 코드 작성
2-1. 계정 및 프로젝트 생성
- Cloudflare 가입
- 좌측 메뉴 → Workers & Pages → Create Application 클릭
- 템플릿 중
Start with Hello World!
선택 - 편집 화면에서 아래 코드로 대체(worker.js 코드로 대체)
- Deploy 버튼을 클릭하면 오른쪽 상단에 Edit code를 다시 한번 클릭하면 편집 화면을 볼 수 있으며 필요한 코드를 입력합니다.
2-2. worker.js
전체 코드
export default {
async fetch(request, env, ctx) {
try {
const contentType = request.headers.get("Content-Type") || "";
if (!contentType.includes("application/json")) {
return new Response(JSON.stringify({
articles: [],
error: "Invalid Content-Type. application/json expected."
}), {
status: 400,
headers: { "Content-Type": "application/json" }
});
}
const raw = await request.text();
let reqBody;
try {
reqBody = JSON.parse(raw);
} catch {
return new Response(JSON.stringify({
articles: [],
error: "Invalid JSON format."
}), {
status: 400,
headers: { "Content-Type": "application/json" }
});
}
const category = reqBody.category || 'general';
const apiKey = 'NewsAPI Your Key';
const url = `https://newsapi.org/v2/top-headlines?category=${encodeURIComponent(category)}&country=us&pageSize=5&apiKey=${apiKey}`;
const res = await fetch(url, {
headers: {
'User-Agent': 'GPTNewsBot/1.0',
'Content-Type': 'application/json'
}
});
const news = await res.json();
if (!news.articles || !Array.isArray(news.articles)) {
return new Response(JSON.stringify({
articles: [],
error: "NewsAPI 응답에서 articles 항목이 누락되었습니다."
}), {
status: 200,
headers: { 'Content-Type': 'application/json' }
});
}
const articles = news.articles.map(a => ({
title: a.title,
description: a.description,
source: a.source.name
}));
return new Response(JSON.stringify({ articles, fetchedAt: new Date().toISOString() }), {
headers: { 'Content-Type': 'application/json' }
});
} catch (err) {
return new Response(JSON.stringify({
articles: [],
error: err.message
}), {
status: 500,
headers: { 'Content-Type': 'application/json' }
});
}
}
};
2-3. 배포 및 테스트
- Deploy 클릭 → 예:
https://small-sunset-33ff.username.workers.dev
형식을 제공합니다. - Postman에서 다음 JSON으로 테스트를 진행하면 서버 연동의 문제점이 있는지 체크 가능합니다.
{
"category": "technology"
}
3. 🤖 GPTs에 연동하기 (요약 프롬프트)
3-1. GPTs 구성하기
- GPTs의 이름, 설명, 대화 스타터 등을 꾸밉니다.
- GPTs의 지침 용으로 System Prompt에 아래처럼 입력합니다. (예시이므로 원하는 형태로 변경 가능합니다.)
당신은 “실시간 뉴스 알리미”입니다.
사용자가 “technology” 혹은 “business” 등 카테고리를 입력하면,
NewsAPI.org에서 최신 헤드라인 5개를 읽어와
제목·요약·출처를 표 형태로 반환하세요.
입력: business
출력:
| № | 제목 | 출처 |
|---|-----------------------------|------------|
| 1 | "AI 혁신, 새로운 장 열리다" | TechDaily |
| 2 | … | … |
3-2. GPTs Action Schema 작성
{
"openapi": "3.1.0",
"info": {
"title": "뉴스 프록시",
"version": "1.0.0"
},
"servers": [
{ "url": "https://small-sunset-3f89.yourname.workers.dev/" }
],
"paths": {
"/": {
"post": {
"operationId": "getNews",
"summary": "카테고리별 뉴스",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"category": { "type": "string" },
},
"required": ["category"]
}
}
}
},
"responses": {
"200": {
"description": "뉴스 결과"
}
}
}
}
}
}
3-2. 테스트
- NewsAPI에서 원하는 카테고리의 최신 뉴스를 가져오는지 확인합니다.
- Postman을 통해 URL과 통신을 확인할 수 있습니다.(선택)
- GPTs 미리보기 또는 만들어진 Apps을 통해 카테고리 입력을 합니다.
[Postman에서 서버 연동 확인 결과]
[GPTs에서 서버 연동 확인]
💡 캐싱 방지를 위해 worker.js 응답에 fetchedAt 타임스탬프를 추가합니다.
⚠️ 오류 방지 팁 및 FAQ
- ✅ Postman에서는 되는데 GPTs에서 안 되는 경우: GPTs 캐싱 or timeout 문제일 수 있음
- ✅ 데모 키로 간주되는 경우: GPTs가 apiKey를 전달하지 못했을 수 있음 → Worker에서 하드코딩이 안전
- ✅ 영문 카테고리만 허용됨:
"business"
,"technology"
,"health"
등으로만 지원되므로 한글 사용부분 추가되어야 함. - ✅ API 일일 제한 초과: NewsAPI 대시보드에서 사용량 확인 가능함.
여기까지 이제 GPTs를 통해 사용자가 카테고리를 입력하면 Cloudflare Workers가 NewsAPI에 연결해 최신 뉴스 5개를 가져오고, 이를 요약한 형태로 출력할 수 있는 시스템이 완성되었습니다. GPT 자동화, 외부 API 연동, 한글 요약 등 다양한 GPT 프로젝트에 이 구조를 이해하는 일은 본 주제에서 사용한 뉴스에 국한된 것은 아니므로 외부 API 자원 연동에 대한 의미와 필요한 절차들이 이해될 수 있도록 반복해서 만들어 보길 바랍니다.
반응형
'AI > 생성형AI' 카테고리의 다른 글
[생성형 AI]프롬프트 연습 도구들(AIStudio, Playground) (2) | 2025.05.12 |
---|---|
[GPT업무자동화](8)GPTs로 실시간뉴스 보기(Google Apps Script) (2) | 2025.05.08 |
[GPT업무자동화](6)GPTs에 메일 외부 자원 연동하기(Webhook) (0) | 2025.05.07 |
[GPT업무자동화](5)GPTs에 메일 외부 자원 연동(OAuth) (1) | 2025.05.06 |
[AI미래]GPT-5시대 우리의 준비 (5) | 2025.05.02 |