AI 에이전트가 '해서는 안 되는 것'을 막는 방법: 개인 개발 현장의 보안 대책
요약
개인 개발자가 AI 에이전트(Claude Code)를 활용하여 앱 개발 및 운영 작업을 자동화하는 과정에서 발생할 수 있는 위험성을 다룹니다. 이 글은 AI가 '해서는 안 되는 일'을 막기 위해 규칙, 구조, 사람의 개입이라는 3중 안전장치를 구축한 실질적인 보안 대책과 메커니즘을 소개합니다.
핵심 포인트
- AI 에이전트에게 맡길 수 없는 작업(심사 제출, 앱 공개 등)은 반드시 사람이 최종 결정해야 합니다.
- 규칙만으로는 부족하며, 구조적 제어와 사람의 개입을 결합한 3중 안전장치가 필요합니다.
- 비밀번호나 민감 정보는 AI가 직접 입력하지 않도록 하고, 모든 외부 작업 전 사용자 OK를 받습니다.
iPhone 앱을 혼자 만드는 Atsushi입니다. 본업은 업무 시스템의 인프라 계열 엔지니어입니다.
개인 개발에서는 AI 에이전트 Claude Code에게 상당한 작업을 맡기고 있습니다. 코드를 작성하고, 테스트를 실행하며, App Store Connect에 설명문을 입력하고, SNS 게시글을 준비하고, 숫자를 수집하는 등의 작업입니다. 앱별/역할별로 세션을 나누어 동시에 여러 개를 구동하고 있습니다(구조는 이전 글에 적었습니다).
편리한 반면, AI는 해서는 안 되는 일도 해버릴 수 있습니다. 실제로 확인을 거치지 않고 앱을 심사에 제출해 버린 경험도 있었습니다.
이 글에서는 제가 개인 개발 현장에서 실천하고 있는, AI 에이전트가 '해서는 안 되는 것'을 막는 메커니즘을 소개합니다. 잘되지 않았던 점도 함께 적겠습니다.
전체적인 구조: 3중으로 차단하기

처음에는 CLAUDE.md(Claude Code가 매번 읽도록 지정된 파일)에만 작성했습니다. 하지만 규칙은 AI가 잊을 때가 있습니다. 대화가 길어져 요약되면, 세세한 규칙이 빠져나가기 때문입니다.
그래서 지금은 규칙・구조・사람의 세 가지를 중첩하고 있습니다. 어느 하나라도 빠지더라도 다른 것으로 막히도록 하기 위함입니다.
1. 규칙: 외부로 나가는 작업은 사람이 결정한다
무엇이 '외부로 나가는 작업'인가
AI에게 맡겨도 되는 작업과, 사람의 OK가 필요한 작업을 명확하게 구분하고 있습니다.

