byteforce

CPN 한국어 자습서 · Claude Certified Developer — Foundations Prep

3-2 · Claude Code 운영

권한 모드와 사람의 확인 단계

Permission Modes & Human Gates

Claude Code는 에이전트 루프를 터미널에서 실행하되, 여기에 한 가지를 더 둡니다. 에이전트가 하려는 모든 동작을 한 번씩 거르는 권한 시스템입니다. 무엇을 어떻게 설정할지 정하기 전에, 이 루프가 어떻게 이어지고 권한 모드가 무엇을 조절하는지부터 살펴봅니다. 그리고 모드나 규칙만으로는 정해지지 않는 것, 즉 사람이 직접 확인해야 하는 자리를 판단하는 방법까지 이어집니다.

이 장에서 배우는 것What you'll learn

약 24분
1

Claude Code가 일하는 순서 — 탐색 · 계획 · 코드

2

권한 모드 여섯 가지와 각각의 자동 승인 · 확인 · 한계

3

설정을 두는 네 층위와 우선순위 — 차단이 허용을 이긴다

4

최악의 경우로 사람의 확인 자리를 정하는 법

5

확인 하나를 지워 버린 bypass 모드 — 실제 사례

6

settings.json 조립과 사람의 확인 배치 — 점검 문항

먼저 짚고 갈 용어
에이전트 루프 (agent loop)
모델이 도구를 부르고, 결과를 받고, 일이 끝날 때까지 이어 가는 반복 과정. 모듈 2에서 API 층위로 다룬 흐름을 Claude Code가 터미널에서 그대로 실행한다.
권한 모드 (permission mode)
Claude Code가 동작마다 사람에게 확인을 얼마나 자주 물을지 정하는 설정. 속도와 점검 사이의 균형을 모드마다 다르게 잡는다.
허용 규칙 · 차단 규칙 (allow / deny rule)
어떤 도구나 명령을 자동으로 허용할지, 막을지 미리 적어 두는 규칙. 어떤 모드에서든 차단이 허용을 이긴다.
보호 경로 (protected path)
에이전트가 함부로 건드리면 안 되는 경로. 대부분의 모드는 여기에 대해서는 확인을 요구한다.
사람의 확인 단계 (human gate)
어떤 동작이 실행되기 전에 사람이 직접 검토하고 승인하도록 두는 지점. 자동 승인의 예외를 두는 자리다.
settings.json
Claude Code의 권한과 규칙을 적어 두는 설정 파일. 사용자·프로젝트·엔터프라이즈 등 여러 층위에 둘 수 있다.

Claude Code가 일하는 순서 — 탐색 · 계획 · 코드

Explore, plan, and code

Claude Code에 일을 맡기면 곧바로 코드를 쓰기 시작하지 않습니다. 먼저 파일을 읽고, 관련된 로직을 따라가며 코드베이스의 그림을 그립니다. 이 단계가 탐색입니다.

충분히 파악해서 바꿀 내용을 제안할 수 있게 되면, 그다음에 계획을 만듭니다. 계획은 어떤 편집을 할지 구조를 잡아 적은 설명입니다. 사람이 그 계획을 검토하고 승인한 뒤에야 코드 단계로 넘어가, 실제로 변경을 쓰고 실행합니다.

이 순서가 중요한 데는 이유가 둘 있습니다. 하나는 결과의 질입니다. 무언가를 건드리기 전에 코드베이스를 먼저 이해하기 때문에, 넘겨짚는 부분이 줄고 뒤따르는 영향을 더 많이 잡아냅니다. 다른 하나는 권한 모드가 끼어드는 자리가 바로 여기라는 점입니다. plan 모드는 Claude Code를 탐색 단계에 붙들어 두고, 사람이 풀어 줄 때까지 파일 편집과 셸 명령을 모두 막습니다. 낯선 코드베이스나 위험이 큰 작업에서 기본값으로 삼기 좋은 이유입니다.

큰 그림 먼저

Claude Code는 API 층위의 에이전트 루프를 그대로 실행하면서, 그 위에 확인 단계를 한 겹 더 얹은 도구입니다. 이 장의 나머지는 그 확인을 어디에 얼마나 둘지에 대한 이야기입니다.

권한 모드 여섯 가지

Permission modes: approvals, gates, and constraints

권한 모드는 Claude Code가 확인을 물으려고 멈추는 빈도를 조절합니다. 모드마다 속도와 점검 사이의 균형을 다르게 잡습니다. 어떤 모드가 맞는지는 코드베이스를 얼마나 잘 아는지, 그리고 변경을 얼마나 쉽게 되돌릴 수 있는지에 따라 달라집니다.

여섯 가지 모드가 각각 무엇을 자동으로 승인하고, 무엇은 여전히 확인을 요구하며, 어떤 한계가 있는지 정리하면 다음과 같습니다.

