오늘 한 일 3줄

  • 그동안 폴더별로 따로 놀던 부업 프로젝트들을 C:\Projects 아래 단일 git 저장소로 묶었다. 첫 통합 커밋이 f24b126.
  • 매번 손으로 커밋하지 않으려고 프로젝트 단위로 변동을 감지해 묶어 커밋하는 auto_commit.ps1(+82줄)을 붙였다. 이게 오늘의 핵심인 git 커밋 자동 수집 장치다.
  • 통합하면서 튀어나온 진짜 위험 하나 — 토큰 파일이 저장소에 딸려 들어갈 뻔한 것 — 을 .gitignore 방어로 막고 실제로 차단되는지 눈으로 확인했다.

하루 총계는 커밋 16개, +9200/-93 라인. 대부분이 신규 파일 추가라 삭제가 93줄밖에 안 된다. 처음으로 이력에 넣는 파일들이 그만큼 많았다는 뜻이다.

왜 지금 통합했나

지금까지는 프로젝트마다 폴더가 따로 있고, 어떤 건 git이 걸려 있고 어떤 건 아니었다. 비트겟 매매 로직, doc-maker 문서 파이프라인, 증시 카드뉴스, 새로 시작한 ai-influencer까지 늘어나니까 “어제 뭘 바꿨더라"를 폴더 뒤지면서 되짚는 게 한계에 왔다.

그래서 방침을 정했다. 기존에 어중간하게 올라가 있던 git 흔적은 걷어내고, C:\Projects 아래 지금 존재하는 모든 프로젝트를 하나의 이력으로 다시 넣는다. 대신 파일 하나 고칠 때마다 커밋하지는 않는다. 변동이 있는 프로젝트만, 일 단위 혹은 며칠 단위로 묶어서 반영한다. 개인 부업 저장소에 커밋 노이즈를 쌓아봐야 나중에 이력을 읽을 때 방해만 된다.

첫 통합 스냅샷 f24b126은 조직 정의부터 넣었다. gatekeeper.md(+100/-0)를 필두로 각 프로젝트 리드 정의 — bitget-lead.md(+34), docmaker-lead.md(+27), kmong-lead.md(+32) — 와 공유팀 정의들이 한꺼번에 이력에 올라갔다. 코드보다 “누가 뭘 담당하는가"를 먼저 버전관리 대상으로 삼은 셈이다. 에이전트 구성 자체가 자주 바뀌는 살아있는 문서라, 여기가 흔들리면 나머지가 다 흔들린다.

auto_commit.ps1: 프로젝트 단위로 묶어 커밋 자동 수집

e785bfd에서 추가한 scripts/auto_commit.ps1(+82/-0)이 오늘의 주인공이다. 하는 일은 단순하다. 저장소 안의 각 프로젝트 디렉토리를 훑어서, 변동이 있는 프로젝트만 골라 그 프로젝트 이름을 커밋 메시지 앞에 붙여 따로 커밋한다.

그래서 오늘 이력을 보면 커밋 메시지가 이렇게 프로젝트 태그로 갈린다.

[ORG-STRUCTURE.md] 3d281aa  auto: 루트 문서/설정 변동사항 반영 (2026-07-24)
[scripts]          e785bfd  auto: scripts 변동사항 반영 (2026-07-24)
[doc-maker]        dc28647  auto: doc-maker 변동사항 반영 (2026-07-24)
[bitget-trading]   b5a67a7  auto: bitget-trading 변동사항 반영 (2026-07-24)
[ai-influencer]    12b3049  auto: ai-influencer 변동사항 반영 (2026-07-24)

한 번에 뭉텅이로 “update"를 날리지 않고 프로젝트별로 쪼갠 이유는 나중에 되짚을 때다. git log에서 [bitget-trading]만 훑으면 매매 로직이 어떻게 바뀌어 왔는지 그 프로젝트 이력만 선명하게 읽힌다. 한 커밋에 다섯 프로젝트가 뒤섞여 있으면 그게 안 된다.

PC는 어차피 24시간 켜둔다. OAuth 토큰 만료를 막으려고 그렇게 하기로 이미 정해뒀으니, 그 켜져 있는 시간에 이 수집 스크립트가 하루 단위로 돌면 손으로 커밋하는 습관 자체가 필요 없어진다. 다만 실제 스케줄러 등록은 아직 안 걸었다. 스케줄에 올리는 건 별도 승인 절차를 거쳐야 해서, 오늘은 스크립트를 이력에 넣고 수동으로 한 번 돌려본 데까지만 했다.

