GBT
한국외국어대학교Global Business & Technology
GenAI 특강 · 반도체 뉴스 주간 브리핑
목차 강의 홈 ↗
8H · 통합 실습 — 프롬프트 + 컨텍스트 + RAG

글로벌 반도체 뉴스
자동 수집 & 주간 브리핑

이 실습이 끝나면, 글로벌 반도체 뉴스를 매일 자동 수집·분류·요약하고 매주 월요일 아침 텔레그램으로 주간 경쟁사 브리핑을 보내는 시스템이 생긴다. 크롤링 → 분류 → 요약 → 리포트 → 자동화까지, 앞에서 배운 모든 기법을 하나로 결합하는 종합 프로젝트다.

8H 종합 실습바이브코딩 — 코드는 AI가 작성Supabase + Gradio + 텔레그램5단계 파이프라인
0
시나리오 · 전체 흐름 · 준비

사람이 뒤지던 뉴스를 시스템이 뒤지게 한다

다섯 단계의 파이프라인을 먼저 그리고, 모니터링 대상과 뉴스 소스를 정한 뒤, 저장소(Supabase 테이블)를 준비한다.

SCENARIO

"지난주에 TSMC랑 NVIDIA 쪽에서 뭔가 있었나요?"

월요일 아침 회의에서 이런 질문이 나온다. "지난주에 TSMC랑 NVIDIA 쪽에서 뭔가 있었나요? SK하이닉스 HBM 관련 뉴스는요?" 지금은 사람이 Reuters·TechCrunch·Nikkei를 일일이 뒤져 정리한다. 이 실습을 마치면 시스템이 자동으로 수집하고, AI가 정리해서, 월요일 아침 텔레그램으로 브리핑이 도착한다.

지금 (수동)담당자가 매주 뉴스 사이트 여러 곳을 돌며 기사를 찾고, 읽고, 요약해서 정리한다. 시간이 들고, 빠뜨리는 기사가 생긴다.
완성 후 (자동)시스템이 매일 자동 수집하고, AI가 분류·요약·리포트 작성까지 마친 뒤 월요일 아침 텔레그램으로 발송한다.

이번에도 코드를 직접 작성하지 않는다(바이브코딩). 설계를 이해하고, 단계마다 AI에게 정확히 요청하고, 결과를 확인하는 것이 우리의 일이다.

PIPELINE

전체 흐름 — 5단계 파이프라인

각 단계가 독립된 파일 하나로 만들어지고, 마지막에 app.py가 전부 통합한다. 앞의 실습에서 배운 기법이 단계마다 하나씩 들어간다.

단계모듈하는 일
Step 1 🔵RSS 크롤러글로벌 반도체 뉴스를 매일 자동 수집
Step 2 🟡분류 & 저장기업별·카테고리별 분류 후 Supabase 저장
Step 3 🟢AI 요약각 기사를 LLM이 한국어 1문장 요약
Step 4 🟣리포트 생성주간 경쟁사 브리핑 리포트 자동 작성
Step 5 🏆대시보드 + 발송Gradio 대시보드 + 텔레그램 주간 리포트

모니터링 대상 기업

NVIDIA / AMD / Intel / TSMC / SK하이닉스 / Qualcomm (+Samsung)

뉴스 소스 (RSS)

Reuters Technology / TechCrunch / Ars Technica / The Verge / Semiconductor Engineering

SETUP

준비 — 폴더, 패키지, Supabase 테이블

작업 폴더 semi_monitor를 만들고 패키지를 설치한다. Supabase 계정과 HuggingFace 토큰이 필요하다.

pip install gradio apscheduler supabase requests beautifulsoup4 huggingface_hub -q

Supabase에 기사 저장용 테이블을 만든다. SQL Editor에서 아래를 실행한다.

create table articles (
  id           bigserial primary key,
  title        text,
  url          text unique,
  source       text,
  published_at timestamptz,
  content      text,
  companies    text[],
  category     text,
  summary_ko   text,
  created_at   timestamptz default now()
);
컬럼역할
companies관련 기업 배열. 예: ["NVIDIA","TSMC"]
category실적 · 신제품 · M&A · 공급망 · 규제 · 기술 중 하나
summary_koLLM이 생성한 한국어 요약
urlunique 제약 — 같은 기사가 두 번 저장되는 것을 막는 중복 방지 장치
해설

