EVERYDAY · HOME · IT

중간삶의 잡소리 -ㅅ-a

생활의 작은 발견과 집 안의 기술을 차분하게 기록합니다.

최근 기록 보기
퇴사일기/실험기

훅과 안전장치: AI가 삭제하지 못하게 막는 법

훅과 안전장치: AI가 삭제하지 못하게 막는 법

AI가 파일을 읽고 쓰는 순간부터 프로젝트는 빨라진다. 하지만 동시에 위험해진다.

AI가 실수로 다음을 실행할 수도 있다.

rm -rf git reset --hard git clean -fd cat .env npm install deploy background runner browser automation publish

사람도 실수하는 명령을 AI가 절대 실수하지 않으리라고 믿을 수는 없다.

그래서 안전장치가 필요했다.

안전장치는 “믿지 않기”가 아니라 “경계를 정하기”다

AI를 못 믿어서 막는 것이 아니다. 사람이 모든 명령을 매번 감시할 수 없기 때문에 경계를 정하는 것이다.

내가 정한 원칙은 이렇다.

읽기는 넓게 허용한다. 쓰기는 승인 후 허용한다. 삭제, 배포, 시크릿 접근, 브라우저 실행은 강하게 막는다.

특히 blog 프로젝트에서는 이 원칙이 중요했다. 블로그 원고 업데이트는 Markdown 초안 편집이지, Playwright를 켜서 실제 티스토리나 네이버에 발행하는 일이 아니었다.

차단한 명령들

대표적으로 막은 것은 다음이다.

  • 파일 삭제
  • 강제 이동/덮어쓰기
  • 관리자 권한
  • 파괴적 git 명령
  • .env 읽기
  • 인증 세션 파일 출력
  • 패키지 설치
  • 배포 명령
  • 무인 백그라운드 실행
  • 사용자가 승인하지 않은 브라우저/Playwright 실행
  • 실제 블로그 발행

이 중 특히 중요한 것은 .env와 git 명령이다.

.env는 토큰과 비밀번호가 들어갈 수 있다. AI가 읽어서 대화창에 출력하면 끝이다. git reset --hardgit clean -fd는 작업물을 날릴 수 있다.

Gated Batch와 Hard Gate

작업을 너무 잘게 쪼개면 느려진다. 반대로 한 번에 너무 많이 하면 위험하다.

그래서 기준을 이렇게 잡았다.

같은 위험군의 문서 보정 + 검증 + dump + 커밋계획은 묶는다. 하지만 중간 Hard Gate가 실패하면 즉시 중단한다.

예를 들어 문서만 수정하는 작업이라면, 보정과 검증과 dump를 한 번에 할 수 있다. 하지만 그 과정에서 코드 변경이 발견되면 바로 멈춘다.

forbidden scope 검사

각 스프린트마다 “이번 작업에서 절대 건드리면 안 되는 범위”를 정했다.

예를 들어 문서 정비 스프린트에서는 다음을 금지했다.

auto-video-tools/main.py auto-video-tools/core/** auto-video-tools/tools/** blog/src/** blog/scripts/** package.json homepage/** portfolio-blog/**

검증은 단순하다.

git diff --name-status -- <forbidden paths>

출력이 있으면 멈춘다.

Markdown도 백업 대상이다

처음에는 코드 파일만 백업하면 될 줄 알았다. 하지만 실제로 중요한 것은 문서였다.

AI 작업에서 문서는 단순 설명이 아니다. PRD, RTM, 아키텍처, handoff, 검증 결과가 모두 문서에 있다. 그래서 Markdown도 보호 대상에 넣었다.

특히 HISTORY.mdTODO.md는 append-only 원장이다. 이 파일을 요약 대체하거나 재정렬하면 프로젝트 기억이 무너진다.

선별 스테이징

커밋할 때는 항상 이렇게 했다.

허용 파일 목록 작성 git add -- 허용 파일만 staged 검증 커밋 푸시 금지 또는 별도 승인

이 방식은 느리지만 안전하다.

특히 여러 프로젝트가 같은 repo 안에 있을 때는 필수다. git add . 한 번이면 다른 프로젝트의 WIP가 섞일 수 있다.

dump도 안전장치가 필요했다

검토용 dump는 증거를 남긴다. 하지만 raw dump에 절대경로나 민감 파일이 들어가면 그것도 위험하다.

그래서 _ai_dumps/ 정책을 만들었다.

_ai_dumps/* → gitignore _ai_dumps/README.md → 추적 보관 기간 → 기본 7일 cleanup → dry-run 우선

Desktop에 쌓아두던 방식보다 훨씬 낫다.

체크리스트

AI 프로젝트에 안전장치를 넣을 때 확인할 것.

  • .env 읽기를 막았는가?
  • 파괴적 git 명령을 막았는가?
  • 삭제와 강제 덮어쓰기를 막았는가?
  • 실패 반복 시 멈추는가?
  • forbidden scope 검사가 있는가?
  • 커밋 전 정확 파일 목록을 쓰는가?
  • git add .를 금지했는가?
  • dump가 gitignore되고 sanitized 되는가?

다음 편 예고

다음 편에서는 실제 시행착오를 정리한다. 구조를 만들었는데도 작은 구멍은 계속 생겼고, 그 구멍을 잡는 과정에서 지금의 운영체계가 조금씩 단단해졌다.