SIX MODES — 여섯 가지 권한 모드

default자동 승인 읽기만. 거의 모든 편집·명령 전에 확인을 묻습니다.
그래도 확인 모든 파일 편집과 셸 명령.
한계 안전하지만 신뢰된 작업에서는 느립니다. 새 프로젝트나 낯선 코드베이스의 기본값입니다.
acceptEdits자동 승인 읽기, 파일 편집, 그리고 작업 디렉터리 안의 흔한 파일 명령(mkdir · touch · rm · rmdir · mv · cp · sed). 자동 승인은 작업 디렉터리 안 경로에만 적용되고, 보호 경로는 여전히 확인을 묻습니다.
그래도 확인 그 밖의 모든 셸 명령, 작업 디렉터리 밖 쓰기, 보호 경로 쓰기.
한계 셸 실행에는 여전히 사람의 확인이 필요한 신뢰된 로컬 작업용. 에이전트가 스크립트를 실행해야 하는 경우에는 맞지 않습니다.
plan자동 승인 읽기만. 조사하고 제안하되, 편집은 하지 않습니다.
그래도 확인 사람이 계획을 승인할 때까지 모든 파일 편집과 셸 명령.
한계 민감하거나 낯선 코드베이스의 탐색·계획용. 결과물을 써야 하는 작업에는 맞지 않습니다.
auto자동 승인 거의 전부. 단, 별도 분류기가 동작마다 먼저 검토해, 요청 범위를 넘어서거나, 알 수 없는 인프라를 건드리거나, 악의적·부적절한 내용에서 비롯된 것으로 보이는 동작을 막습니다.
그래도 확인 프로덕션 배포·마이그레이션, 대량 삭제, 자격 증명 유출, main 브랜치 강제 푸시는 기본으로 차단됩니다.
한계 확인 횟수는 줄지만 안전을 보장하지는 않습니다. 연구 프리뷰이지 민감한 작업 검토를 대신하지 못합니다. 사용 가능 여부는 요금제·모델 버전·관리자 설정에 따라 다르니, 만들기 전에 현재 요건을 확인해 두는 것이 좋습니다.
dontAsk자동 승인 허용 규칙에 미리 등록한 도구와 읽기 전용 명령만. 그 밖은 전부 자동으로 거부합니다.
그래도 확인 허용 목록에 없는 모든 도구 호출은 거부됩니다. 확인을 기다리는 대기열 자체가 없습니다.
한계 잠긴 CI와 스크립트용. 제한은 잘하지만, 로컬에서 직접 작업할 때 번거로움을 줄이려는 목적에는 맞지 않습니다.
bypassPermissions자동 승인 모든 도구 호출. 확인도 안전 점검도 없습니다.
그래도 확인 평상시에는 없습니다. 표준 권한 점검을 전부 건너뛰고, rm -rf /rm -rf ~ 같은 파멸적 삭제 명령만 마지막 방어선으로 확인을 띄웁니다.
한계 환경을 버려도 되는 격리된 컨테이너나 VM 안에서만. 살아 있는 코드베이스를 다루는 개발자 워크스테이션에서는 절대 쓰지 않습니다.
핵심

default에서 bypassPermissions로 갈수록 확인은 줄어듭니다. 대신 되돌리기 어려운 실수를 막아 줄 장치도 함께 줄어듭니다. 그래서 모드를 고르는 일은 이 코드베이스를 얼마나 믿을 수 있는지에 대한 판단과 맞물립니다.

설정은 어디에 두고, 누구에게 적용되나

Where the configuration lives and who it applies to

권한 모드를 정했다면, 그 규칙을 어디에 적어 둘지가 다음 문제입니다. 설정은 여러 층위에 둘 수 있고, 층위마다 규칙이 미치는 범위가 달라집니다.

SETTINGS SCOPE — 설정을 두는 네 층위

사용자~/.claude/settings.json
한 컴퓨터의 모든 프로젝트에 적용됩니다. 어디서나 따라다녀야 하는 취향, 예를 들어 탐색 작업에 즐겨 쓰는 기본 모드를 여기에 둡니다.
프로젝트.claude/settings.json · 저장소에 커밋
저장소를 복제하는 모든 사람에게 적용됩니다. 팀 공통 규칙, 프로젝트가 쓰는 도구의 허용 규칙, 건드리면 안 되는 경로의 차단 규칙을 여기에 둡니다.
로컬 프로젝트.claude/settings.local.json · git 제외
한 프로젝트에 대한 개인 설정으로, git에서 자동으로 빠집니다. 팀 전체에 커밋하고 싶지 않은 내 취향을 여기에 둡니다.
엔터프라이즈managed-settings.json · 관리자 설정
사용자나 프로젝트 파일이 덮어쓸 수 없습니다. 환경 파일 편집 차단이나 특정 셸 명령 차단처럼, 조직 전체에 걸친 보안 통제를 여기에 둡니다.