파이프라인의 각 단계는 이 테이블 하나를 사이에 두고 연결된다. 크롤러는 행을 추가하고, 요약기는 summary_ko가 비어 있는 행을 채우고, 리포터는 최근 7일치를 읽는다. 단계끼리 직접 호출하지 않고 데이터베이스를 매개로 느슨하게 연결했기 때문에, 한 단계가 실패해도 나머지는 계속 동작한다.

1
STEP 1 🔵 · crawler.py

RSS 크롤러 — 뉴스를 자동으로 긁어온다

로그인도, 복잡한 HTML 파싱도 필요 없다. RSS라는 표준 형식 덕분에 XML 하나로 최신 기사 목록을 받는다.

CONCEPT

RSS: 뉴스 사이트가 새 기사를 알려주는 표준 형식

RSS는 뉴스 사이트가 새 기사를 외부에 알려주는 표준 형식이다. 로그인이나 복잡한 파싱 없이 XML로 최신 기사 목록을 받을 수 있다. 5개 소스에서 하루 50~200건이 들어온다.

소스RSS 주소
Reuters Technologyhttps://feeds.reuters.com/reuters/technologyNews
TechCrunchhttps://techcrunch.com/feed/
Ars Technicahttps://feeds.arstechnica.com/arstechnica/technology-lab
The Vergehttps://www.theverge.com/rss/index.xml
Semiconductor Engineeringhttps://semiengineering.com/feed/
반도체 업계 뉴스를 RSS 피드에서 수집하는 크롤러를 만들어줘.

RSS 소스 5개:
- Reuters Technology: https://feeds.reuters.com/reuters/technologyNews
- TechCrunch: https://techcrunch.com/feed/
- Ars Technica: https://feeds.arstechnica.com/arstechnica/technology-lab
- The Verge: https://www.theverge.com/rss/index.xml
- Semiconductor Engineering: https://semiengineering.com/feed/

- xml.etree.ElementTree로 RSS 파싱
- 각 기사: title, url, published_at, description
- 반도체 관련 필터 키워드: semiconductor, chip, GPU, CPU, NVIDIA, AMD, Intel, TSMC, Samsung, Hynix, Qualcomm, HBM, wafer, foundry, fab
- 함수 fetch_articles(), 소스별 수집 건수 출력
파일명: crawler.py

확인 포인트

  • crawler.py가 생성되고 fetch_articles() 함수가 있다
  • 실행하면 소스별 수집 건수가 출력된다
  • 키워드 필터를 통과한 기사만 남는다 — 반도체와 무관한 기사가 걸러진다
생각해보기

키워드 필터로 걸러낸 기사 중에는 여러 기업이 동시에 등장하는 기사도 있고, "chip"이라는 단어만 스치듯 나오는 기사도 있다. 지금 수집한 기사가 어느 기업의 뉴스인지는 아직 모른다. 다음 단계에서 기업 태깅과 카테고리 분류로 이 문제를 푼다.

2
STEP 2 🟡 · classifier.py

분류 & 저장 — 기사에 꼬리표를 달아 쌓는다

본문에서 기업명을 감지해 태깅하고, 뉴스 유형을 판별해 카테고리를 붙인 뒤 Supabase에 저장한다.

CONCEPT

기업 태깅 + 카테고리 분류

분류는 두 축이다. 기업 태깅은 본문에서 기업명(과 제품명)을 감지해 companies 배열을 채우고, 카테고리 분류는 키워드로 뉴스 유형을 판별한다. LLM 없이 코드 몇 줄의 키워드 매칭만으로 동작한다.

기업 태깅 키워드

기업감지 키워드
NVIDIAnvidia, nvda, h100, h200, blackwell, hopper, cuda
AMDamd, radeon, instinct, mi300, epyc
Intelintel, gaudi, xeon
TSMCtsmc, taiwan semiconductor
Samsungsamsung
SK Hynixhynix, hbm
Qualcommqualcomm, snapdragon

카테고리 분류 키워드 (우선순위 순)

