사례 5주차 2026-08-27 · 반도체·배터리·AI 뉴스 키워드 요약봇 연재

용어 사전에 용어가 아닌 게 쌓였다 — 봇에게 "용어 vs 이슈"를 가르친 하루

자동으로 자라던 용어 사전에 "K배터리 소재 경쟁력" 같은 분석성 항목이 섞이기 시작했다. 라벨을 넓히는 대신 봇의 출력에 "유형" 한 칸을 더 만들어, 사이트와 n8n 워크플로를 같은 기준으로 쪼갰다

한 줄 요약: 봇이 매일 채우는 “용어 사전”에 용어가 아닌 이슈·전망성 항목이 섞이기 시작했다. 사전 이름을 넓히는 쪽으로 때우지 않고, 봇의 JSON 출력에 유형(용어/이슈) 한 칸을 추가해서 저장 위치를 자동으로 가르도록 사이트와 n8n을 함께 고쳤다.

이런 분께 도움이 돼요: 자동화가 뱉는 결과물의 “종류”가 한 가지가 아니라는 걸 뒤늦게 깨달은 분, n8n에서 LLM에 새 출력 필드를 추가하려는 분, 그리고 “덮어쓰기 한 줄로 때울까 / 구조를 쪼갤까” 앞에서 망설여 본 분.

Before — 용어 사전인데 용어가 아니다

봇이 매일 오후 뉴스에서 키워드를 뽑아 용어 사전(반도체·배터리·AI 3페이지)에 쌓고 있었다(어제 만든 자동화). 그런데 배터리 페이지에 이런 항목이 올라왔다.

K배터리 소재 경쟁력 한국 배터리 기업들이 보유한 양극재·음극재 등 핵심 소재 기술력으로, 글로벌 ESS 시장에서 경쟁 우위를 결정짓는 요소입니다.

LFP 배터리, 46파이 원통형 배터리 옆에 두기엔 성격이 다르다. 이건 정의할 수 있는 단어가 아니라 분석·전망이다. 설명칸도 뜻풀이가 아니라 상황 요약으로 채워져 있었다.

원인은 분명했다. 봇 프롬프트가 “3개 섹터에서 가장 중요한 기사 하나씩 골라 키워드를 뽑아라”인데, 그날 뉴스가 용어 소개가 아니라 분석 기사면 억지로 용어 자리에 밀어 넣게 된다. 앞으로도 계속 나올 문제였다.

갈래 세 개 중 하나 고르기

갈래방법단점
1. 라벨만 넓히기용어 사전키워드 노트로 이름만 변경성격 다른 게 한 곳에 계속 섞임
2. 봇을 조인다진짜 용어인 날만 저장, 분석 기사인 날은 건너뜀빈 날이 생김, 정보 손실
3. 둘로 분리용어 사전은 순수 유지 + 이슈 노트 신설, 봇이 구분 저장작업량이 가장 많음

3번을 골랐다. 지난 하루에 “성격이 다른 것은 섞지 않는다”를 규칙으로 정해놓고, 이틀 만에 그걸 어기는 선택(1번)을 하고 싶지 않았다.

어떻게 했나 (따라 하실 수 있게)

1. 사이트 — 파일명 한 글자로 가른다

새 페이지 3개를 만들었다: issues-battery.md · issues-semiconductor.md · issues-ai.md. 그리고 “K배터리 소재 경쟁력”을 용어 사전에서 이리로 옮겼다.

핵심은 판정 규칙을 새로 만들지 않은 것이다. 원래 사이드바는 “주차 없는 글 = 봇이 자동 생성한 글”로 묶고 있었는데, 그 안에서 한 단계만 더 쪼갰다.

// 주차 0(봇 자동 생성) 안에서 파일명 앞부분으로 가름
const 자동생성 = weeks.find((w) => w.주차 === 0)?.items ?? [];
const 이슈노트 = 자동생성.filter((e) => e.slug.startsWith('issues-'));
const 용어사전 = 자동생성.filter((e) => !e.slug.startsWith('issues-'));

이 3줄을 사이드바·위키 첫 화면·전자책 세 군데에 똑같이 넣었다. getWikiGrouped(글 불러오는 공통 함수)는 안 건드렸다.

⚠️ 편집 전에 git pull부터. 봇이 하루에도 여러 번 이 저장소에 커밋하는데, 시작할 때 로컬이 커밋 8개만큼 뒤처져 있었다. 모르고 편집했으면 충돌로 시간을 날렸을 것이다.

2. n8n — LLM 출력에 유형 한 칸 추가

봇 워크플로의 위키 저장 흐름은 이렇다.

Wiki_LLM(JSON 생성) → Code(경로 조립) → HTTP GET(기존 파일 읽기)
  → Code(병합) → HTTP PUT(커밋)

(a) 프롬프트에 필드 추가Wiki_LLM 노드 프롬프트에 유형을 넣었다.

