학습허브 템플릿 기준으로 내 자동 발행 허브 점검하기
캐시 · AI 첫걸음 놀이터 · · 좋아요 0 · 답글 0
연재 AI 첫걸음 놀이터 4/12편
소개
강의에서 받은 학습허브 템플릿의 글 종류 여덟 가지를 매일 자동으로 발행하는 제 경제 브리핑 허브(econ-radar)에 대 보니, 세 칸은 채워져 있고 세 칸은 일부만, 로드맵과 계획 두 칸은 비어 있었습니다. 에이전트로 글을 자동 발행하면서도 그 기록이 어떤 구조로 쌓이는지는 따져 본 적이 없는 분께 도움이 될 것 같습니다.
AI놀이터 1주차는 MVP 실습에 들어가기 전에 "AI와 어떻게 배우고 어떻게 기록하는가"에 30분가량을 썼습니다(00:43~01:13). 스터디장이 나눠 준 학습허브 템플릿에는 순서가 정해져 있습니다. 매일 학습일지를 비공개로 쓰고, 거기서 소재를 뽑아 사례글로 다듬고, 사례글과 개념과 회고가 학습위키에 주차별로 쌓여 한 달 뒤 전자책이 됩니다. 스터디장은 사례글은 매일 안 써도 되지만 학습일지는 작업한 만큼 계속 남겨 달라고 했습니다. 그것이 AI가 내 일을 알게 되는 맥락이라는 이유였습니다.
저는 이번 기수에 이 스터디를 청강합니다. 입문 실습을 그대로 따라 하기보다, 6월부터 매일 돌아가는 제 허브가 이 순서에서 어느 칸을 채우고 있는지 세어 보기로 했습니다. 이 허브는 Claude Code가 클라우드에서 만들어 발행하고 저는 결과를 확인하는 구조라서, 템플릿이 말하는 "내가 쓰는 학습일지"와는 쓰는 주체부터 다릅니다. 그 차이가 숫자로 어디에 나타나는지 보고 싶었습니다.
진행 방법
사용 도구: Claude Code, Python 3, git, GitHub Actions
Step 1. 템플릿 내려받기와 기준 정하기
강의 0단계는 Codex로 learning-hub-template을 내려받는 것이었습니다. 저는 Claude Code에서 같은 저장소를 임시 폴더에 받았습니다.
/usr/bin/time -p git clone -q --depth 1 https://github.com/mumyungsee/learning-hub-template.git
git ls-files | wc -l; ls .claude/skills | wc -l; ls .agents/skills | wc -l
항목
값
내려받기
1.22초
마지막 커밋
2026-10-02 18:22 (c740de6)
파일
105개
학습메이트 스킬
10개 (학습일지, 개념정리, 계획문서, 로드맵, 주간종합, 프로젝트발견 등)
spec-kit 스킬
10개. 2주차용
템플릿 README는 글의 종류를 이렇게 나눕니다. 랜딩, 프로젝트 카드, 학습일지(비공개)가 각각 폴더 하나씩이고, 학습위키 안에서 로드맵, 계획, 개념, 사례, 회고 다섯이 종류: 값으로 갈립니다. 이 여덟 가지를 기준으로 삼았습니다.
Step 2. 허브 구조 세기와 칸 대응
econ-radar는 vault/ 폴더 아래에 발행 재료와 결과를 쌓습니다. 원격 저장소(origin/main) 기준으로 폴더별 파일 수를 먼저 셌습니다. 한글 파일 이름이 8진수 코드로 깨져 보이지 않게 core.quotepath=off를 켰습니다.
git fetch -q
git -c core.quotepath=off ls-tree -r --name-only origin/main | awk -F/ '$1=="vault"{print $2}' | sort | uniq -c | sort -rn
231 analysis
117 push
117 html
116 raw
116 daily
99 topics
95 email
18 reports
17 assets
17 _meta
3 blog-drafts
1 log.md
1 README.md
1 .obsidian
대응 기준은 두 가지로 정했습니다. 파일 이름과 폴더만 보고 내용은 읽지 않았고, 하루나 한 주 단위로 쌓이는 것은 학습일지나 회고 칸으로, 주제별로 누적되는 것은 개념 칸으로 봤습니다. 대응은 제 판단이라 그림 맨 위에 그렇게 적었습니다.
랜딩은 공개 첫 화면입니다.
kakyungkim.github.io/econ-radar/가 열려서(HTTP 200) 있음으로 봤습니다.프로젝트 카드는
vault/README.md하나입니다. 카드 형식은 아니라 일부로 봤습니다.학습일지는
vault/daily입니다. 하루 한 편씩 쌓이는 구조는 같지만 내용이 뉴스 발행본이라 제 작업 기록은 아닙니다. 일부로 봤습니다.개념은
vault/topics99개입니다. 주제별로 날짜 블록이 누적되고 9월 28일 이후 15개가 갱신됐습니다. 있음입니다.사례는
vault/blog-drafts3개입니다. paper-radar에도 초안 4개가 따로 있습니다. 일부입니다.회고는
vault/reports의 주간 동향 리포트입니다. 17주가 이어져 있습니다. 템플릿의 주간종합과 같은 형태라 있음으로 봤습니다.로드맵과 계획은 아래 Step 3에서 이름으로 찾았고 0개였습니다.
Step 3. 학습일지 칸의 빠진 날 찾기
학습일지 칸은 개수만으로는 부족하다고 봤습니다. 이 칸은 하루도 거르지 않는 것이 목적이어서, 6월 9일 첫 발행부터 지금까지 날짜가 빠진 곳을 세었습니다. 저장소는 읽기만 하는 스크립트(hub_check.py)로 셌습니다.
import os, re, subprocess, datetime as dt, unicodedata
def tree(repo, ref):
out = subprocess.run(["git", "-c", "core.quotepath=off", "ls-tree", "-r", "--name-only", ref],
cwd=repo, capture_output=True, text=True).stdout
return [unicodedata.normalize("NFC", t) for t in out.split("\n") if t]
def count(files, prefix, ext=".md"):
return len([f for f in files if f.startswith(prefix) and f.endswith(ext)])
econ = tree(os.path.expanduser("~/projects/econ-radar"), "origin/main")
paper = tree(os.path.expanduser("~/projects/paper-radar"), "origin/master")
dates = sorted(re.findall(r"^vault/daily/(\d{4}-\d{2}-\d{2})\.md$", "\n".join(econ), re.M))
first, last = (dt.date.fromisoformat(dates[0]), dt.date.fromisoformat(dates[-1]))
span = (last - first).days + 1
have = set(dates)
missing = [str(first + dt.timedelta(i)) for i in range(span) if str(first + dt.timedelta(i)) not in have]
weeks = sorted(set(re.findall(r"^vault/reports/(\d{4}-W\d{2})", "\n".join(econ), re.M)))
plan_like = [f for f in econ if not re.match(r"vault/(raw|daily|analysis|push|html|email)/", f)
and re.search(r"roadmap|plan|로드맵|계획", f, re.I)]
119일 가운데 115일이 있고 빠진 날은 6월 12일, 7월 22일, 8월 1일, 10월 1일 네 날이었습니다. 폴더에는 파일이 116개인데 날짜 이름 파일은 115개입니다. 하나는 날짜 이름이 아닌 파일이라 학습일지 칸의 개수에서 뺐습니다.
Step 4. 빠진 날의 원인 확인과 감시 장치 추가
네 날 중 10월 1일은 이번 주에 일어난 일이라 원인을 바로 찾을 수 있었습니다. 클라우드 예약 실행의 기록을 열어 보니 그날 18시 42분(KST)에 시작해 1초 만에 "주간 사용량 한도에 걸렸다"는 메시지로 끝나 있었습니다. 한도는 같은 날 19시에 풀렸습니다. 그런데 이 실행은 실패가 아니라 "성공(오류 있음)"으로 기록돼서 알림이 어디로도 가지 않았습니다. 나머지 세 날은 실행 기록을 거슬러 보지 않아 원인을 확인하지 못했습니다.
학습일지 칸을 하루도 거르지 않으려면 빠졌다는 사실을 그날 알아야 합니다. 그래서 10월 5일에 두 가지를 추가했습니다.
감시: GitHub Actions 워크플로
daily-watchdog.yml을 만들었습니다. 매일 22시(KST)에 그날의vault/daily/날짜.md가 있는지 보고, 없으면 제 텔레그램 개인 대화로 알립니다. 구독자가 있는 공개 채널로는 보내지 않습니다.재시도: 클라우드 루틴을 하나 더 만들었습니다. 20시 30분(KST)에 그날 데일리가 이미 있으면 확인만 하고 끝내고, 없으면 정규 파이프라인을 다시 돌립니다.
감시는 빠진 날(10월 1일)과 있는 날(10월 3일)을 번갈아 넣어 시험했습니다.
gh workflow run daily-watchdog.yml -f date=2026-10-01
gh workflow run daily-watchdog.yml -f date=2026-10-03
MISSING: vault/daily/2026-10-01.md 없음
DM 발송 완료
OK: vault/daily/2026-10-03.md 있음
10월 1일에는 알림이 갔고 10월 3일에는 아무것도 가지 않았습니다. 재시도 루틴은 첫 실행(10월 5일 20시 33분)에서 그날 데일리가 이미 있다는 것만 확인하고 14초 만에 끝났습니다. 빠진 날에 실제로 다시 돌아가는지는 아직 보지 못했습니다.
결과와 배운 점
측정 결과
항목
값
점검 대상
econ-radar 허브(vault/)와 paper-radar 일부, 원격 저장소 기준
템플릿 칸 8개
있음 3, 일부 3, 없음 2
학습일지 칸
날짜 파일 115개, 119일 중 4일 빠짐 (6/12, 7/22, 8/1, 10/1)
개념 칸
topics 99개, 9월 28일 이후 15개 갱신
회고 칸
주간 동향 리포트 17주 연속 (W24부터 W40)
사례 칸
econ-radar 초안 3개, paper-radar 초안 4개
로드맵, 계획 칸
이름에 든 파일 0개
10월 1일 누락 원인
클라우드 실행의 주간 사용량 한도 (같은 날 19시에 해제)
추가한 장치
22시 감시 알림, 20시 30분 재시도
배운 점
자동 발행 허브는 "한 일의 기록"이 아니라 "만든 것의 기록"으로 쌓였습니다. 학습일지 칸에는 날짜 파일 115개가 있지만 모두 뉴스 발행본입니다. 템플릿이 학습일지에 기대한 것은 AI가 내 맥락을 알게 되는 것이었는데, 제가 그날 무엇을 결정하고 고쳤는지는 daily에 남지 않고 커밋 기록과
_meta의 개선 로그에 흩어져 있습니다. 개수로는 채워졌는데 목적은 비어 있는 칸입니다.비어 있던 두 칸은 모두 앞으로의 일을 적는 칸이었습니다. 로드맵과 계획이 0개입니다. 지금까지 발행 구조는 매번 불편이 생길 때마다 고쳐 왔고, 어디까지 가겠다는 글은 허브 안에 없었습니다. 10월 1일을 놓친 뒤에야 감시를 만든 것도 같은 모양입니다. 빠졌을 때 어떻게 한다는 규칙이 미리 적혀 있지 않았습니다.
빠진 날은 개수가 아니라 달력으로 보아야 드러났습니다. 116개나 115개라는 숫자는 그럴듯해 보였습니다. 119일과 대 보고 나서야 네 날이 보였고, 그중 세 날은 지금도 원인을 모릅니다.
칸이 하나 있다는 것과 그 칸이 하는 일이 되고 있다는 것은 다릅니다. 이번 점검은 파일 이름만 봤습니다. 개념 칸의 99개가 서로 이어져 쓸모 있는지, 회고 17주가 실제로 다음 발행을 바꿨는지는 읽어 보지 않았습니다.
시행착오
처음에는 한글 파일 이름이
\355\225\234처럼 8진수 코드로 나와topics를 23개,reports를 1개로 셌습니다. 실제는 99개와 18개였습니다.core.quotepath=off를 켜고 NFC로 맞춰 다시 셌습니다. 폴더별 개수를awk로 센 값은 처음부터 맞았는데, 파일 이름을 정규식으로 거른 쪽만 어긋난 것입니다.학습일지 칸을 처음에는 "있음"으로 적으려 했습니다. 115개가 날짜 이름으로 이어져 있었기 때문입니다. 그런데 이 폴더가 매일 뉴스레터 본문을 담는 곳이라는 발행 구조를 떠올리고, 내 작업 기록이 아니어서 일부로 내렸습니다.
감시 시험은 모의가 아니라 실제 발송입니다. 실제로 빠졌던 10월 1일을 시험 날짜로 골라 알림이 나가는 경우와 안 나가는 경우를 한 번에 확인했지만, 알림 문구가 시험인지 실제 누락인지 구분되지 않는 점은 아직 고치지 못했습니다.
이 점검은 2026년 10월 6일에 ~/projects/econ-radar(origin/main)와 ~/projects/paper-radar(origin/master)의 vault/ 아래 파일 이름과 폴더를 세어 낸 결과입니다. 파일 내용은 열지 않았고 칸 대응은 이름과 폴더, 제가 아는 발행 구조로 판단했으며 분석 품질이나 서로의 연결은 평가하지 않았습니다. 감시 시험은 10월 1일과 10월 3일 두 날짜로만 했습니다.
도움 받은 글
AI놀이터 1주차 강의 (아루나, 황금호랑이): 학습일지에서 사례글, 학습위키, 전자책으로 이어지는 기록 순서, "학습일지는 매일" 당부
learning-hub-template 저장소 README: 글 종류 여덟 가지(랜딩, 프로젝트 카드, 학습일지, 로드맵, 계획, 개념, 사례, 회고)와 학습메이트 스킬 10개
태그: #AI놀이터