Claude Code 작업 기록 자동화 및 태그 관리 개선
이 글은 Claude Code 세션 기록을 자동으로 저장하고, 블로그 포스팅에 동적 태그를 적용하는 방법에 대한 기록입니다. 특히, 민감한 정보가 포함된 세션 기록을 안전하게 관리하는 방법과 프로젝트 명을 활용한 태그 시스템 구축에 대해 다룹니다.
학습 주제
- Claude Code 세션 자동 Export 및 저장
- GitHub PR 수집 및 블로그 포스팅 연동 (보류)
- 콘텐츠 기반 동적 태그 적용
탐구 과정
최근 Claude Code를 사용하면서 하루하루의 작업 내용을 체계적으로 기록하고 싶다는 생각이 들었습니다. AI Chat export처럼 세션 기록이 자동으로 저장된다면 좋겠다고 생각했죠. 또한, 블로그 포스팅에 프로젝트별로 태그를 붙여 관리하는 방식도 고려하고 있었습니다.
처음에는 Claude Code 자체에 이러한 기능이 있는지 궁금했습니다. 공식 문서를 살펴보니 /export 명령어와 SessionEnd 훅을 활용하면 세션 종료 시 자동으로 대화 내용을 특정 폴더에 저장하는 기능을 구현할 수 있다는 것을 알게 되었습니다. 이 아이디어를 구체화하기 위해 ~/.claude/settings.json 파일을 수정하여 훅을 등록하고, 공유 폴더(shared)로 저장되도록 설정했습니다.
이 과정에서 한 가지 중요한 문제를 발견했습니다. 세션 기록에 API 키와 같은 민감한 정보가 그대로 노출될 수 있다는 점이었죠. 이를 해결하기 위해 export 스크립트에 비밀 키를 자동으로 마스킹하는 기능을 추가하는 방향으로 가닥을 잡았습니다.
기존에는 블로그 포스팅에 고정된 태그를 사용했지만, 이제는 포스팅 내용에 따라 동적으로 태그를 생성하고 싶었습니다. 특히, GitHub 커밋 데이터를 가져올 때 레포지토리 이름을 태그에 포함시키는 방안을 고려했습니다. 이는 blog_api.py 파일을 수정하여 본문에서 태그 정보를 추출하고, 없을 경우 기존의 고정 태그를 활용하는 방식으로 구현하기로 했습니다.
PR 수집 기능은 추후 구현하기로 하고, 우선은 Claude Code 세션 자동 export와 태그 관리 개선에 집중했습니다.
핵심 학습 내용
1. Claude Code 작업 기록 자동 export
/export명령어: Claude Code 세션 대화를 텍스트 파일로 저장할 수 있는 기본 기능입니다.SessionEnd훅: 세션이 종료될 때 특정 스크립트를 자동으로 실행하도록 설정할 수 있습니다.~/.claude/settings.json설정: 사용자 레벨의 설정을 통해 훅을 등록하고 환경 변수를 설정합니다.hooks.SessionEnd:SessionEnd이벤트에 대한 훅을 정의합니다.matcher: "*": 모든 세션에 대해 훅을 실행하도록 설정합니다.hooks[].type: "command": 실행할 명령어를 지정합니다.hooks[].command:python3 "$HOME/.claude/hooks/export_session_to_chat_log.py"와 같이 실제 실행할 스크립트 경로를 지정합니다.env:CLAUDE_CHAT_EXPORT_DIR과 같이 환경 변수를 설정하여 export될 폴더 경로를 지정합니다.
- 비밀 키 마스킹: export 과정에서 민감한 정보(API 키 등)가 평문으로 노출되는 것을 방지하기 위해, export 스크립트 내에서 비밀 키를 자동으로 감지하고 마스킹하는 로직을 추가했습니다. 이는
redact_secrets함수를 통해 구현되었습니다.
2. 콘텐츠 기반 동적 태그 적용
- 태그 추출 로직: 블로그 포스팅 본문에서
**태그:** 태그1, 태그2, 태그3형식의 줄을 찾아 동적으로 태그를 추출합니다. - GitHub 레포지토리명 포함:
blog_api.py파일의extract_tags_from_draft_type함수를 수정하여, 동적 태그 추출 시 레포지토리명을 필수 태그로 포함하도록 변경했습니다. - 폴백(Fallback) 기능: 만약 본문에서 태그 정보를 찾지 못하면, 기존에 정의된 고정 태그를 사용하도록 폴백 로직을 구현했습니다.
이해한 내용
Claude Code 세션 기록을 자동화하는 것은 생각보다 간단했습니다. SessionEnd 훅을 활용하면 개발 환경을 조금만 설정해주면 세션 종료 시마다 작업 기록이 자동으로 저장되도록 만들 수 있었습니다. 특히, CLAUDE_CHAT_EXPORT_DIR 환경 변수를 통해 저장 경로를 지정할 수 있다는 점이 유용했습니다.
가장 중요한 부분은 보안이었습니다. 세션 기록에 노출될 수 있는 민감한 정보들을 마스킹 처리하는 로직을 추가함으로써, 작업 기록을 안전하게 보관할 수 있게 되었습니다.
태그 관리 또한 훨씬 유연해졌습니다. 이제 각 포스팅의 내용에 맞춰 구체적이고 관련성 높은 태그를 자동으로 생성할 수 있게 되어, 블로그 검색 및 분류에 큰 도움이 될 것 같습니다. 특히, GitHub 레포지토리명을 태그에 포함시키는 아이디어는 프로젝트별 기록 관리 측면에서 매우 효과적이라고 생각합니다.
실전 적용
- 자동화된 개인 기술 블로그 생성: 매일 Claude Code로 작업한 내용을 기록하고, 해당 기록들을 자동으로 블로그 포스팅 초안으로 생성하여 관리할 수 있습니다.
- 프로젝트별 작업 일지 관리: GitHub 커밋 정보와 Claude Code 세션 기록을 연동하여, 특정 프로젝트에 대한 상세한 작업 일지를 체계적으로 관리할 수 있습니다.
- 콘텐츠 검색 최적화: 동적으로 생성된 태그를 통해 블로그 콘텐츠의 검색 효율성을 높이고, 사용자에게 더욱 관련성 높은 정보를 제공할 수 있습니다.
추가 학습 계획
- PR 수집 기능 구현: GitHub PR 정보를 커밋처럼 가져와 포스팅 초안으로 작성하는 기능을 구현하여, 프로젝트 기록 관리를 더욱 강화하고 싶습니다.
- Claude Code export 스크립트 개선: Export된 마크다운 파일의 포맷을 더욱 정교하게 다듬거나, 특정 키워드에 따라 자동으로 태그를 추가하는 등 스크립트 기능을 확장하는 것을 고려해볼 수 있습니다.
- 정기적인 세션 기록 분석: 쌓인 작업 기록들을 정기적으로 분석하여, 작업 패턴이나 개선점을 도출하는 방법을 탐구하고 싶습니다.