lifecarelog
제품소개

커밋 게이트 훅 하나로 Claude Code와 Codex 드리프트 막기

플랜 시리즈를 Claude Code와 Codex로 함께 개발하며 커밋 게이트 스크립트 하나를 두 런타임 훅에 물려 로직 중복과 드리프트를 없앤 방법이에요.

5분 읽기

플랜씨(plan-c) 금융계산기, 플랜엘(plan-l) 법령 검색, 플랜비(plan-b) 동호회 매니저, 그리고 개발 중인 플랜티(plan-t)까지. 라이프케어로그는 이 네 가지를 혼자 만들어요. 구현은 Claude Code가 하고 리뷰는 Codex가 맡는 식으로 두 런타임을 같이 쓰는데, 여기서 하나 걱정되는 게 있었어요. 대출이자나 복리 계산처럼 숫자가 틀리면 바로 신뢰가 깨지는 코드가 리뷰 없이 커밋되는 상황이에요.

그래서 커밋 게이트를 걸었어요. 규칙은 단순해요. staged diff가 200줄을 넘거나 계산 로직·인증 같은 핵심 경로를 건드리면, 교차 리뷰 영수증이 없는 한 커밋을 멈추고 사람에게 물어요.

문제는 이 게이트를 어디에 두느냐였어요. Claude Code 훅에도 넣고 Codex 훅에도 넣으면 처음엔 같지만, 한쪽만 고치는 날이 반드시 와요. 직접 겪어 보니 그 순간부터 두 런타임이 서로 다른 기준으로 커밋을 통과시켜요. 이게 드리프트예요.

git commit 시도런타임 훅이 공용 스크립트 호출staged diff 크기·경로 검사리뷰 영수증 확인통과 또는 승인 요청

해결은 로직을 한 곳에만 두는 거였어요. 직접 만들어 보니 검사 스크립트는 셸 파일 1개면 충분했어요. Claude Code의 settings.json과 Codex의 hooks.json에는 각각 PreToolUse 훅으로 "Bash 명령이 git commit이면 이 스크립트를 실행해라"만 적어요. 두 설정 파일이 같은 파일을 부르니 판단 기준이 갈라질 자리가 없어요. 손대는 파일은 총 3개, 설정 자체는 10분 정도면 끝나요.

영수증은 리뷰가 통과했을 때만 발급해요. Codex 리뷰를 마치면 pass 명령으로 리뷰어 이름을 기록하고, 그 뒤에 커밋해요. 적용해 봤더니 한 가지가 특히 편했어요. 영수증을 받은 뒤 staged diff가 바뀌면 자동으로 무효가 돼요. 리뷰 받은 코드와 실제 커밋되는 코드가 다른 상황을 스크립트가 알아서 막아 줘요.

테스트해 보면 주의할 점도 보여요. 대화형 세션에서는 훅이 잘 돌지만, 헤드리스로 돌리는 경로에서는 훅 자체를 건너뛸 수 있어요. 그래서 통과·차단 건수를 로그 파일 1개에 남기고, 무인 실행 뒤에는 로그가 실제로 찍혔는지 확인해요. 성공했다는 문구만 믿으면 안 돼요.

  • 로직은 스크립트 1개
  • 런타임 훅은 호출만
  • 영수증은 diff 변경 시 자동 무효
  • 헤드리스는 로그로 확인

돌려 보니 게이트가 멈춰 세우는 순간은 대개 제가 리뷰를 건너뛰고 싶은 순간이었어요. 플랜씨는 로그인 없이 누구나 쓰는 계산기라 한 줄 오류가 그대로 결과에 보여요. 그런 코드일수록 커밋 직전에 한 번 더 멈춰 주는 장치가 필요했고, 그 장치를 두 런타임에 복사하지 않고 하나로 묶은 게 이번 작업의 핵심이에요.

#Claude Code#Codex#커밋 게이트#훅#1인 개발

라이프케어로그 서비스가 궁금하신가요?

AI 기반 건강·일정·재활 관리 앱을 직접 써보세요.

서비스 살펴보기

관련 글

댓글

아직 댓글이 없어요. 첫 댓글을 남겨주세요.