사례1건
1건 중 1~1번째
- 증상
실버 위크 연휴가 끝난 첫날, 엔지니어가 로컬 데이터베이스를 비우고 다시 시작하려고 prisma migrate reset 을 실행하고 시드 데이터를 넣었다. 그런데 시드 데이터가 들어가지 않은 것처럼 보였다.
- 촉발
엔지니어가 로컬 데이터베이스를 대상으로 한다고 믿고 prisma migrate reset 을 실행했는데, packages/database/.env 에 연휴 전에 넣어 둔 운영 DATABASE_URL 이 남아 있었다.
- 원인
- 구성 요소
- 기여 요인
- 감지
엔지니어가 prisma migrate reset 뒤에 넣은 시드 데이터가 로컬에 보이지 않는 것을 보고, 운영 데이터베이스를 초기화한 것을 알아챘다.
- 조치
- Neon 의 Backup & Restore 로 운영 데이터베이스를 되살렸다.
- 후속 조치
- 데이터베이스를 지우는 명령 앞에 DATABASE_URL 이 localhost 나 127.0.0.1 을 가리키는지 확인하고 아니면 멈추는 스크립트를 둔다.
- 로컬 .env 에 운영 데이터베이스의 접속 문자열을 쓰지 않는다.
- 운영 데이터베이스를 대상으로 하는 작업은 CI 나 시크릿 매니저를 거쳐서 하도록 바꾼다.
- 개발자 컴퓨터의 env 파일에 *.neon.tech 같은 운영 호스트가 들어 있지 않은지 확인한다.
- 쓰는 요금제의 Backup & Restore 기간이 부족하면 이력 보관 기간을 늘리거나 따로 백업을 마련한다.
- 연휴처럼 오래 손을 놓기 전에 로컬 env 에서 운영 URL 을 지운다.
- 작업이 중간에 멈추면 어디까지 했는지를 이슈나 메모에 남긴다.
- AI 에이전트 규칙에, 사용자가 그 메시지에서 분명히 요청하지 않으면 prisma migrate reset, db push --force-reset 같은 데이터베이스를 지우는 명령을 실행하지 않는다는 규칙을 넣는다.
- 교훈
글쓴이는 기억보다 기록을 믿어야 한다고 정리했다. 오래 손을 놓기 전에는 어중간한 상태를 남기지 않고, 남겨야 하면 메모로 적어 둔다. 데이터베이스를 지우는 명령은 접속 대상이 localhost 가 아니면 실행되지 않아야 한다. 운영 URL 은 개발자 컴퓨터에 두지 않고, AI 에이전트에도 금지 규칙을 둔다. Backup & Restore 는 기능이 있는지와 별도로, 쓰는 요금제의 기간으로 충분한지를 확인해야 한다. 글쓴이는 이번에 피해가 작았던 것은 서비스가 마침 초기였기 때문이라고 했다.
내 클러스터에도 있는지 확인하기
이 사례에서 가장 많이 나오는 구성 요소: 데이터베이스. kubegap 은 Claude Code 나 Codex 에서 쿠버네티스 클러스터를 읽기만 하며 이런 틈을 점검합니다. 점검 항목의 근거는 이 라이브러리와 같은 공개 보고서입니다.