본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 05. 25. 20:24

Claude Code를 버전 관리 하에 두기: 7월부터의 설정값, 4월부터의 메모리

요약

Claude Code의 설정값과 메모리 디렉토리를 Git 저장소로 심볼릭 링크를 걸어 버전 관리하는 방법을 소개합니다. 이를 통해 에이전트가 변경한 설정의 이력을 추적하고 감사할 수 있는 환경을 구축할 수 있습니다.

핵심 포인트

  • 심볼릭 링크를 활용해 Claude Code 설정을 Git으로 관리 가능
  • 에이전트에 의한 설정 변경 사항을 git diff로 정밀 추적
  • 설정 파일의 변경 이력을 통한 감사 추적(Audit trail) 확보
  • 결정론적인 <encoded-cwd> 경로를 활용한 안정적인 구성

상태: Sash의 피드백(EDS-025)을 반영한 수정 r2.
관련 포스트: EDS-026 (독일어 블로그 build-in-public), EDS-027 (영어 X-Thread 홍보), EDS-028 (독일어 LinkedIn).

AI 에이전트(AI agent)가 당신의 머신을 1년 동안 공유하도록 허용하다 보면, 결국 스스로 답할 수 없는 질문에 직면하게 됩니다. 내 설정이 이런 모습인가?

<encoded-cwd>는 결정론적 (deterministic)입니다. 즉, 슬래시(/)가 대시(-)로 대체된 당신의 작업 디렉토리 경로입니다. 이러한 예측 가능성이 핵심적인 레버리지 포인트 (leverage point)가 됩니다. 경로가 일정하다면, 이를 Git 저장소(repo)로 심볼릭 링크 (symlink)를 걸 수 있으며, 에이전트 (agent)는 그 차이를 알지 못합니다.

설정 방법

# 1. 대상 디렉토리를 개인 설정 저장소로 이동
mv ~/.claude/projects/<encoded-cwd>/memory \
   ~/configs/claude-code/projects/<encoded-cwd>/memory
...

이것으로 끝입니다. Claude는 동일한 경로에서 계속 읽고 쓰기를 수행합니다. Git은 모든 변경 사항을 추적합니다. 캡처하고 싶은 다른 ~/.claude/... 하위 트리 (subtree)가 있다면 이 과정을 반복하세요.

Configs repo README in GitKraken diff view — table of all versioned config files with their paths

심볼릭 링크를 생성한 후에는 설정 저장소가 정식 상태 (canonical state)를 보유하게 됩니다. 실제로 검토하게 되는 것은 디프 (diff)입니다.

무엇이 변했는가

처음에는 좁은 범위에서 시작했습니다. 무언가에 의해 설정이 날아갈 경우를 대비해 settings.json의 백업을 원했을 뿐입니다. 아래의 효과들은 저장소가 커지면서 나타난 것들입니다. 이 중 어느 것도 원래의 동기는 아니었습니다.

감사 추적 (Audit trail)

설정 디렉토리에서 git log를 실행하면 무엇이 언제 다시 작성되었는지 알 수 있습니다. 설정 파일에 git diff를 실행하면 어제 무엇이 바뀌었는지 보여줍니다. 에이전트가 나를 대신해 설정 파일을 수정할 때 — 상태 (state)를 유지하는 설정이나 기술 (skill)을 실행할 때마다 발생합니다 — 디프 (diff)는 실제로 반영된 내용에 대한 유일하고 정직한 기록이 됩니다. 6개월이 지난 지금, 이것이 제가 가장 많이 활용하는 효과입니다.

GitKraken commit graph showing audit trail of versioned Claude Code memory + settings

모든 메모리 업데이트, 모든 수정, 모든 정책 강화 (policy tightening)가 로그의 한 줄이 됩니다.

잘못된 일반화에 대한 롤백 (Rollback for bad generalizations)

때때로 메모리 항목이 잘못 기록될 때가 있습니다. 에이전트가 너무 광범위하게 일반화해버린 수정 사항이나, 만료 기간이 지났음에도 남아 있는 항목 같은 것들 말입니다. git checkout HEAD~N -- claude-code/projects/.../memory/<file>.md 명령어를 실행하면, 해당 항목은 정확히 3일 전의 상태로 사라집니다. 버전 관리 (Version Control)가 없다면, 그 경로는 일방통행일 뿐입니다.

백업 회복력 (Backup resilience)

