2026-08-30 ServiceOn Blog 작업일지입니다. 오늘은 2건의 작업을 진행했습니다.

n8n 워크플로우 (SO-블로그 파이프라인)

현상/기능

  • 카드는 잠시 빼자. 나중에 추가
  • 커버이미지는 뉴스 내 첫 이미지를 쓰고, 없으면 생성
  • 실행하면서 OpenAI·Claude 비용 알려 줄 것

현상/기능

  • 연결됐다 (Anthropic 자격 성공) → Claude를 파이프라인에 연결

현상/기능

  • 지금 버전 발행, 내용은 더 넣기
  • 신규 카드는 남기고 아침 카드만 삭제
  • 매거진 이슈를 여러 개로, 특정 이슈를 타이틀로 쓰지 말 것
  • Claude API는 어떻게 넣나

현상/기능

  • 뉴스 내용이 부실하다
  • 카드 + 매거진 둘 다
  • 오늘자 발행을 다시 써보고 괜찮으면 다음 스케줄 적용

작업

  • n8n `SO-블로그 파이프라인` (n8n-워크플로우): 카드 분기 연결 제거 + 카드 노드 disable (노드 삭제는 안 함)
  • `Extract Article Text`에 `firstImageUrl` (og:image → twitter:image → 본문 첫 img)
  • `Pick Cover Image` → `Has Article Cover`: 있으면 `Use Article Cover`, 없으면 `Generate Magazine Image`
  • `Pick Today Magazine`이 기사 URL 또는 생성 업로드 URL을 `magazineImage`로 전달
  • 실행 #49: Claude 출력이 8192토큰에서 잘려 파서가 Sample Title 저장. 한도 16384로 상향, 샘플/짧은 본문이면 `Validate Magazine Output`에서 중단
  • 실행 #50 success 후 publish (`e68ee68b-…`). 제목 「개발 도구부터 공공 정책까지 — 2026년 8월 30일 AI·IT 이슈 브리핑」, 본문 HTML 8335자, 커버는 기사 첫 이미지(생성 없음)
  • n8n `SO-블로그 파이프라인`: 매거진/카드 `AI Agent`와 Structured Output Parser 수정 모델을 `Claude Sonnet 4.6` (`claude-sonnet-4-6`)로 교체
  • 자격: `Anthropic account` (n8n-워크플로우)
  • 글 생성용 OpenAI Chat Model 4개 제거. `Generate Magazine Image` / `Generate Card Image`는 OpenAI 유지
  • publish 완료. 내일 06시부터 Claude로 글 생성
  • 매거진 프롬프트: 제목은 브리핑형(한 건 사건 금지), 이슈 4~5개, 본문 2200자+
  • 카드 프롬프트: 본문 800~1600자, 사실 불릿 5개
  • 당일 재실행은 오늘 카드만 갱신(신규 추가 없음). 스케줄(오늘 0건)일 때만 신규
  • 원문 본문 2200자, 모델 타임아웃 180초
  • 수동 실행 #48 success 후 publish. 매거진 `ca74c1a9-…` 제목 「AI 기술과 정책의 진화: 오늘의 주요 이슈 정리」, 이슈 4개, 본문 2753자
  • Claude 자격증은 n8n에 없음. UI에서 Anthropic API 추가 후 Chat Model 교체 필요
  • n8n `SO-블로그 파이프라인` (n8n-워크플로우) 초안 수정, **publish 안 함**
  • 원문 수집: `Resolve Article URL` → `Fetch Article Page` → `Extract Article Text` (본문 최대 1500자)
  • 매거진/카드 프롬프트: 상투적 가이드·빈말 금지, 원문 사실 중심. 매거진에 `aside.eli5`
  • 오늘 매거진은 기존 id로 갱신 (`Lookup Recent Magazines` → `Pick Today Magazine` → upsert)
  • 카드는 오늘 `source_url`이면 같은 id로 갱신, 아니면 신규. Limit 10. 본문 긴 기사 우선
  • category는 `ai_news`/`dev_history` slug (한글명 FK 실패)
  • 수동 실행 #47 success: 오늘 매거진 `ca74c1a9-…` 제자리 갱신. 카드는 오늘 URL 1건 갱신 + 피드 불일치로 신규 9건 추가
  • 구글 뉴스 RSS는 본문 추출 실패(제목만). 국내 articleView는 본문 확보

페이지 (태그 SQL/API + AdSense 슬롯·칩)

현상/기능

  • Google AdSense 빈 슬롯(플레이스홀더만, 가짜 배너 없음). 라벨은 항상 `광고`, 본문보다 작게
  • 홈/분류 피드: 리스트·카드 행 사이에만 인피드 슬롯
  • 매거진: h2 자막 뒤·출처/인용 앞. 표·리스트 안, ELI5(`쉽게 말하면`) 안/바로 위 금지
  • 카드 상세·포트폴리오·표에는 슬롯 없음. ca-pub 없어도 빈 라벨 슬롯. env 훅으로 이후 연결
  • 분류 칩: 전체 / 히스토리 / AI 뉴스. 파이프라인 저장명 `IT 개발 히스토리`·`AI 및 IT 소식` 매핑
  • 태그 2–4개를 목록 행·매거진/카드 상단에. 회사/인물 태그 UI 카피 없음. tags JSON 없어도 안전
  • 뉴스 분류(`관련 데이터.category`)는 유지. `tags` JSON 컬럼·upsert 마지막 인자 `p_tags JSON`
  • `ads.txt`를 env로 `https://blog.serviceon.kr/ads.txt` 제공. 가짜 ca-pub 금지
  • ELI5 라벨 `쉬게 말하면` → `쉽게 말하면`. 박스를 `post.summary`로 채우지 말 것
  • 헤더 내비·팔레트·레이아웃 신설 금지. n8n 수정 금지

작업

  • `AdSlot` + `useAdSense`/`getAdSenseConfig`: env 없으면 빈 `광고` 슬롯 (main #8 시각 유지)
  • 인피드: `CardNewsFeed`/`PostArchiveClient`/`BlogHomeClient` 지난 호/`TimelineFeed` — 행 사이
  • 매거진: `Eli5Box` 인트로 뒤, n8n-워크플로우 인아티클, 출처 앞 슬롯. 제목 아래·글 끝 슬롯 제거
  • `CardNewsGrid` 하단 광고 제거. 카드 상세·포트폴리오는 슬롯 없음
  • `CATEGORY_CHIP_OPTIONS` / `normalizeCategorySlug` / `parsePostTags` / `TagChips`
  • db: `mapPost`//`mockCall` tags 읽기·쓰기. upsert 11번째 인자 JSON 또는 null
  • admin: 포스트 폼 태그 입력, API upsert에 tags
  • web: `app/ads.txt/` + `buildAdsTxtBody` — env 없으면 주석 플레이스홀더
  • `Eli5Box` 라벨 `쉽게 말하면`. `post-ui` 정규식은 `쉽|쉬` 모두. `getMagazineEli5Text`는 요약 폴백 없음