허용 규칙과 차단 규칙은 선택한 모드 위에 겹쳐서 적용됩니다. 그리고 차단 규칙은 어떤 모드에서든 허용 규칙을 이깁니다. 가장 오래가는 통제는 엔터프라이즈 층위의 차단 규칙입니다. 개별 개발자가 지울 수 없고, bypass 모드가 걸려 있어도 그대로 적용되기 때문입니다.

쉽게 말하면

차단은 허용을 이깁니다. 아래에서 무엇을 열어 뒀든, 위에서 막아 둔 것은 열리지 않습니다.

사람이 확인해야 하는 자리 — 최악의 경우로 판단하기

Placing the review gate by worst-case cost

권한 모드와 차단 규칙은 에이전트가 무엇을 묻지 않고 할 수 있는지를 정합니다. 하지만 어떤 동작이 반영되기 전에 사람이 어디를 직접 봐야 하는지까지 정해 주지는 않습니다. 그건 한 가지 질문으로 판단합니다. 안전한 모드와 위험한 모드를 가르는 것과 같은 질문입니다. 이 동작이 사람의 확인 없이 실행되면, 최악의 경우 무슨 일이 벌어질까?

잘못됐을 때 감수할 위험이 작을수록 더 많이 통과시켜도 됩니다. 위험이 크고 되돌리기 어려울수록, 실행 전에 사람이 확인하는 단계를 두는 편이 좋습니다.

같은 질문이 확인 단계를 어디에 둘지도 정합니다. 에이전트가 코드를 쓸 때든, 풀 리퀘스트에 코멘트를 달거나 막는 봇처럼 사람 없이 자동으로 실행될 때든 똑같습니다. 여기서 배치가 세 가지로 갈립니다.

확인 단계를 어디에 둘지와 어떤 권한 모드를 고를지는, 사실 하나의 결정을 양쪽에서 본 것입니다. 모드는 세션 전체의 기본값을 정하고, 확인 단계는 그 기본값에 맡기기엔 위험이 너무 큰 한 동작에서 기본값을 덮어쓰는 자리입니다. 둘 다 "이게 확인 없이 실행되면 무엇이 깨질까"라는 하나의 질문에서 나옵니다.

COST · COMPLEXITY · RISK — 함께 따져 볼 세 가지

비용default 모드로 신뢰된 작업을 하면 도구 호출마다 확인 지연이 붙고, 긴 리팩터링에서는 이게 쌓입니다.
복잡도설정이 여러 층위의 파일에 흩어져 있고 우선순위가 겹치므로 꾸준한 관리가 필요합니다. 엔터프라이즈 층위의 차단 규칙이 프로젝트 층위의 허용 규칙과 부딪히는 경우, 프로젝트 설정을 관리하는 모든 사람이 그 관계를 이해하고 있어야 합니다.
위험위험은 맥락에 맞지 않는 모드를 쓰는 데서 옵니다. 예를 들어 격리되지 않은 컴퓨터에서 조급함에 bypass 모드를 켜면, 에이전트와 살아 있는 파일 사이의 안전 확인이 전부 사라지고, 다른 모드와 달리 보호 경로 가드까지 없어집니다.

확인 하나를 지워 버린 bypass 모드

Watch Out: The bypass mode that removed the one prompt that mattered

확인이 자꾸 뜨는 게 번거로워서 bypassPermissions로 바꿨다고 해 봅시다. 작업이 익숙하게 느껴졌기 때문입니다. 에이전트는 며칠째 얌전히 잘 움직였고, 정리 작업은 단순했고, 도구 호출마다 확인을 묻는 동작이 불필요한 마찰처럼 느껴졌습니다.

다음은 사흘 동안 별문제 없이 이어지던 코드베이스 정리 작업에서 오간 짝 프로그래밍 기록입니다.

TRANSCRIPT — 정리 작업 중 오간 대화

pairing session
개발자: "이번 건 bypassPermissions로 바꿀게. 오래된 API 엔드포인트 이름만
        바꾸는 거야. 위험할 거 없어."
