운영 DB에서 AI를 실행했습니다. 어떤 일이 벌어졌는지 알려드립니다.
지난 화요일 새벽 3시, 제 시스템은 분당 12,000건의 쓰기 작업을 기록했습니다. 루프 하나가 모든 것을 멈춰버렸습니다. 버그는 단순한 한 줄의 오류였지만, 그 원인은 훨씬 심각했습니다.
데이터베이스 마이그레이션을 실행하던 중 Claude Code에서 권한 건너뛰기(permission skip) 플래그를 활성화했습니다. 저는 스테이징 환경을 사용하고 있다고 생각했습니다. 하지만 틀렸습니다. 환경 설정 파일(.env)을 잘못 구성한 것이었습니다. 개발용 자격 증명 대신 운영용 자격 증명을 불러왔습니다.
Claude는 권한을 요청하지 않았습니다. 플래그가 요청하지 말라고 명령했기 때문입니다. 마이그레이션은 컬럼을 삭제하는 대신 추가해 버렸습니다. 데이터 손실은 없었지만, 정말 아찔한 순간이었습니다.
제 생각에 착오가 있었습니다. 권한 건너뛰기가 그저 번거로운 팝업창을 없애주는 것이라고만 생각했습니다. 하지만 실제로는 사람이 명령어를 검토할 수 있는 유일한 순간을 없애버리는 것이었습니다.
플래그를 끄는 것만으로는 충분하지 않습니다. 그저 새벽 3시의 피곤한 상태에서 무심코 클릭해 버릴 프롬프트가 추가될 뿐입니다.
저는 설정 파일에 거부(deny) 규칙을 추가하여 이 문제를 해결했습니다.
로컬 명령에 대해서는 특정 허용(allow) 규칙을 사용합니다. 그 외의 모든 데이터베이스 명령에 대해서는 거부(deny) 규칙을 사용합니다. 특정 규칙이 우선 적용됩니다. 이를 통해 모든 운영 데이터베이스 명령이 실행되기 전에 차단합니다.
이제 저는 세 가지 안전 계층을 사용합니다:
- 엄격한 허용(allow) 및 거부(deny) 규칙이 포함된 설정 파일.
- 스테이징 자격 증명만 보유하는 마이그레이션 전용 별도 git worktree.
- 운영 환경을 건드리기 전에 반드시 물어보라고 AI에게 지시하는 CLAUDE.md 파일.
CLAUDE.md의 지침은 긴 채팅 세션이 이어지면 효력이 약해질 수 있다는 점에 유의하십시오. 중요한 규칙은 프롬프트에서 다시 한번 명시해야 합니다.
제 설정과 정확한 구성에 대한 상세한 분석 내용을 작성했습니다.
선택 사항 학습 커뮤니티: https://t.me/GyaanSetuAi