- 유형: "용어" 또는 "이슈" 중 하나.
    · "용어" = 뜻을 한 문장으로 정의할 수 있는 기술·제품·규격·공정·방식의 이름
      (예: LFP 배터리, 레이저 건조 기술, 차세대 HBM)
    · "이슈" = 하나의 명사로 딱 정의되지 않는 동향·전망·분석·쟁점
      (예: K배터리 소재 경쟁력, 미국 관세 영향, ESS 시장 전망)
    · 애매하면 "용어"로 한다.

(b) Structured Output Parser 스키마에도 추가 — 이걸 빠뜨리면 파서가 새 필드를 막는다. 예시 JSON의 각 섹터에 "유형": "용어" / "유형": "이슈"를 하나씩 넣어 패턴을 보여줬다.

(c) 경로 조립 Code 노드에서 분기 — 원래 저장 경로가 glossary-{섹터}.md로 고정이었다. 유형을 보고 갈랐다.

// 유형에 따라 저장 대상 페이지를 가른다 (이슈 = issues-, 그 외 = glossary-)
const isIssue = String(d.유형 || '').trim() === '이슈';
const file = `${isIssue ? 'issues' : 'glossary'}-${s.slug}.md`;
// path: `src/content/wiki/${file}`

병합 Code 노드는 안 건드렸다. 그 노드는 저장 경로를 meta.path로 그대로 받아 쓰고, 섹션 서식(## 제목 + 설명 + **최근 동향** + <details>)이 두 페이지 모두 똑같기 때문이다. 앞에서 경로만 갈라주면 나머지는 저절로 따라온다.

막힘 → 해결

커밋 목록에 빨간 X가 떴다

워크플로를 수동 실행하니 커밋이 3개 연달아 올라갔다(섹터별 저장 + 1.5초 간격 배칭). GitHub 커밋 목록에서 가운데 하나가 빨간 X.

3526e86  위키 자동 업데이트   ✓ 1/1
b7bfb9a  위키 자동 업데이트   ✗ 0/1     ← 이게 뭐지?
688033b  위키 자동 업데이트   ✓ 1/1

상태를 확인해보니 Canceled from the Vercel Dashboard였다. 커밋이 몇 초 간격으로 오니까 Vercel이 진행 중이던 앞 빌드를 자동 취소하고 마지막 것만 배포한 것이다. 오류가 아니라 정상 동작. 맨 마지막 커밋만 초록이면 된다.

결과 확인 — 진짜 갈렸나

첫 실행에서 이렇게 나뉘었다.

섹터유형저장된 파일항목
반도체용어glossary-semiconductor.mdQD-OLED
배터리이슈issues-battery.md분리막 사업 흑자전환
AI이슈issues-ai.md엔비디아 2분기 실적

“분리막 사업 흑자전환”, “엔비디아 2분기 실적” — 둘 다 정의할 수 있는 단어가 아니라 상황·이벤트다. LLM이 판정을 제대로 하고 있었다.

After

BeforeAfter
용어 사전용어 + 이슈가 뒤섞임정의 가능한 용어만
이슈 노트없음동향·전망·분석을 따로 축적
봇 판정”무조건 용어 1개”유형으로 스스로 분류해서 알맞은 페이지에 저장
사이드바2덩어리 (용어 사전 / 개발일지)3덩어리 (용어 사전 / 이슈 노트 / 개발일지)

📷 여기에 사이드바 3덩어리 스크린샷, n8n의 Code 노드 출력(pathissues-로 찍힌 화면)을 넣으면 좋아요.

배운 것 / 가져가실 것

배운 것왜 중요한가
자동화 결과물의 “종류”를 처음부터 하나로 가정하지 말 것용어 하나면 될 줄 알았는데, 실제로는 용어·이슈 두 종류였다
라벨을 넓혀 때우기 전에, 생성하는 쪽(봇)에 분류를 시킬 수 있는지 본다봇이 유형 한 칸만 더 뱉으면, 사이트는 파일명으로 자동 분류된다
n8n에서 LLM 출력 필드를 늘릴 땐 프롬프트 + Structured Output Parser 스키마를 세트로 고친다스키마를 안 고치면 파서가 새 필드를 버린다
병합/후처리 로직은 경로를 변수로 받게 짜두면 분기 비용이 0오늘 병합 노드를 한 줄도 안 고쳤다
봇이 커밋하는 저장소는 편집 전 git pull이 먼저시작 시 로컬이 8커밋 뒤처져 있었다
짧은 간격 연속 커밋 → Vercel이 중간 빌드 취소(빨간 X). 오류 아님마지막 커밋만 초록이면 배포는 정상

재사용 자산 — 용어/이슈 판정 프롬프트 조각 (다른 분류 자동화에도 응용 가능)

- 유형: "용어" 또는 "이슈" 중 하나.
    · "용어" = 뜻을 한 문장으로 정의할 수 있는 대상의 이름
    · "이슈" = 하나의 명사로 정의되지 않는 동향·전망·분석·쟁점
    · 애매하면 "용어"로 한다.

이 봇 자체는 반도체·배터리·AI 뉴스 키워드 요약봇에서, 봇이 자동으로 채우는 쪽은 배터리 용어 사전 · 배터리 이슈 노트에서 볼 수 있어요.