카테고리감지 키워드
실적/재무revenue, earnings, profit, quarterly, forecast
신제품launch, announc, release, unveil
M&Aacquisition, merger, deal, acqui
공급망supply, shortage, production, capacity
규제/정책export, ban, restriction, sanction, regulat
기술/연구research, breakthrough, architecture, process
기타위 어디에도 해당하지 않는 경우
crawler.py의 수집 결과를 분류해서 Supabase에 저장하는 classifier.py를 만들어줘.

- 함수 classify_and_store(articles)
- 기업 태깅: 아래 키워드가 제목/본문에 있으면 companies 배열에 추가
  NVIDIA(nvidia, nvda, h100, h200, blackwell, hopper, cuda) /
  AMD(amd, radeon, instinct, mi300, epyc) / Intel(intel, gaudi, xeon) /
  TSMC(tsmc, taiwan semiconductor) / Samsung(samsung) /
  SK Hynix(hynix, hbm) / Qualcomm(qualcomm, snapdragon)
- 카테고리 분류(우선순위 순): 실적/재무(revenue, earnings, profit, quarterly, forecast) /
  신제품(launch, announc, release, unveil) / M&A(acquisition, merger, deal, acqui) /
  공급망(supply, shortage, production, capacity) / 규제/정책(export, ban, restriction, sanction, regulat) /
  기술/연구(research, breakthrough, architecture, process) / 기타
- Supabase articles 테이블에 저장, url unique 제약으로 중복은 skip(upsert)
- companies가 빈 기사는 저장하지 않음
- 신규/중복/제외 건수 출력
파일명: classifier.py

연결 테스트

크롤러와 분류기를 한 줄로 이어서 실행해 본다.

python -c "from crawler import fetch_articles; from classifier import classify_and_store; classify_and_store(fetch_articles())"

확인 포인트

  • Supabase 대시보드의 articles 테이블에 기사가 쌓인다
  • companies 배열과 category가 채워져 있다
  • 같은 명령을 다시 실행하면 중복 기사는 skip되고 신규만 추가된다
  • 신규/중복/제외 건수가 출력된다
생각해보기

SK Hynix의 감지 키워드에 hbm이 들어 있다. HBM은 SK하이닉스가 주도하는 제품이지만 Samsung도 만든다. 키워드 기반 태깅은 빠르고 공짜지만 이런 경계 사례에서 부정확하다. 정확도가 더 필요해지면 이 태깅 단계를 LLM 분류로 교체할 수 있다 — 어디를 코드로 하고 어디를 LLM으로 할지가 이런 시스템 설계의 핵심 판단이다.

3
STEP 3 🟢 · summarizer.py

LLM 한국어 요약 — 영문 기사를 한 문장으로

요약이 아직 없는 기사만 골라 LLM이 한국어 1~2문장으로 압축한다. 핵심 수치와 기업명은 반드시 살린다.

CONCEPT

summary_ko가 비어 있는 기사만 배치로 요약

summary_ko가 null인 기사를 찾아 LLM이 한국어로 요약해 채운다. 형식은 1~2문장, 핵심 수치 포함, 기업명은 원문 그대로. API 한도를 고려해 한 번에 최대 20건씩 배치로 처리한다.

요약 예시

영문 원문"NVIDIA reported record quarterly revenue of $22.1 billion, up 265%..."
한국어 요약"NVIDIA가 분기 매출 221억 달러(전년비 +265%)를 기록했으며, H100 AI 칩 수요 급증이 주요 원인."
summary_ko가 null인 기사를 한국어로 요약하는 summarizer.py를 만들어줘.

- 함수 summarize_pending()
- Supabase articles에서 summary_ko가 null인 기사를 가져와 한 번에 최대 20건 배치 처리
- 모델: Qwen/Qwen3-8B (HuggingFace)
- 요약 프롬프트: "다음 반도체 업계 뉴스를 한국어로 1~2문장 요약. 핵심 수치·기업명 반드시 포함"
- 요약 결과를 summary_ko 컬럼에 업데이트
- 오류 시 "[요약 실패]" 저장 후 다음 기사 계속 진행
파일명: summarizer.py

확인 포인트

  • 실행 후 summary_ko 컬럼이 한국어 요약으로 채워진다
  • 요약에 핵심 수치(매출액, 증가율 등)가 살아 있다
  • 기업명이 번역되지 않고 원문 그대로 유지된다
  • 일부 기사가 실패해도 전체가 멈추지 않고 "[요약 실패]"로 기록된다