~/.claude/는 애플리케이션 홈 디렉토리 (Application home directory)입니다. 잘못된 정리 작업, 상태를 초기화하는 베타 업데이트, 디스크 장애 등 이 중 어떤 것이라도 수개월 동안 축적된 컨텍스트 (Context)를 지워버릴 수 있습니다. 저장소 (Repo)를 신뢰할 수 있는 단일 원천 (Source of truth)으로 삼고 심볼릭 링크 (Symlinks)가 이를 가리키게 하면, 복구 방법은 git clone 후 다시 링크를 거는 것이 전부입니다. 만약 더 철저하게 관리하고 싶다면, 저장소를 프라이빗 원격 저장소 (Private remote)에 푸시하여 오프사이트 복사본 (Offsite copy)을 가질 수도 있습니다.

해결사 효과 (The fix-buddy effect)

이것은 제가 예상하지 못했던 부분입니다. 저장소에 에이전트의 전체 설정 — 설정 (Settings), 기술 (Skills), 메모리 (Memory), MCP 구성 (MCP configurations) — 이 포함되면, 에이전트 스스로가 git을 통해 자신의 이력을 읽을 수 있게 됩니다. 무언가 고장 났을 때, Claude에게 일주일 전의 설정이 어떠했는지 설명할 필요가 없습니다. 스스로 찾아볼 수 있기 때문입니다. 이는 "AI 워크플로우 디버깅"의 느낌을 완전히 바꿔놓습니다. 에이전트가 더 이상 자신의 과거를 추측하지 않아도 되기 때문입니다.

다중 기기 설정 시 주의사항

만약 Claude Code를 두 대 이상의 기기에서 실행한다면, 프라이빗 원격 저장소와 각 세션 전의 git pull을 통해 어디서든 동일한 컨텍스트를 유지할 수 있습니다. 저는 한 대의 기기에서만 실행하기 때문에 이 부분을 충분히 테스트(Pressure-test)해보지는 못했습니다. 시스템 수준의 경로(System-level paths)나 OS별 바이너리(OS-specific binaries) 같은 가변적인 요소들 때문에 이를 즉시 사용 가능한(Turnkey) 솔루션이라고 장담하기에는 조심스럽습니다. 하지만 파일 수준의 설정은 시도해보고 싶다면 준비되어 있습니다.

재정의 (The re-framing)

이 해킹 (Hack)의 핵심은 심볼릭 링크가 아닙니다. 핵심은 재라벨링 (Relabeling)입니다.

대부분의 사람들은 ~/.claude/를 애플리케이션 상태 (Application state)로 취급합니다. 브라우저, IDE, 패키지 매니저 모두 유사한 디렉토리를 가지고 있으며, 기본적인 반사 작용은 이를 그대로 두는 것입니다. 그것들은 캐시 (Cache)이고, 일시적 (Ephemeral)이며, 다시 생성되기 때문입니다. 그러한 반사 작용은 브라우저 캐시에는 맞습니다. 하지만 에이전트 구성 (Agent configuration)에는 틀린 방식입니다.

에이전트 구성 (Agent configuration)은 캐시 (cache)보다는 코드 (code)에 더 가깝습니다. 이는 의도 (intent)를 인코딩합니다. 즉, 어떤 모델을 사용할지, 어떤 기술 (skills)을 로드할지, 어떤 수정 사항을 적용할지, 어떤 실수를 피할지를 결정합니다. 이것은 문서화된 동작 (documented behavior)입니다. 일단 이를 그렇게 바라보기 시작하면, 모든 표준적인 버전 관리 (versioning) 논거들이 적용됩니다 — 이력 (history), 차이점 (diff), 롤백 (rollback), 공유 (sharing), 리뷰 (review) 등이 그러합니다. 심볼릭 링크 (symlink) 트릭은 이러한 새로운 프레임워크에 따라 행동할 수 있게 해주는 기계적인 단계일 뿐입니다.

개인정보 보호에 관한 참고 사항

저장소 (repo)는 비공개 (private)입니다. 무엇이 정확히 민감한 정보에 해당하는지는 다른 사람이 작성한 체크리스트가 아니라, 여러분의 판단에 달려 있습니다.

오늘 시작하는 사람에게 해주고 싶은 말

메모리 (memory)부터 시작하지 마세요. settings.json부터 시작하세요. 그것을 심볼릭 링크 (symlink)로 만들고, 커밋 (commit)하고, 일주일 동안 지켜보세요. 차이점 (diff)을 보면 놀랄 것입니다 — 설정값의 드리프트 (drift)는 생각보다 더 자주 발생하며, 그 드리프트를 확인하는 것이 첫 번째 승리입니다.

이 패턴에 대한 신뢰가 쌓이면 거기서부터 확장해 나가세요. 에이전트 상태 (agent's state)의 나머지 부분이 이미 git 하에 있다면, 메모리는 자연스러운 확장 기능이 됩니다.

휘발성 상태 (Ephemeral state)는 설계상의 선택 (design choice)이지, 자연의 법칙 (fact of nature)이 아닙니다.

백링크 (Backlinks):

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0