Wintersalmon | Blog

태스크 로그로 콘텐츠 퍼블리싱 워크플로우 구축하기

4 min read

수 개월치 상세한 엔지니어링 태스크 로그가 있습니다. 모든 기능 개발, 프로덕션 이슈, 아키텍처 결정이 docs/task-log/에 기록되어 있습니다. 그런데 이 내용이 블로그에 한 번도 올라간 적이 없었습니다.

문제는 마찰입니다. 엔지니어링 로그를 읽기 쉬운 포스트로 변환하는 일은 실질적인 작업입니다: 서사 구조 재편, 구현 세부사항 제거, 외부 독자를 위한 맥락 추가. 항상 “나중에” 하면 되는 일처럼 느껴졌습니다. 이 포스트는 그 마찰을 영구적으로 제거하는 과정에 관한 것입니다.

설계 결정

변환 로직을 어디에 두어야 할까요?

명백한 답은 빌드 스크립트입니다. 태스크 로그를 스캔하고 마크다운 템플릿을 생성하는 방식이죠. 하지만 핵심 작업은 “비정형 개발자 노트를 읽고 일관된 산문으로 합성하는” 것입니다. 이는 결정론적 계산이 아니라 편집 판단입니다.

올바른 도구는 Claude 에이전트입니다. 구체적으로 새로운 .claude/agents/content-publisher.md 에이전트(Sonnet 모델)를 하나의 목적으로 만들었습니다: 태스크 로그 항목을 읽고 블로그 초안을 생성한 후, 소스 자료를 GraphKnow 위키 파이프라인에 업로드하는 것입니다.

두 가지 핵심 결정

초안 파일에는 명명 규칙이 아닌 빌드 타임 게이트가 필요합니다.

블로그의 마크다운 파이프라인(build-markdown.ts)은 posts/의 모든 *.md 파일을 읽습니다. DRAFT-2026-04-23-<slug>.md를 커밋하면 깨진 슬러그로 렌더링됩니다. 수정은 loadPosts()의 한 줄입니다:

if (f.toLowerCase().startsWith("draft-")) return false;

이제 DRAFT- 접두사는 사회적 규칙이 아닌 빌드 타임 신호입니다. 초안은 커밋되고(gitignore 아님), 워크트리 전체에서 유지되며, PR에서 검토할 수 있고, 이름 변경이 일어날 때까지 라이브 블로그에 절대 올라가지 않습니다.

발행 상태는 태스크 로그 프런트매터가 아닌 JSON 매니페스트에 속합니다.

태스크 로그는 단일 파일이 아닙니다. 많은 항목이 decisions.md, implementation-log.md, open-questions.md를 가진 디렉토리입니다. 단일 프런트매터 소유자가 없습니다. docs/task-log/.publish-manifest.json의 JSON 매니페스트가 각 logId를 발행 상태에 매핑합니다.

GraphKnow 연동

GraphKnow는 이미 LLM 위키화 파이프라인을 갖추고 있습니다. 소스 문서를 업로드하면 워커가 변환하고, 위키파이 단계를 실행한 후 인덱싱합니다.

GraphKnow 연동은 단순한 curl 호출입니다:

curl --request POST "${GRAPHKNOW_URL}/api/sources" \
  --header "Authorization: Bearer ${GRAPHKNOW_BEARER_TOKEN}" \
  --form "file=@${FILEPATH};type=text/plain"

발행 플로우

content-publisher 에이전트 (logId)
  → docs/task-log/<logId>/ 읽기
  → apps/blog/posts/DRAFT-<date>-<slug>.md 작성
  → GraphKnow에 업로드 (토큰 설정 시)
  → .publish-manifest.json 업데이트

/publish-draft <slug>
  → 미리보기 표시, 확인 대기
  → DRAFT- 파일을 프로덕션 파일명으로 이름 변경
  → bun run --filter @cloudnest/blog build:markdown 실행
  → 매니페스트 업데이트: blogStatus → "stag"

이 포스트

이 포스트가 첫 번째 실제 엔드투엔드 실행이었습니다. content-publisher 에이전트가 20260423-content-publishing-flow/의 태스크 로그 디렉토리를 읽고 이 초안을 생성했습니다. 편집 후 이 결과물을 보고 계십니다.

백로그는 content-publisher --all-unpublished 하나면 됩니다. #blog #meta #graphknow #workflow


Hungjoon

I'm Hungjoon, a software engineer based in South Korea. This is my long-form notebook — homelab, Kubernetes, AI infra, and whatever else keeps me up at night.