생각해보기

오류가 나면 왜 그냥 멈추지 않고 "[요약 실패]"를 저장하고 계속할까. null로 남겨두면 다음 실행 때 같은 기사를 또 시도해 같은 오류로 또 멈춘다. 실패를 명시적으로 기록해야 파이프라인이 한 기사 때문에 전체를 못 도는 사태를 막는다. 자동화 시스템에서 오류 처리는 "멈추지 않고 흔적을 남기는 것"이 기본기다.

4
STEP 4 🟣 · reporter.py

주간 경쟁사 브리핑 리포트

최근 7일치 기사를 기업별로 집계하고, LLM이 애널리스트의 시각으로 주간 브리핑을 작성한다.

CONCEPT

집계는 코드가, 해석은 LLM이

최근 7일치 기사(요약이 있는 것만)를 기업별로 그룹핑해 LLM에게 넘기면, LLM이 "핵심 요약 → 기업별 동향 → 주목할 트렌드 → 다음 주 관전 포인트" 구조의 브리핑을 작성한다.

리포트 구조

섹션내용
📋 제목{날짜} 글로벌 반도체 업계 주간 브리핑
🔑 이번 주 핵심 요약3줄
📊 기업별 주요 동향기업당 기사 건수 + 2~3줄. 기사 없는 기업은 생략
📈 주목할 트렌드2~3개
👀 다음 주 관전 포인트2~3개
주간 브리핑 리포트를 생성하는 reporter.py를 만들어줘.

- 함수 generate_weekly_report()
- Supabase articles에서 summary_ko가 있는 최근 7일치 기사를 가져와 기업별로 그룹핑
- LLM 프롬프트: "당신은 반도체 산업 전문 애널리스트… [형식]
  📋 {날짜} 글로벌 반도체 업계 주간 브리핑 /
  🔑 이번 주 핵심 요약(3줄) /
  📊 기업별 주요 동향(건수+2~3줄, 없는 기업 생략) /
  📈 주목할 트렌드(2~3개) /
  👀 다음 주 관전 포인트(2~3개)"
- 결과를 reports/YYYY-MM-DD_weekly.md 파일로 저장
파일명: reporter.py

확인 포인트

  • reports/ 폴더에 YYYY-MM-DD_weekly.md 파일이 생성된다
  • 리포트가 📋 🔑 📊 📈 👀 다섯 섹션 구조를 지킨다
  • 기사가 없는 기업은 동향 섹션에서 생략된다
생각해보기

왜 원문 기사가 아니라 한국어 요약을 LLM에 넣을까. 일주일치 영문 기사 전문은 컨텍스트 한도를 넘기 쉽고 비용도 크다. Step 3에서 미리 압축해 둔 요약을 재료로 쓰면, 리포트 생성은 짧은 입력으로 끝난다. 단계마다 결과를 저장해 두는 파이프라인 구조가 여기서 효자 노릇을 한다.

5
STEP 5 🏆 · app.py + 배포

대시보드, 텔레그램, 그리고 완전 자동화

4개 모듈을 Gradio 앱 하나로 통합하고, 스케줄러가 사람 없이 돌게 한 뒤, HuggingFace Space에 올린다.

INTEGRATION

탭 3개 + 스케줄 2개

crawler → classifier → summarizer → reporter 4개 모듈을 app.py가 통합한다. 대시보드는 탭 3개, 자동 실행 스케줄은 2개다.

스케줄실행 내용
매일 06:00수집 + 분류 + 요약
매주 월 08:00리포트 생성 + 텔레그램 발송
crawler.py, classifier.py, summarizer.py, reporter.py 4개 모듈을 통합한 Gradio 앱 app.py를 만들어줘.

- 탭1 [📰 뉴스 피드]: 기업/카테고리/기간 필터 드롭다운 →
  gr.Dataframe(날짜, 제목, 기업, 카테고리, 한국어요약, 원문링크), 행 선택 시 영문 원문 표시
- 탭2 [📋 주간 리포트]: [리포트 생성] 버튼 → gr.Markdown으로 표시 /
  [텔레그램 발송] 버튼 / 과거 리포트 목록(reports/ 폴더) 로드