Claude Code: [ /v1/legacy/ 패턴에 맞는 파일 검색 중 … 47개 발견 ]
Claude Code: [ 엔드포인트 참조 갱신 중 … ]
Claude Code: [ 이름 변경 후 정리 스크립트 cleanup.sh 실행 중 … ]
Claude Code: [ /deploy/config/prod/ 안에서 /v1/legacy/ 패턴에 맞는 파일 3개 삭제됨 … ]
개발자: "잠깐. /deploy/config/prod/ 에 뭐가 있었지?"
Claude Code: [ 프로덕션 배포용 환경별 엔드포인트 설정 파일이었습니다. 삭제되었습니다. ]
개발자: "그 디렉터리는 작업 범위가 아니었어. 나는 /src/ 만 보고 있었는데."
Claude Code: [ /v1/legacy/ 패턴이 /src/ 와 /deploy/config/prod/ 양쪽 파일에
             걸렸습니다. bypassPermissions 모드에서는 삭제 전에 확인을
             요청하지 않았습니다. ]

이 실수를 잡아 줬을 확인 창은 bypassPermissions를 켜는 순간 함께 꺼졌습니다. defaultacceptEdits 모드였다면 정리 스크립트는 확인 없이 실행되지 않았을 것이고, 삭제가 프로덕션 설정 파일에 닿기 전에 멈출 수 있었을 것입니다. bypass 모드에서는 패턴이 의도보다 넓게 걸렸고, 스크립트와 그것이 지운 파일 사이에 아무 확인도 없었습니다.

게이트가 정확히 어디였는지 짚어 둘 필요가 있습니다. 확인을 띄웠을 지점은 rm 삭제 명령 자체가 아니라 스크립트 호출이었습니다. acceptEdits는 작업 디렉터리 안 경로에 대한 rm을 포함해 흔한 파일 명령을 자동으로 승인합니다. 만약 Claude가 삭제를 rm 명령으로 곧장 실행했다면 acceptEdits는 그대로 통과시켰을 것이고, 그런 명령에 확인을 묻는 것은 default 모드뿐입니다.

주의 · WATCH OUT
  • bypass 모드는 모든 확인 창을 없앱니다. 미처 예상하지 못한 것까지 포함해서입니다.
  • 여기서 나타난 실패는, 에이전트가 의도보다 넓은 범위의 파일에 걸린 상태로 확인 지점이 없는 모드에서 움직인 것입니다.
  • bypassPermissions는 다른 모드가 지키는 보호 경로 가드도 건너뜁니다. 그래서 저장소 상태나 Claude 자신의 설정까지 자동 확인을 잃습니다.
  • 이 빈틈을 메우려면, 모드를 바꾸기 전에 민감한 디렉터리에 차단 규칙을 걸어 둡니다.
  • 안전장치를 잃지 않으면서 확인만 줄이고 싶다면, 완전한 bypass 대신 분류기가 거르는 모드(예: auto)를 씁니다.
기억할 점

스스로 점검 — 설정 조립과 사람의 확인 배치

Checkpoint · Assemble the settings and place the human gate

결제 모듈을 신뢰된 로컬 환경에서 리팩터링하도록 Claude Code를 설정하는 상황입니다. 조건은 셋입니다. 파일 편집은 자동으로 승인하되, 파괴적 셸 명령은 절대 실행되지 않아야 하고, .env.production 파일은 에이전트가 절대 읽을 수 없어야 합니다. 아래는 고를 수 있는 settings.json 조각들입니다.

settings.json · 조각 A–E

settings.json · pieces
// Piece A
{ "permissions": { "defaultMode": "default" } }

// Piece B
{ "permissions": { "defaultMode": "bypassPermissions" } }

// Piece C
{ "permissions": { "allow": ["Bash(npm run:*)"],
                   "deny": ["Bash(rm:*)", "Bash(git push:*)"] } }

// Piece D
{ "permissions": { "deny": ["Read(.env.production)"] } }

// Piece E
{ "permissions": { "allow": ["Bash(*)", "Edit(*)"] } }

정답을 먼저 떠올려 본 뒤 골라 보세요. 맞히면 설명이 나옵니다. 조건에 맞는 조각은 모두 두 개입니다 — 앞의 두 문항이 그 둘을 하나씩 짚습니다.

Q1파일 편집은 살리되 파괴적 셸 명령은 막으려고 합니다. 셸 실행을 걸러 주는 조각은 어느 것일까요?

Q2.env.production을 에이전트가 읽지 못하게 막는 조각은 어느 것일까요?

Q3이 설정으로 편집은 자동 승인됩니다. 리팩터링 도중 에이전트가 여러 프로덕션 서비스가 읽는 배포 설정 파일을 바꾸겠다고 제안합니다. 이 한 동작에는 사람의 확인을 어디에 둬야 할까요?

MEMBER SESSION REQUIRED · REGISTRATION IS FREE

여기부터는 등록한 분에게 열립니다.

전 코스는 계속 무료입니다. 등록하면 이 코스의 남은 38개 레슨을 끝까지 읽을 수 있습니다.

등록하고 이어서 읽기

이미 등록하셨다면 그때 쓰신 이메일을 넣어 주세요.