Alert

Generated by AI (Codex)


오늘 진행한 작업 요약

Obsidian 첨부파일이 content/Files에 계속 쌓이면서,
블로그와 무관한 파일까지 git status에 노출되고 공개 저장소에도 남는 문제가 있었다.

이번에 정리한 방향은 아래와 같다.

  1. content/Files/**.gitignore가 아니라 .git/info/exclude로 로컬 전용 처리
  2. 게시 글에 필요한 첨부만 자동으로 stage하는 스크립트 추가
  3. 긴 파일명을 직접 입력하지 않도록 shell wrapper 추가
  4. 현재 content/Files의 미사용 파일 목록만 추출

반영한 변경 사항

1) 로컬 전용 ignore 정책 (.git/info/exclude)

  • .git/info/excludecontent/Files/** 추가
  • .gitignore에서는 content/Files/** 제거
  • 효과:
    • 로컬 git status 노이즈는 줄이고
    • 빌드/배포 파이프라인에는 영향 주지 않음

2) 자동 stage 스크립트

  • scripts/stage-content.mjs 추가
  • 기능:
    • 글(content/**/*.md)에서 링크를 파싱
    • content/Files의 실제 참조 파일만 찾아 자동 stage
    • ignore 규칙이 있어도 git add -f로 필요한 파일은 포함

3) 실행 편의 wrapper

  • scripts/stage-content.sh 추가 (실행 권한 포함)
  • 이제 아래처럼 사용 가능:
./scripts/stage-content.sh "content/Dev/내 글.md"
  • 파일명 길면 인자 없이 자동 탐지 모드 사용:
./scripts/stage-content.sh

4) 사용 가이드 문서화

  • scripts/stage-content-guide.md 작성
  • 발행 절차, 자동 탐지 방식, 내부 동작 상세 정리

디버깅 기록 (이미지 전체 깨짐 이슈)

증상

  • 로컬 Obsidian에서는 이미지 정상
  • 블로그에서 기존 이미지 포함 전체 이미지가 깨짐
  • DevTools에서 이미지 경로가 ../../Files/...가 아니라 ../../docker-...png 형태로 확인됨

재현 결과

  • 로컬 npx quartz build: Emitted 451 files (정상, public/Files 생성)
  • Docker/서빙 환경: Emitted 188 files (비정상, public/Files 미생성)

원인

  • .gitignorecontent/Files/** 규칙이 빌드 파일 수집 단계에 반영되면서,
    content/Files 자산이 입력에서 제외됨
  • 그 결과 Quartz가 이미지 파일을 자산으로 emit하지 못해 경로가 깨지고 404 발생

조치

  • Quartz 소스는 수정하지 않음
  • content/Files/**.gitignore에서 제거
  • 동일 규칙을 .git/info/exclude로 이동

이후 운영 흐름

  1. 로컬 노트 작성 후 게시할 글을 content/로 이동
  2. ./scripts/stage-content.sh 실행
  3. git status / git diff --cached --name-only 확인
  4. 커밋/푸시

이 흐름으로 운영하면, content/Files 전체를 수동 관리하지 않아도
게시 글에 실제로 연결된 첨부만 커밋에 포함할 수 있다.