데이터센터 냉각 솔루션 수요 확대, 고효율 장비 경쟁 본격화
기사 제목과 본문이 임베딩되어 비슷한 주제 후보로 묶인다.
실제 프로젝트 사례 01
NewsHub는 여러 뉴스 소스에서 기사를 가져온 뒤, 비슷한 기사끼리 묶고, LLM이 “이 묶음이 진짜 의미 있는 주제인가”를 검수하게 만든 시스템이다. 초보자에게는 뉴스 공장으로 설명하면 쉽다. 원재료는 기사, 컨베이어벨트는 파이프라인, 최종 상품은 뉴스레터다.
수집된 기사 128개 중 의미가 가까운 기사 7개가 같은 묶음으로 올라왔다.
기사 제목과 본문이 임베딩되어 비슷한 주제 후보로 묶인다.
키워드가 달라도 의미가 가까우면 같은 후보 묶음으로 올라온다.
LLM은 묶음이 실제 뉴스레터 주제로 쓸 만한지 keep/reject를 판단한다.
공개 강의용 안전 재현 화면이다. 실제 기사·구독자·운영 데이터 대신, 제목과 날짜가 있는 동일 카드 레이아웃으로 NewsHub 흐름을 보여준다.
한 줄 지도
뉴스를 사람이 매일 훑어보는 일을 줄이기 위해, 수집부터 요약·발송까지 순서를 정해 둔 시스템이다.
Next.js 화면이 토픽, 필터, 검색, 구독 설정을 보여준다. 프론트엔드는 손님이 보는 매장 진열대다.
FastAPI와 cron 작업이 수집, 클러스터링, 요약, 뉴스레터 생성을 순서대로 실행한다.
기사, 토픽, 뉴스레터 초안, 구독자 설정, AI 비용 로그가 PostgreSQL에 저장된다.
Pipeline
파이프라인은 일을 순서대로 흘려보내는 컨베이어벨트다. 각 단계가 맡은 역할만 이해하면 전체 구조가 잡힌다.
Naver, Google RSS, Baidu, Global RSS, HR/ER RSS에서 새 기사를 가져온다.
기사 제목과 본문을 의미 좌표로 바꾼다. 비슷한 기사는 좌표가 가까워진다.
HDBSCAN이 가까운 기사를 먼저 묶고, LLM이 주제가 맞는지 검수한다.
Fact, Top Story, Headlines, Insights, Glossary를 단계별로 만든다.
승인된 결과가 프론트 화면, 이메일, 운영 도구로 나간다.
AI 기본 개념 연결
문장 전체를 숫자 좌표로 바꿔서 “이 기사와 저 기사가 같은 이야기인가”를 거리로 비교한다.
키워드가 똑같지 않아도 의미가 비슷하면 가까운 후보로 올라온다. 사람이 기사 더미를 주제별로 나누는 느낌이다.
LLM은 후보 기사 묶음과 규칙을 읽고 keep/reject, 제목, 요약, 인사이트를 만든다.
뉴스 API, OpenAI embedding API, Gemini/Claude 호출, 이메일 발송 API를 기능별로 부른다.
DB는 장부다. 기사 장부, 토픽 장부, 뉴스레터 장부, 비용 영수증 장부가 따로 있다.
input_tokens, output_tokens, estimated_cost_usd를 남겨야 어느 기능이 돈을 쓰는지 볼 수 있다.
Prompt Example
프롬프트는 AI에게 주는 작업지시서다. 여기서는 실제 운영 문구를 그대로 노출하지 않고, 구조와 판단 기준을 보이게 재작성했다.
역할: 뉴스 클러스터 검수자
입력:
- company_profile: 타깃 회사와 계열사 정보
- candidate_articles: 같은 주제로 묶인 기사 후보
- recent_topics: 최근 이미 만든 토픽 목록
판단 규칙:
- 타깃 회사가 주인공인지 확인한다.
- 단순 주가, 투자 의견, 광고성 문장은 reject한다.
- 같은 이야기가 최근 토픽에 있으면 중복으로 표시한다.
출력 JSON:
{
"decision": "keep | reject | duplicate",
"topic_title": "짧은 주제명",
"relevance_score": 0.0,
"reason": "판단 이유"
}
Stage 1. Fact extraction
원문 기사에서 사실, 인물, 수치, 출처를 뽑는다.
Stage 2. Top Story
가장 중요한 흐름 하나를 3문단으로 쓴다.
Stage 3. Headlines
여러 토픽을 짧은 제목과 근거 문장으로 정리한다.
Stage 4. Insights
단순 요약이 아니라 왜 중요한지 설명한다.
Stage 5. Glossary
어려운 용어를 쉬운 한국어로 풀어준다.
Call → Result
API 호출은 식당 주문서와 비슷하다. 요청서에 재료와 원하는 결과를 적어 보내면, 응답서로 결과가 돌아온다.
{
"model": "text-embedding-3-small",
"operation_type": "article_embedding",
"input": [
"A사가 신규 냉각 솔루션을 공개했다...",
"A사의 데이터센터 장비 수주가 증가했다..."
]
}
{
"article_id": "article_1029",
"embedding": "[0.018, -0.042, ...]",
"nearest_topic": "data_center_cooling",
"distance": 0.14,
"usage_log": {
"input_tokens": 128,
"estimated_cost_usd": 0.00001
}
}
Context Stack
컨텍스트는 AI 앞에 펼쳐진 책상이다. NewsHub는 기사 묶음, 회사 규칙, 최근 토픽, 출력 스키마를 책상 위에 올린다.
뉴스 검수자의 역할, 금지 규칙, JSON 출력 형식을 고정한다.
타깃 회사, 계열사, 경쟁사, 제외해야 할 투자성 기사 기준을 넣는다.
임베딩과 HDBSCAN으로 묶은 기사 제목·본문·출처를 넣는다.
최근 만든 토픽을 넣어 중복 생성을 줄인다.
keep/reject, 토픽명, 근거, 비용 로그가 결과로 남는다.
DB View
| 장부 | 역할 | 초보자 비유 |
|---|---|---|
| news_articles | 수집한 원문 기사 저장 | 원재료 창고 |
| news_topics | 묶어서 만든 뉴스 주제 저장 | 분류된 상자 |
| email_newsletters | 완성된 뉴스레터 저장 | 완제품 박스 |
| newsletter_research_log | 인사이트 조사 과정 기록 | 조사 노트 |
| llm_usage_logs | AI 사용량과 비용 기록 | 영수증철 |
강의 포인트
먼저 임베딩과 클러스터링으로 후보를 줄인다. AI에게 모든 기사를 다 읽히면 비용이 커진다.
관련 기사와 최근 토픽을 찾아 컨텍스트에 넣는 것도 넓은 의미의 RAG 흐름으로 볼 수 있다.
AI 앱은 눈에 안 보이는 돈이 새기 쉽다. 그래서 모든 유료 호출에는 사용량 장부가 있어야 한다.