AI가 짜준 코드의 문제는 돌아가지 않는 것이 아니라, 대체로 잘 돌아간다는 점입니다. 화면이 뜨고 버튼이 눌리면 다 된 것처럼 보입니다. 사고는 그다음에 납니다. 결제 한도를 안 걸었거나, 권한을 열어둔 채로 올렸거나, 되돌릴 지점을 안 만들어둔 상태에서요.
흔히 이야기되는 여덟 가지 위험은 서로 다른 사고처럼 보이지만 원인은 세 갈래로 묶입니다. 갈래별로 배포 전에 사람이 정해야 하는 한 가지가 있습니다.
1. 돈이 새는 갈래
가장 빨리, 가장 조용히 커지는 손실입니다. 코드는 정상 작동하는데 청구서만 늘어납니다.
- 자동 충전 한도 미설정 — API나 클라우드 서비스는 잔액이 떨어지면 자동으로 결제합니다. 상한을 안 걸면 상한이 없는 것입니다.
- 에이전트 증식 — 설정이 잘못되면 AI가 자기 자신을 반복 호출합니다. 밤사이 수천 번 돌 수 있습니다.
- 끊기지 않는 루프 — 실패하면 다시 시도하도록 짜인 코드가 실패를 반복하며 계속 호출합니다.
먼저 할 것: 코드를 쓰기 전에 결제 화면부터 엽니다. 하루 한도와 월 한도, 그리고 초과 시 자동 차단을 켭니다. 알림만 켜두면 자는 동안 소용이 없습니다.
2. 데이터가 사라지는 갈래
돈은 다시 벌 수 있지만 지워진 데이터는 대개 못 돌아옵니다.
- 확인 없이 전부 승인 — 자동 승인 모드를 켜두면 삭제 명령도 함께 승인됩니다. 되돌릴 시간이 없습니다.
- 백업이 원본과 같은 곳 — 같은 서버, 같은 계정, 같은 폴더에 있는 백업은 백업이 아닙니다. 원본이 지워질 때 같이 지워집니다.
- 되돌릴 지점 없음 — 버전 관리를 안 쓰거나 커밋을 안 해두면 어제 상태로 못 돌아갑니다.
먼저 할 것: 백업은 다른 계정, 다른 장소에 둡니다. 그리고 작업을 시작하기 전에 되돌릴 지점을 하나 만들어둡니다. 이 두 가지만 해두면 나머지 실수는 대부분 복구 가능합니다.
자동 승인은 편의 기능이 아니라 권한 위임입니다. 무엇을 위임했는지 모른 채 켜면 안 됩니다.
3. 남이 들어오는 갈래
가장 늦게 발견되고 가장 오래 피해가 남습니다. 내 데이터만이 아니라 서비스를 쓴 사람들의 정보가 걸립니다.
- 마스터 키를 그대로 사용 — 모든 권한을 가진 키를 앱에서 그대로 쓰면, 그 키가 새는 순간 전부 열립니다.
- 접근 제한 미설정 — 데이터베이스에 행 단위 접근 제한을 안 켜면 로그인한 누구나 남의 데이터를 조회할 수 있습니다.
- 화면 코드에 비밀키 하드코딩 — 브라우저에서 도는 코드는 누구나 열어볼 수 있습니다. 거기 적힌 키는 공개된 키입니다.
먼저 할 것: 비밀키는 서버에만 둡니다. 화면 쪽에는 공개용 키만 내보내고, 권한은 필요한 만큼만 가진 키를 따로 발급합니다.
실제로는 이런 모양으로 터집니다
세 갈래가 추상적으로 들리면 사고는 늘 남의 일처럼 보입니다. 실제 사례는 대체로 이런 형태입니다.
자는 동안 요금이 쌓입니다
테스트로 돌려본 자동화가 실패할 때마다 재시도하도록 짜여 있었고, 실패 원인이 해결되지 않은 채 밤새 반복됩니다. 아침에 확인하면 호출 횟수가 수천 건입니다. 코드는 정상이고 알림도 왔지만, 알림은 자는 사람을 깨우지 못합니다.
확인 한 번을 건너뛰고 데이터가 사라집니다
“정리해줘”라는 요청에 AI가 폴더를 통째로 비우는 명령을 제안하고, 자동 승인 모드가 켜져 있어 그대로 실행됩니다. 몇 초면 끝납니다. 그런데 백업이 같은 서버 같은 계정에 있었다면 백업도 같이 사라집니다.
키 하나로 전부 열립니다
개발할 때 편하려고 모든 권한을 가진 키를 화면 코드에 그대로 넣어두고 그대로 배포합니다. 브라우저에서 코드를 열면 누구나 그 키를 볼 수 있고, 그 키로 데이터베이스 전체에 접근할 수 있습니다. 발견되기까지 몇 달이 걸리기도 합니다.
세 사례의 공통점은 코드가 잘못되지 않았다는 것입니다. 요청한 대로 정확히 동작했고, 요청에 한도가 없었을 뿐입니다.
AI에게 물어볼 때 이렇게 덧붙입니다
AI는 요청한 기능을 만드는 데 최적화돼 있습니다. 요청하지 않은 안전장치는 대체로 넣지 않습니다. 그래서 프롬프트에 조건을 함께 씁니다.
| 대신 이렇게 | 왜 |
|---|---|
| “비밀키는 서버 환경변수로 두고 화면 코드에 넣지 마” | 하드코딩을 미리 차단 |
| “삭제나 덮어쓰기 전에 무엇을 지우는지 먼저 보여줘” | 확인 단계를 강제 |
| “실패하면 몇 번까지만 재시도하고 멈추게 해” | 무한 루프와 요금 폭탄 방지 |
| “이 코드에서 권한이 과한 부분을 찾아줘” | 만든 뒤 스스로 점검하게 함 |
배포 전 5분 점검
- 결제 한도가 걸려 있는가. 초과 시 차단되는가.
- 백업이 원본과 다른 곳에 있는가.
- 화면 코드에 비밀키가 들어 있지 않은가. 브라우저에서 열어 검색해봅니다.
- 남의 데이터가 조회되지 않는가. 계정을 두 개 만들어 서로 안 보이는지 확인합니다.
- 어제 상태로 되돌릴 수 있는가.
이 다섯 개는 코딩 실력과 무관합니다. AI가 코드를 만들어도 한도와 권한은 사람이 정하는 영역입니다.
오류가 났을 때 물어보는 방법은 오류를 제대로 물어보는 4단계에, 무엇을 정해두지 않으면 AI가 대신 정해버리는지는 AI가 말없이 정해버리는 55가지에 정리해두었습니다. 만든 도구를 실제로 올리는 순서는 인터넷에 올리기를 보세요.
이 글은 개인이 만든 소규모 서비스를 기준으로 한 참고자료이며 보안 진단이나 전문가 검토를 대신하지 않습니다. 개인정보나 결제를 다루는 서비스라면 공개 전에 전문가 검토를 받으세요.
도움이 되는 공식자료
이 글은 퇴직생활연구소 편집실이 생성형 AI 도구로 초안을 만들고, 공식 출처를 사람이 확인한 뒤 발행했습니다. 편집자 이름은 담당 업무를 가리키는 운영명이며 실존 인물이 아닙니다. 편집실 운영 방식 보기