비밀키가 커밋에 딸려 들어갈 뻔한 지점

통합에서 제일 아찔했던 건 여기다. 유튜브 업로드용 token.json 같은 인증 파일들이 프로젝트 폴더 안에 그냥 있다. 저장소를 통째로 다시 넣는 작업이니, 방심하면 refresh 토큰이 커밋 이력에 박제된다. 한 번 커밋되면 git rm으로 지워도 이력에는 남는다.

그래서 통합 전에 .gitignore부터 손봤고, 실제로 차단되는지를 커밋 시도로 검증했다. 확인 로그가 이렇게 나왔다.

us-card-news: scripts/token.json  [차단됨(OK)]
kr-card-news: scripts/token.json  [차단됨(OK)]

경로가 “차단됨"으로 찍히면 그 파일은 커밋 후보에서 빠졌다는 뜻이다. 같은 세션에서 한 유튜브 채널의 새 refresh_token이 production 상태로 재발급되면서 7일 만료가 풀린 것도 확인했는데, 그 실제 토큰 값은 비공개다. 중요한 건 값이 아니라 “저 파일이 저장소 밖에 머문다"는 사실이고, 그건 검증됐다.

같은 날 병행으로 굴러간 작업들

통합이 메인이었지만 프로젝트별 실제 작업도 같이 이력에 올라갔다.

doc-maker 쪽은 문서 파이프라인을 한 단계 정식화했다. 0fa315f에서 scripts/build_doc.js(+268/-0)와 scripts/verify_doc.js(+125/-0)를 넣어 “장문 원고 → 표준 HTML → Chromium PDF"를 주력 엔진으로 굳혔다. 이전 커밋에서 LibreOffice 임포트용으로 넣었던 우회 CSS — 문단마다 margin-right를 박고 word-break를 떼는 땜빵 — 를 Chromium 경로에서는 걷어냈다. Chromium은 CSS를 1:1로 해석하니 표준 CSS를 그냥 쓰면 된다. 엔진을 바꾸니 우회가 통째로 필요 없어진 케이스다.

비트겟은 b5a67a7에서 공포탐욕지수 기반 실험 코드 btc_feargreed.py(+310/-0)와 README(+30)를 처음 이력에 넣었다. 매매 로직은 아직 고칠 게 많아서 이건 확정본이 아니라 작업 중 스냅샷이다.

ai-influencer는 12b3049에서 운영 문서들이 들어왔다. FOLLOW-PLAN.md(+56)는 초기 팔로잉 대상 30명(피어 18 + 로컬 12)을 채우는 수동 실행용 시트인데, 표 칸은 아직 비어 있는 뼈대 상태다. 자동팔로우 앱은 계정 정지 트리거라 처음부터 배제하고 수동 전용으로 설계했다.

막혔던 점

가장 손이 많이 간 건 “무엇을 이력에 넣지 않을 것인가"였다. git 통합은 파일을 추가하는 것보다 빼는 규칙을 먼저 정확히 세우는 일이 본체다. 토큰·빌드 산출물(decks/*/output/, output-chromium/node_modules 같은 것들을 .gitignore에서 하나씩 확정하고, 확정할 때마다 실제 커밋 후보 목록을 뽑아 눈으로 대조했다. “아마 무시되겠지"로 넘기면 딱 그 하나가 새서 사고가 난다.

배운 점

  • 통합 저장소의 첫 커밋은 코드가 아니라 규칙이어야 한다. 오늘 f24b126에 조직 정의부터 넣은 게 맞았다. 담당 경계와 .gitignore 규칙이 이력의 바닥에 깔려 있어야 이후 자동 커밋이 안전하게 쌓인다.
  • 커밋 자동화의 값어치는 “언제 커밋하느냐"가 아니라 “어떻게 쪼개느냐"에 있다. 프로젝트 태그로 커밋을 가르니 로그 가독성이 통째 커밋과 비교가 안 된다.
  • 비밀 파일 차단은 선언만으로 끝내면 안 된다. [차단됨(OK)]처럼 실제 후보 목록에서 빠지는 걸 확인해야 검증이다.

내일 할 일

  • auto_commit.ps1을 스케줄에 올릴지 결정하고, 올린다면 승인 절차부터 밟는다. 지금은 수동 실행 상태다.
  • 비트겟 btc_feargreed.py는 스냅샷일 뿐이라 로직을 이어서 손본다.
  • doc-maker의 docx 조판 후처리와 Chromium PDF 경로가 같은 원고에서 화질이 어떻게 갈리는지 실렌더로 비교를 마무리한다.