선을 긋는 기준은 취소하기 어려운지, 외부 사람에게 보이는지입니다. 코드 수정이나 테스트는 다시 할 수 있지만, 심사 제출, 앱 공개, 가격 확정, SNS 게시물 등은 한번 내보내면 취소할 수 없습니다.
CLAUDE.md에는 다음과 같이 적혀 있습니다(일부).
## 멋대로 진행하지 않기
- 다음 작업은 매번 사용자의 OK를 받은 후에 수행한다.
- 심사 제출, 앱 공개, Apple에 답변 보내기
...
'수동' 설정은 규칙을 구조로 보완한 예입니다. AI가 실수로 심사에 제출하더라도, 공개까지는 되지 않습니다.
실패에서 탄생한 규칙
이 규칙은 처음부터 있던 것이 아닙니다.
한 번 앱 공개 전 단계에서, AI가 확인 없이 심사에 제출해 버렸습니다. 아직 수정하고 싶은 부분이 남아있었기 때문에 급하게 철회했습니다. 그 이후로 위 규칙을 추가했습니다.
부탁은 사람의 허락 대신으로 사용하지 않는다
세션을 나누어 운영하다 보니, 세션끼리 업무를 서로 의뢰하게 됩니다. 여기에 함정이 있습니다.
예를 들어, 컨설팅 역할의 세션이
비밀번호는 입력시키지 않기
App Store Connect나 SNS 화면에 정보를 입력할 때는 AI가 브라우저를 조작하게 합니다. 하지만 로그인은 사람이 직접 합니다. 비밀번호는 AI에게 입력시키지 않습니다.
입력하는 값 또한 '값은 보여줘도 괜찮다고 허락받은 후에 넣는다'는 규칙을 정하고 있습니다.
3. 시스템: 후크와 AI의 안전장치로 막기
AI의 안전장치로도 막히다
Claude Code 자체에도 취소하기 어려운 조작을 막는 안전장치가 있습니다. 실제로 결제 금액 변경은 브라우저를 통해 요청했음에도 AI 측에서 막혔습니다.
처음에는 불편하게 느껴졌지만, 결과적으로 '마지막 버튼은 사람이 누른다'라는 분담이 자연스럽게 자리 잡았습니다.
규칙을 후크로 시스템화하기
Claude Code의 PreToolUse 후크를 사용하면 AI가 커맨드를 실행하기 전에 자동으로 내용을 확인하고 막을 수 있습니다.
저는 여러 세션이 같은 iOS 시뮬레이터를 건드리면서 데이터를 망친 사고를 계기로, 기기(단말)를 ID로 지정하지 않은 커맨드나 다른 세션이 사용하는 기기에 대한 조작을 막는 후크를 넣었습니다 (코드는 이전 글에 올렸습니다).
후크로 막을 때는 이유를 함께 반환하는 것이 핵심입니다.
import json, sys
def deny(reason):
print(json.dumps({"hookSpecificOutput": {
...
이유가 돌아오면 AI는 그것을 읽고 '다른 방법으로 한다', '사람에게 확인한다'와 같이 스스로 다음 행동을 선택합니다. 단순히 막는 것보다 작업이 멈추기 어렵게 만듭니다.
4. 공개하기 전에, 누설 여부를 확인하기
글이나 SNS 공지 역시 AI와 함께 만들고 있습니다. AI는 자료를 모으는 데 능숙해서 넣으면 안 되는 것까지 모아옵니다.
넣지 않을 것을 정하고 기계적으로 확인하기
글을 쓰기 전에, 넣지 않을 것을 정합니다.
- 각종 ID (앱의 ID, 심사 제출 ID, API 키의 ID, 단말의 ID)
- 이메일 주소, 전화번호, 손 안의 폴더 경로
- 공개 전 기능이나 가격, 매출
그 후, 작성된 원고를 넣지 않을 단어 목록으로 기계적으로 확인한 후에 배포합니다.
import re, sys
text = open(sys.argv[1], encoding="utf-8").read()
ng_words = ["/Users/", "@gmail.com", "미공개 앱 이름"] # 넣지 않을 단어 목록
...
화면 사진은, 숫자를 가린 후에 사용하기
숫자 대시보드 화면 사진을 글에 올릴 때는, 숫자 데이터를 모으는 담당 세션에게 화면의 숫자를 모두 '●●'로 대체한 버전을 만들게 했습니다.
리포지토리는 비공개로 하기
앱 코드도, 소개 사이트도, 이 글의 원고도 GitHub의 비공개 리포지토리에 보관합니다. 공개하는 것은 확인이 끝난 글이나 사이트만입니다.
개인정보 보호정책은, 코드와 대조하기
앱의 개인정보 보호정책은 앱 담당 세션이 작성하고, 다른 세션이 앱 코드와 대조한 후에 공개합니다.
실제로 이 대조 과정에서 누락된 부분이 발견되었습니다. 위젯을 위해 '프리미엄 구매 여부'를 공유 저장 영역에 넣었는데, 정책에는 쓰여 있지 않았던 것입니다. 작성자 본인(의 AI)은 알아차리기 어려워 다른 시각으로 보는 것이 효과적이었습니다.
5. Git 관련 사고 예방하기
- 같은 리포지토리를 다른 세션도 건드리고 있으면, 그 작업 중이던 내용까지 함께 커밋해 버립니다. 수정한 파일만 이름으로 지정합니다 (
git add -A는 사용하지 않습니다.)
수정할 때마다 push 하기. 한 앱의 경우, 만들기 시작한 12일 동안 단 한 번도 GitHub에 올린 적이 없었습니다. Mac이 고장 나면 전부 사라졌을 것이기 때문에, 그 이후로는 건드릴 때마다 반드시 push 합니다.
잘 안 되었던 것
⚠️ [IMG:N] 형식 토큰은 이미지 placeholder 입니다. 번역하지 말고 원래 위치에 그대로 유지하세요.
후크가 텍스트만으로 판단하여 오탐지한 경우. 시뮬레이터의 후크는 명령어의 텍스트에 특정 단어가 포함되어 있는지 여부로 판단합니다. 따라서 설명문만 출력하는 명령어 안에 해당 단어가 있어도 중단되었습니다.
- 명령어를 수정하는 후크와 AI 자동 승인의 조합이 좋지 않았습니다. 다른 후크(명령어 출력을 짧게 하는 것)가 명령어를 수정하면, AI의 자동 승인이 내용을 판단하지 못하고 단순히 개수를 세는 명령어까지 멈추는 경우가 있었습니다.
- 규칙을 정해도 요약 후에 빠지는 경우가 있습니다. 그렇기 때문에 규칙에만 의존하지 않고, 시스템과 사람을 결합하고 있습니다.
요약
- 외부로 나가는 작업(심사/공개/가격/게시/바로 공개되는 push)은,
사람이 결정하고, 사람이 누릅니다. - 여러 AI를 구동할 때는,
요청을 사람의 허가 대신하지 않습니다. - 토큰은
최소한의 허가로 발행하며, 사람이 입력하고, AI는 내용을 보지 않습니다. - 규칙은
후크와 안전장치로 시스템화합니다. 멈출 때는 이유를 반환합니다. 공개하기 전에,
싣지 않을 것을 기계적으로 확인합니다.
AI 에이전트에게 맡길 수 있는 범위가 넓어질수록, '무엇을 시키지 않을 것인가'를 정해두는 것이 중요하다고 느낍니다. 이 글이 AI와 함께 개발하는 분들이 자신의 현장을 되돌아보는 계기가 되었으면 좋겠습니다.
AI를 '부서'로 나누어 개인 개발을 진행하는 시스템 전체는 note의 유료 기사 시리즈(총 3회)에 정리했습니다.
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기