- 탭3 [⚙️ 모니터링 현황]: 마지막 수집 시각, 총 기사 수,
  기업별 기사 수 gr.BarPlot, [지금 수집] 버튼
- APScheduler로 스케줄 2개: 매일 06:00 수집+분류+요약 / 매주 월 08:00 리포트 생성+텔레그램 발송
- 텔레그램 메시지가 4096자를 초과하면 분할 발송
- 환경변수: SUPABASE_URL, SUPABASE_KEY, HF_TOKEN, TELEGRAM_TOKEN, TELEGRAM_CHAT_ID
파일명: app.py

확인 포인트

  • 탭 3개(뉴스 피드 / 주간 리포트 / 모니터링 현황)가 모두 동작한다
  • 뉴스 피드에서 필터를 바꾸면 표가 갱신되고, 행을 선택하면 영문 원문이 보인다
  • [리포트 생성] → 리포트가 화면에 표시되고, [텔레그램 발송] → 폰으로 도착한다
  • [지금 수집] 버튼으로 수동 수집이 되고, 기업별 기사 수 차트가 갱신된다
DEPLOY

HuggingFace Space 배포

폴더 전체를 HuggingFace Space에 올리면 24시간 돌아가는 서비스가 된다. Secrets 5개 등록을 잊지 말 것.

semi_monitor/
├── app.py
├── crawler.py
├── classifier.py
├── summarizer.py
├── reporter.py
└── requirements.txt   # gradio, apscheduler, supabase, requests, beautifulsoup4, huggingface_hub
  • Space Settings → Secrets에 환경변수 5개(SUPABASE_URL, SUPABASE_KEY, HF_TOKEN, TELEGRAM_TOKEN, TELEGRAM_CHAT_ID)를 등록한다.
주의 — 무료 Space는 잠든다

무료 Space는 접속이 없으면 슬립 상태가 되어 스케줄러도 함께 멈춘다. 슬립 없이 스케줄이 동작하려면 주기적으로 방문해 깨워 주거나, 유료 플랜($9/월)을 쓴다.

6
마무리 · 확장 아이디어

마무리 — 다섯 가지 부품, 하나의 시스템

이 실습에서 결합한 기법을 되짚고, 다음에 붙일 수 있는 확장 방향을 본다.

WRAP-UP

이번 실습에서 결합한 것

기법배운 것
RSS 크롤링인증 없이 표준 형식으로 뉴스를 수집한다
키워드 분류코드 몇 줄로 기업·카테고리 자동 태깅
LLM 요약영문 기사를 한국어로 압축한다
리포트 생성집계 + LLM으로 브리핑 작성을 자동화한다
스케줄러사람 개입 없이 시스템이 스스로 동작한다

확장 아이디어

  • Nikkei Asia · Bloomberg Tech RSS 추가 — 소스를 넓힌다
  • 감성 분석 → 기업 평판 점수화
  • 키워드 트렌드 차트 — HBM, CoWoS, 3nm 언급 빈도 추적
  • 경쟁사 비교 리포트 — NVIDIA vs AMD, TSMC vs Samsung
핵심 정리

하나. 자동화 시스템은 "수집 → 분류 → 요약 → 리포트 → 발송"처럼 단계로 쪼개고, 각 단계를 독립 모듈로 만들어 데이터베이스로 연결한다.

둘. 모든 것을 LLM에 맡기지 않는다. 태깅·분류처럼 규칙으로 되는 일은 코드가, 요약·브리핑처럼 언어 이해가 필요한 일은 LLM이 맡는다.

셋. 스케줄러가 붙는 순간 도구는 시스템이 된다. 사람이 실행 버튼을 누르지 않아도 월요일 아침 브리핑이 도착한다.

출처 원본 실습 노트(Notion): 글로벌 반도체 업계 뉴스 자동 수집 & 주간 브리핑 리포트 — 8H 종합 실습

한국외국어대학교 Global Business & Technology · GenAI 특강 「[8H] Prompt, Context 기반 AI 도구 실무 활용」.
이 자료는 단일 HTML 파일로 배포되는 실습 가이드다. 프롬프트 블록의 [복사] 버튼으로 AI 도구에 바로 붙여넣어 사용한다.