SpyBara
Go Premium

Documentation 2026-07-28 23:57 UTC to 2026-07-29 19:02 UTC

5 files changed +617 −62. View all changes and history on the product overview
2026
Wed 29 19:02 Tue 28 23:57 Mon 27 21:02 Sun 26 19:02 Sat 25 21:59 Fri 24 23:01 Thu 23 23:57 Wed 22 23:59 Tue 21 23:00 Mon 20 23:01 Sat 18 16:02 Fri 17 22:57 Thu 16 22:59 Wed 15 22:00 Tue 14 23:01 Mon 13 23:57 Sat 11 19:03 Fri 10 17:00 Thu 9 23:58 Wed 8 16:02 Tue 7 16:02 Mon 6 23:57 Sat 4 03:01 Fri 3 23:00 Thu 2 23:59 Wed 1 21:01

claude-apps-gateway.md +349 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Amazon Bedrock, AWS의 Claude Platform, Google Cloud 및 Microsoft Foundry용 Claude 앱 게이트웨이

6 

7> SSO 로그인, 그룹별 모델 액세스, OTLP 텔레메트리를 갖춘 자체 호스팅 게이트웨이를 통해 Amazon Bedrock, AWS의 Claude Platform, Google Cloud 또는 Microsoft Foundry에서 Claude Code를 실행합니다.

8 

9<Note>

10 Claude 앱 게이트웨이는 자신의 클라우드 제공자를 통해 추론을 라우팅해야 하거나 선호하는 조직을 위해 설계되었습니다. 예를 들어 [데이터 거주지](/docs/ko/claude-apps-gateway-deploy#compliance-posture) 요구사항을 충족하기 위해서입니다. 이러한 요구사항이 없으며 SCIM 프로비저닝 또는 웹 및 모바일의 Claude Code와 같은 다른 기능에 액세스하려면 Claude Enterprise가 더 적합할 수 있습니다. 모든 배포 방법의 전체 비교는 [기능 가용성](/docs/ko/feature-availability) 페이지를 참조하십시오.

11</Note>

12 

13Claude 앱 게이트웨이는 개발자의 Claude Code 클라이언트와 모델 제공자 사이에 위치하는 자체 호스팅 서비스입니다. 개발자는 API 키나 클라우드 자격증명을 보유하는 대신 회사 ID 제공자(IdP)로 로그인합니다. 게이트웨이는 업스트림 자격증명을 보유하고, IdP 그룹별로 모델 액세스 및 [관리 설정](/docs/ko/permissions#managed-settings)을 적용하며, 사용 현황 텔레메트리를 자신의 관찰성 스택으로 전달합니다.

14 

15이는 `claude` 바이너리에 포함되어 있으므로, 노트북에서 Claude Code를 실행하는 동일한 실행 파일이 `claude gateway --config gateway.yaml`로 게이트웨이 서버를 실행합니다.

16 

17이 페이지는 다음을 다룹니다:

18 

19* [Claude 앱 게이트웨이를 사용하는 이유](#why-claude-apps-gateway), 자체 실행보다 추가되는 것, 그리고 다른 것이 더 적합한 경우

20* [전제조건](#prerequisites)이 포함된 [빠른 시작](#quickstart)으로 게이트웨이를 0에서 로그인한 개발자까지 진행

21* [개발자 연결](#connect-developers), 관리 설정을 통해 게이트웨이 URL 설정 포함

22* [가용성 및 제한사항](#availability-and-limitations) - 게이트웨이를 통해 작동하는 Claude Code 기능 및 서버가 지원하는 것 포함

23 

24동반 페이지는 더 깊이 있게 다룹니다. [구성 참조](/docs/ko/claude-apps-gateway-config)는 빠른 시작이 작성하는 YAML 파일의 모든 옵션을 다루고, [배포 가이드](/docs/ko/claude-apps-gateway-deploy)는 IdP별 설정, Kubernetes 및 Cloud Run 배포, 그리고 운영을 다룹니다.

25 

26<h2 id="why-claude-apps-gateway">

27 Claude 앱 게이트웨이를 사용하는 이유

28</h2>

29 

30[게이트웨이 개요](/docs/ko/gateways)는 게이트웨이가 무엇을 하는지, 왜 하나를 실행하는지 다룹니다. Claude 앱 게이트웨이는 Anthropic의 자체 게이트웨이로, `claude` 바이너리에 내장되어 있고 각 Claude Code 릴리스와 함께 테스트되므로, Claude Code가 보내는 헤더와 요청 필드를 운영자가 별도의 허용 목록을 유지하지 않고도 전달합니다. 배포되면 다음을 제공합니다:

31 

32* **자격증명**: 업스트림 API 키 또는 클라우드 자격증명은 인프라에만 존재합니다. 개발자는 회사 SSO로 인증하고 단기 베어러 토큰을 받으므로, 오프보딩은 IdP에서 발생합니다. 사용자를 프로비저닝 해제하면 게이트웨이 액세스는 기본값인 1시간 내에 세션 수명 내에 만료됩니다.

33* **액세스 제어**: IdP 그룹은 모델 허용 목록 및 [관리 설정](/docs/ko/permissions#managed-settings) 정책에 매핑됩니다. 게이트웨이는 모델 액세스를 서버 측에서 적용하여 부여되지 않은 모델에 대한 요청을 거부하고, 각 그룹의 관리 설정 정책을 선택하며, CLI는 [관리 설정 계층](/docs/ko/settings#settings-precedence)에서 이를 적용합니다. 다른 팀은 다른 모델, 도구, 권한을 얻고, 개발자는 정책이 잠근 것을 재정의할 수 없습니다.

34* **설정 전달**: 게이트웨이는 관리 설정을 로그인한 클라이언트에 자체적으로 전달하여 claude.ai 관리 콘솔의 [서버 관리 설정](/docs/ko/server-managed-settings)을 대체합니다.

35* **텔레메트리**: Datadog, Splunk 또는 ClickHouse와 같은 각 구성된 대상은 기본적으로 토큰 수, 모델, 사용자 ID 및 지연 시간이 포함된 [OpenTelemetry Protocol (OTLP) 메트릭](/docs/ko/monitoring-usage)을 받으며, 로그 및 추적은 대상별 옵트인입니다.

36* **업스트림 라우팅**: 클라이언트는 Anthropic Messages API를 게이트웨이에 말하고, 게이트웨이는 Amazon Bedrock, [AWS의 Claude Platform](/docs/ko/claude-platform-on-aws), Google Cloud의 Agent Platform, Microsoft Foundry 또는 Anthropic API 중 각 업스트림에 대해 변환하며, 그들 사이에 장애 조치가 있습니다. 개발자가 알아차리거나 재구성하지 않고도 지역, 제공자 또는 장애 조치 순서를 변경할 수 있습니다.

37 

38<Frame>

39 <img src="https://mintcdn.com/claude-code/st9_ZQOFsZa3cKFl/images/claude-gateway-architecture.svg?fit=max&auto=format&n=st9_ZQOFsZa3cKFl&q=85&s=560770d8f49bbd6f1ca7090ed1f13c03" alt="Claude Code 클라이언트가 HTTPS와 베어러 토큰으로 인프라 내 자체 호스팅 Claude 앱 게이트웨이에 연결되고, IdP에 대해 사용자에게 로그인하고, PostgreSQL에 인증 상태를 저장하고, OTLP 수집기에 텔레메트리를 중계하고, Amazon Bedrock, Claude Platform on AWS, Google Cloud, Microsoft Foundry 또는 Anthropic API로 추론을 전달하는 것을 보여주는 다이어그램" width="760" height="320" data-path="images/claude-gateway-architecture.svg" />

40</Frame>

41 

42<Note>

43 게이트웨이의 자체 데이터 평면은 Anthropic API가 구성된 업스트림이 아닌 한 Anthropic 인프라에 아무것도 보내지 않습니다. 텔레메트리, 감사 로그, 관리 설정 및 개발자의 IdP 신원이 어디로 가는지 제어하고, 게이트웨이는 이 중 어느 것도 Anthropic에 보내지 않습니다. 나머지 트래픽의 경우 CLI 프로세스가 보낼 수 있는 것과 이를 닫는 방법은 [규정 준수 태세](/docs/ko/claude-apps-gateway-deploy#compliance-posture)를 참조하세요.

44</Note>

45 

46Claude Code의 어떤 기능이 게이트웨이를 통해 작동하고 서버 자체가 무엇을 지원하는지는 아래 [가용성 및 제한사항](#availability-and-limitations)을 참조하세요. 비용, 우회, 여러 게이트웨이 실행, 서버리스 플랫폼과 같은 결정은 [배포 가이드](/docs/ko/claude-apps-gateway-deploy#deployment)를 참조하세요.

47 

48<h3 id="other-gateway-implementations">

49 다른 게이트웨이 구현

50</h3>

51 

52이미 필요를 충족하는 LLM 게이트웨이 또는 API 게이트웨이를 실행 중인 경우, 계속 사용하세요; [다른 LLM 게이트웨이](/docs/ko/llm-gateway)는 Claude Code를 이에 대해 구성하는 것을 다룹니다.

53 

54[게이트웨이 프로토콜 참조](/docs/ko/llm-gateway-protocol)는 Claude Code가 모든 게이트웨이에서 기대하는 계약을 문서화합니다: 호출하는 엔드포인트, 전달할 헤더 및 본문 필드, 그리고 제거될 때 작동하지 않는 것입니다. 실행 중인 Claude 앱 게이트웨이는 `GET /protocol`에서 해당 계약의 상위 집합을 제공하며, SSO 로그인, 관리 설정 전달 및 텔레메트리를 위한 Claude 앱 게이트웨이 특정 엔드포인트를 추가합니다. 배포된 게이트웨이(예: 아래 [빠른 시작](#quickstart)이 생성하는 것)에서 `curl https://claude-gateway.internal.example.com/protocol`로 가져옵니다. 프로토콜의 주요 변경사항은 미리 공지되지만, 무한 역호환성은 보장되지 않습니다.

55 

56<h2 id="quickstart">

57 빠른 시작

58</h2>

59 

60이 빠른 시작은 최소 경로를 안내합니다: IdP에서 OAuth 클라이언트를 등록하고, `gateway.yaml`을 작성하고, Docker Compose로 게이트웨이를 Postgres와 함께 실행하고, 엔드 투 엔드 로그인을 확인합니다. Amazon Bedrock 업스트림을 사용합니다; Claude Platform on AWS, Google Cloud의 Agent Platform, Microsoft Foundry 및 Anthropic API는 [구성 참조](/docs/ko/claude-apps-gateway-config#upstreams)에 표시된 대로 `upstreams` 블록을 교체하여 동등하게 지원됩니다. 끝에서 개발자가 `/login`할 수 있는 게이트웨이가 있습니다.

61 

62<Note>

63 **개인 네트워크에 배포하세요.** Claude Code는 주소가 개인인 게이트웨이에만 연결합니다. 이는 신뢰할 수 있는 게이트웨이가 개발자 머신에서 명령을 실행하는 설정을 푸시할 수 있기 때문에 보안 가드입니다. 게이트웨이를 내부 로드 밸런서 또는 VPN 뒤에 놓고 개인 IP로만 확인되는 호스트명을 제공하세요.

64 

65 Anthropic이 운영하는 공개 게이트웨이 엔드포인트는 예외입니다: `/login`은 `https://`를 통해 이들을 허용합니다. 이들은 Anthropic 자체가 운영하는 작은 고정 게이트웨이 세트입니다; 이들은 선택하거나 구성할 수 있는 배포 옵션이 아닙니다. 목록은 Claude Code에 컴파일되므로 구성이 호스트명을 추가할 수 없고 호스팅하는 게이트웨이는 면제 대상이 될 수 없습니다. {/* min-version: 2.1.206 */}v2.1.206 이전에는 `/login`이 다른 공개 주소처럼 이러한 엔드포인트를 거부했습니다.

66</Note>

67 

68<h3 id="prerequisites">

69 필수 조건

70</h3>

71 

72시작하기 전에 다음을 준비하세요:

73 

74| 필요한 것 | 세부사항 |

75| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

76| Claude Code v2.1.195 이상 | `claude gateway` 서브명령 및 게이트웨이 로그인 흐름은 v2.1.195에서 제공됩니다. 이전 공개 빌드는 이를 포함하지 않습니다. 게이트웨이 서버를 실행하는 머신과 각 개발자의 머신 모두 v2.1.195 이상이어야 합니다; `claude update`를 실행하여 최신 릴리스를 받으세요. {/* min-version: 2.1.198 */}[Claude Platform on AWS 업스트림](/docs/ko/claude-apps-gateway-config#claude-platform-on-aws)은 게이트웨이 서버에서 Claude Code v2.1.198 이상이 필요합니다. |

77| OpenID Connect (OIDC) ID 제공자 | Okta, Microsoft Entra ID, Google Workspace, Keycloak, Dex 또는 PingFederate와 같은 다른 OIDC 호환 IdP. 게이트웨이는 표준 OIDC 검색 및 인증 코드 흐름을 이에 대해 실행합니다. SAML 및 LDAP는 지원되지 않습니다. |

78| PostgreSQL 14 이상 | 브라우저 콜백이 쓰고 폴링 CLI가 읽는 장치 로그인 흐름, 그리고 속도 제한 카운터를 지원합니다. 가장 작은 계층을 포함한 모든 관리 Postgres가 작동합니다. 지출 제한이 구성되지 않으면 게이트웨이는 몇 KB의 단기 인증 상태를 저장합니다; [지출 제한](/docs/ko/claude-apps-gateway-spend-limits)을 사용하면 백업해야 하는 지속적인 지출, 감사 및 ID 테이블도 보유합니다. `?sslmode=require`를 통한 TLS가 권장됩니다. |

79| 모델 업스트림 | Amazon Bedrock 자격증명, Claude Platform on AWS 자격증명, Google Cloud 자격증명, Microsoft Foundry 리소스 또는 Anthropic API 키. 장애 조치를 사용한 여러 업스트림이 지원됩니다. |

80| HTTPS | 게이트웨이는 개발자 노트북과 로그인에 사용되는 모든 브라우저에서 `https://`를 통해 도달 가능해야 합니다; 게이트웨이는 동일한 리스너에서 장치 확인 페이지를 제공합니다. `listen.tls`를 통해 TLS 인증서를 제공하거나, TLS 종료 수신 대기 뒤에서 실행하고 `listen.public_url`을 설정하세요. 일반 `http://` 원본은 로컬 개발을 위해 루프백에서만 허용됩니다. |

81| 개인 네트워크 주소 | `/login`에서 Claude Code는 게이트웨이의 호스트명 또는 IP 주소가 개인 주소로만 확인되도록 요구합니다: RFC 1918, CGNAT `100.64.0.0/10`, IPv6 ULA `fc00::/7` 또는 로컬 개발을 위한 루프백. 확인은 각 확인된 IP에서 실행되므로, 이름이 확인되는 주소가 공개인 경우 `/login`은 URL을 거부합니다. 개발자 머신이 HTTPS를 회사 프록시를 통해 라우팅하는 경우, 로그인은 프록시 호스트도 개인 주소로 확인되도록 요구합니다; 그렇지 않으면 게이트웨이 호스트를 `NO_PROXY`에 추가하여 CLI가 직접 연결하도록 하세요. {/* min-version: 2.1.206 */}Anthropic이 운영하는 공개 게이트웨이 엔드포인트는 개인 주소 및 프록시 확인에서 면제됩니다: `/login`은 정확한 호스트명 일치로 `https://`를 통해 이들을 허용하므로, 개인 네트워크 요구사항은 직접 호스팅하는 게이트웨이에만 적용됩니다. v2.1.206 이전에는 `/login`이 Anthropic이 운영하는 엔드포인트를 다른 공개 주소처럼 거부했습니다. |

82| Linux 런타임 | 게이트웨이 서버는 네이티브 Linux 바이너리에서만 실행됩니다. macOS는 로컬 개발에 작동합니다. Windows는 서버 플랫폼으로 지원되지 않습니다. |

83 

84게이트웨이 서버는 네이티브 `claude` 바이너리가 필요합니다; [Claude Code 설치](/docs/ko/setup)에 설명된 대로 고정된 릴리스를 다운로드하세요. 서버는 Claude Code가 Node 아래에서 실행될 때 사용 불가능한 런타임 기능을 사용합니다. 부팅 시 `requires the native binary`가 표시되면 독립형 설치 방법 중 하나로 전환하세요.

85 

86<h3 id="steps">

87 단계

88</h3>

89 

90<Steps>

91 <Step title="IdP에서 OAuth 클라이언트 등록">

92 게이트웨이의 호스트명을 먼저 결정하세요. 리다이렉트 URI가 일치해야 하기 때문입니다. 새 OIDC 웹 애플리케이션을 만들고 리다이렉트 URI를 `https://claude-gateway.<your-domain>/oauth/callback`으로 설정하세요. 여기서 호스트는 3단계에서 [`listen.public_url`](/docs/ko/claude-apps-gateway-config#listen)로 설정하는 동일한 값입니다. `client_id` 및 `client_secret`을 기록하세요. IdP별 지침은 [ID 제공자 설정](/docs/ko/claude-apps-gateway-deploy#identity-provider-setup)에 있습니다.

93 </Step>

94 

95 <Step title="PostgreSQL 데이터베이스 프로비저닝">

96 가장 작은 관리 계층을 포함한 모든 Postgres 14 이상이 작동합니다. 게이트웨이는 부팅 시 자체 스키마 마이그레이션을 실행하므로 데이터베이스 사용자는 `CREATE TABLE` 권한이 필요합니다. 보안 정책이 애플리케이션 역할의 DDL을 금지하는 경우, 대신 스키마를 미리 만드세요; [`store`](/docs/ko/claude-apps-gateway-config#store)를 참조하세요.

97 </Step>

98 

99 <Step title="gateway.yaml 작성">

100 비밀은 `${ENV_VAR}` 확장을 통해 읽혀지므로 파일 자체는 버전 제어에 있을 수 있습니다. `/login`이 공개 주소를 거부하기 때문에 개인 IP로 확인되는 `public_url` 호스트명을 사용하세요. 최소 구성에는 5개 섹션이 있고, 다른 모든 필드는 기본값을 가집니다:

101 

102 ```yaml gateway.yaml theme={null}

103 listen:

104 host: 0.0.0.0

105 port: 8080

106 # TLS 종료 프록시 뒤에서 필수. IdP

107 # redirect_uri 및 검색 문서에 사용됨.

108 public_url: https://claude-gateway.internal.example.com

109 

110 oidc:

111 issuer: https://login.example.com # /.well-known/openid-configuration을 제공해야 함

112 client_id: 0oa1example2

113 client_secret: ${OIDC_CLIENT_SECRET}

114 allowed_email_domains: [example.com] # 조직 외부의 id_tokens 거부

115 userinfo_fallback: true # email/groups를 생략하는 IdP의 경우; 그 외에는 무해함

116 

117 session:

118 jwt_secret: ${GATEWAY_JWT_SECRET} # openssl rand -base64 32

119 ttl_hours: 1 # IdP 프로비저닝 해제 시 취소 지연도 제한

120 

121 store:

122 postgres_url: ${GATEWAY_POSTGRES_URL} # 관리 Postgres의 경우 ?sslmode=require 추가

123 

124 upstreams:

125 - provider: bedrock

126 region: us-east-1

127 auth: {} # 비어있음: AWS 기본 자격증명 체인

128 # (IRSA, EC2/ECS 작업 역할, 환경 변수, ~/.aws)

129 

130 # 모델은 업스트림별로 자동으로 변환됩니다. 기본 제공 카탈로그

131 # claude-opus-4-8을 us.anthropic.claude-opus-4-8으로 매핑하고 모든

132 # Bedrock 지원 Claude 모델에 대해 동일하게 합니다. false로 설정하고 `models:` 목록을 추가하여

133 # 특정 모델만 노출하세요.

134 auto_include_builtin_models: true

135 ```

136 

137 이 구성은 기본 Bedrock 모델 카탈로그로 작동하는 로그인 루프에 충분합니다. 실행되면 [`managed.policies`](/docs/ko/claude-apps-gateway-config#managed)를 통해 그룹별 RBAC 및 관리 설정을 추가하고, [`telemetry`](/docs/ko/claude-apps-gateway-config#telemetry)를 통해 텔레메트리 팬아웃을 추가하고, [`models`](/docs/ko/claude-apps-gateway-config#models)를 통해 다중 업스트림 장애 조치, 프로비저닝된 처리량 ARN 또는 미국 이외 지역을 추가하세요.

138 

139 <Note>

140 Bedrock 업스트림은 `bedrock:InvokeModel` 및 `bedrock:InvokeModelWithResponseStream`을 `inference-profile/us.anthropic.*` ARN과 기본 `foundation-model/anthropic.*` ARN 모두에 가진 AWS 주체가 필요하며, Bedrock 콘솔에서 원하는 Claude 모델에 대해 모델 액세스가 활성화되어야 합니다. EKS의 IRSA, ECS 작업 역할 또는 EC2 인스턴스 프로필보다는 정적 키를 사용하여 자격증명을 제공하세요. [`upstreams` 참조](/docs/ko/claude-apps-gateway-config#upstreams)는 전체 IAM 세부사항, 클라우드 간 자격증명 매트릭스, 다른 제공자의 `auth` 블록을 가집니다.

141 </Note>

142 </Step>

143 

144 <Step title="실행">

145 [이미지 요구사항](/docs/ko/claude-apps-gateway-deploy#container-image)을 충족하는 `claude` 바이너리 주위에 컨테이너 이미지를 빌드한 다음 Postgres와 함께 실행하세요:

146 

147 ```yaml docker-compose.yaml theme={null}

148 services:

149 gateway:

150 image: <your-registry>/claude-gateway:<version>

151 ports: ["8080:8080"]

152 volumes: ["./gateway.yaml:/etc/claude/gateway.yaml:ro"]

153 environment:

154 OIDC_CLIENT_SECRET: ${OIDC_CLIENT_SECRET}

155 GATEWAY_JWT_SECRET: ${GATEWAY_JWT_SECRET}

156 GATEWAY_POSTGRES_URL: postgres://gw:pw@postgres/gateway

157 # AWS 자격증명: 프로덕션에서는 이를 생략하고 인스턴스

158 # 역할을 사용하세요. 로컬 Compose 테스트의 경우 자신의 것을 전달하세요:

159 AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}

160 AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}

161 AWS_SESSION_TOKEN: ${AWS_SESSION_TOKEN}

162 depends_on:

163 postgres:

164 condition: service_healthy

165 postgres:

166 image: postgres:16-alpine

167 environment: { POSTGRES_USER: gw, POSTGRES_PASSWORD: pw, POSTGRES_DB: gateway }

168 healthcheck:

169 test: ["CMD-SHELL", "pg_isready -U gw"]

170 interval: 5s

171 volumes: ["pgdata:/var/lib/postgresql/data"]

172 volumes: { pgdata: }

173 ```

174 

175 게이트웨이는 구성을 읽고, IdP에 대해 OIDC 검색을 실행하고, Postgres 스키마 마이그레이션을 적용하고, 업스트림 클라이언트를 빌드하고, 수신 대기를 시작하는 단일 Linux 바이너리입니다. 부팅은 구성, Postgres 연결(5초 타임아웃), OIDC 검색 및 업스트림 클라이언트 구성에 대해 실패 폐쇄됩니다. 이 중 하나가 도달 불가능하거나 잘못 구성된 경우, 게이트웨이는 저하된 상태에서 트래픽을 제공하는 대신 오류로 종료됩니다.

176 

177 성공적인 부팅은 Bedrock 및 Agent Platform 인스턴스 자격증명이 부팅 시가 아닌 첫 요청에서 확인되기 때문에 추론 경로를 검증하지 않습니다.

178 

179 부팅 시퀀스에 대해 stderr를 감시하세요. 로그 라인은 `[gateway] <timestamp> <level> <message>` 형식을 사용하고, 감사 이벤트는 `evt` 필드가 있는 단일 라인 JSON이며, 시작 배너(아래 생략됨)는 마이그레이션과 수신 대기 라인 사이에 인쇄됩니다. 순서대로 다음을 볼 수 있습니다:

180 

181 ```text theme={null}

182 {"ts":"2026-06-10T17:03:21.114Z","evt":"config.load","path":"/etc/claude/gateway.yaml","sha256":"…"}

183 [gateway] 2026-06-10T17:03:21.408Z info migration 1 applied

184 [gateway] 2026-06-10T17:03:21.512Z info claude gateway listening on http://0.0.0.0:8080

185 ```

186 

187 부팅이 `claude gateway listening on` 라인 전에 종료되면, stderr의 마지막 라인이 문제를 이름 지정합니다:

188 

189 * 도달 불가능한 Postgres

190 * DDL 권한이 없는 Postgres 역할

191 * 도달 불가능하거나 유효하지 않은 OIDC 검색 문서

192 * 잘못된 필드 경로가 있는 구성 스키마 위반

193 

194 수정하고 다시 시작하세요.

195 

196 이미 TLS 종료 수신 대기가 있는 경우, Compose를 건너뛰고 `claude gateway --config gateway.yaml`로 바이너리를 직접 실행하세요. `public_url`을 수신 대기 원본으로 설정하고 `listen`을 루프백 또는 클러스터 내부 주소에 바인드하세요.

197 </Step>

198 

199 <Step title="인증 표면 확인">

200 세 가지 확인은 게이트웨이가 개발자에게 전달하기 전에 실제 사용자를 인증할 수 있음을 확인합니다.

201 

202 예제는 게이트웨이의 공개 URL을 사용합니다; 수신 대기가 없는 로컬 Compose 설정의 경우, 처음 두 확인에서 `http://localhost:8080`을 대체하세요. 세 번째 확인은 `verification_uri_complete`를 열며, 이는 `public_url`에서 빌드되므로, 로컬 Compose의 경우 `gateway.yaml`에서 `public_url: http://localhost:8080`을 설정하고, 게이트웨이가 IdP `redirect_uri`를 `public_url`에서 빌드하기 때문에 1단계의 OAuth 클라이언트에 두 번째 리다이렉트 URI로 `http://localhost:8080/oauth/callback`을 추가하세요. 확인 링크는 로컬 브라우저에서 열립니다.

203 

204 Windows PowerShell에서 `curl.exe`를 실행하세요; 일반 `curl`은 `Invoke-WebRequest`의 별칭이며 이 플래그를 거부합니다.

205 

206 먼저 검색 문서를 가져오세요. 이는 게이트웨이가 작동 중이고, 구성이 유효하며, 모든 부팅 확인이 통과했음을 확인합니다:

207 

208 ```bash theme={null}

209 curl -s https://claude-gateway.internal.example.com/.well-known/oauth-authorization-server | jq

210 ```

211 

212 ```json theme={null}

213 {

214 "issuer": "https://claude-gateway.internal.example.com",

215 "device_authorization_endpoint": "…/oauth/device_authorization",

216 "token_endpoint": "…/oauth/token",

217 "grant_types_supported": ["urn:ietf:params:oauth:grant-type:device_code", "refresh_token"]

218 }

219 ```

220 

221 응답은 `response_types_supported` 및 `scopes_supported`와 같은 추가 필드를 포함합니다.

222 

223 둘째, 장치 인증을 요청하세요. 이는 장치 로그인 흐름이 작동하고 Postgres가 도달 가능하고 쓰기 가능함을 확인합니다:

224 

225 ```bash theme={null}

226 curl -s -X POST https://claude-gateway.internal.example.com/oauth/device_authorization | jq

227 ```

228 

229 ```json theme={null}

230 {

231 "device_code": "…",

232 "user_code": "WDJB-MJHT",

233 "verification_uri": "https://claude-gateway.internal.example.com/device",

234 "verification_uri_complete": "https://claude-gateway.internal.example.com/device?user_code=WDJB-MJHT",

235 "expires_in": 600,

236 "interval": 5

237 }

238 ```

239 

240 셋째, 브라우저 다리를 테스트하세요. 브라우저에서 `verification_uri_complete`를 열고 코드를 확인하세요. IdP의 로그인 페이지로 리다이렉트되어야 하고, 로그인 후 게이트웨이로 돌아와 로그인 확인을 받아야 합니다.

241 

242 첫 번째 실패한 확인을 사용하여 문제를 찾으세요:

243 

244 * **첫 번째 확인 실패**: 부팅이 완료되지 않음; stderr 확인

245 * **두 번째 확인 실패**: Postgres가 게이트웨이에서 도달 불가능하거나 역할이 쓸 수 없음; 연결 문자열 및 권한 확인

246 * **세 번째 확인이 IdP에 도달하지 않음**: IdP의 리다이렉트 URI가 `https://<gateway>/oauth/callback`과 정확히 일치하는지 확인

247 * **세 번째 확인이 IdP에 도달하지만 오류로 반송됨**: 게이트웨이의 감사 로그를 읽으세요. 이는 `email domain not allowed`와 같은 이유로 모든 인증 거부를 기록합니다.

248 </Step>

249 

250 <Step title="개발자 로그인">

251 이 마지막 단계는 서버가 아닌 개발자 머신에서 발생합니다. 해당 머신의 [관리 설정 파일](/docs/ko/settings#settings-files)에서 `forceLoginMethod`를 `"gateway"`로 설정하고 `forceLoginGatewayUrl`을 게이트웨이의 `public_url`로 설정한 다음 `/login`을 실행하고, **Cloud gateway** 화면에서 Enter를 누르고, 브라우저 로그인을 완료하세요. 아래 [게이트웨이 URL 설정](#set-the-gateway-url)은 규모에 따라 두 키를 배포하는 것을 다룹니다.

252 </Step>

253</Steps>

254 

255<h2 id="connect-developers">

256 개발자 연결

257</h2>

258 

259개발자는 자신의 노트북에서 한 번의 브라우저 로그인으로 회사 업무 계정을 사용하여 연결합니다. 요청이 조직의 업스트림 자격증명을 사용하여 게이트웨이를 통해 모델로 가기 때문에 claude.ai 계정, API 키 또는 구독이 필요하지 않습니다. 연결은 MDM을 통해 푸시하는 [클라이언트 측 관리 설정](/docs/ko/claude-apps-gateway-config#client-side-managed-settings)에 의해 구동되므로, 개발자 측에는 수동 설정이 없습니다; 이 섹션은 관리자가 구성하는 것을 다룹니다.

260 

261CLI는 첫 연결 시 게이트웨이의 TLS 리프 인증서를 지문 처리하고 호스트명별로 고정합니다. 예상 SHA-256 지문을 게이트웨이 URL과 함께 게시하여 개발자가 비교할 것이 있도록 하세요. `openssl x509 -noout -fingerprint -sha256 -in cert.pem`으로 인증서 파일에서 지문을 가져오세요; `/login` 프롬프트는 다이제스트의 처음 16자를 구분 기호 없이 소문자 16진수로 표시합니다.

262 

263인증서가 회전하면 모든 개발자가 신뢰 프롬프트를 다시 보므로, 회전을 계획된 이벤트로 취급하고 지문을 다시 게시하세요.

264 

265로그인하면, [모델 선택기](/docs/ko/model-config)는 개발자의 `availableModels` 허용 목록의 모델을 표시하고, 관리 설정은 시작 시 적용되고 매시간 새로 고쳐지며, 텔레메트리는 수집기로 라우팅됩니다. 세션은 `ttl_hours` 만료 전에 자동으로 새로 고쳐지고, IdP 프로비저닝 해제 후 새로 고침 실패는 다시 로그인을 프롬프트합니다.

266 

267<h3 id="set-the-gateway-url">

268 게이트웨이 URL 설정

269</h3>

270 

271MDM을 통해 또는 디스크에 직접 배포하는 OS별 [관리 설정 파일](/docs/ko/settings#settings-files)에서 두 키를 모두 설정하면, `/login`은 URL이 채워진 **Cloud gateway** 화면에서 직접 열립니다:

272 

273```json theme={null}

274{

275 "forceLoginMethod": "gateway",

276 "forceLoginGatewayUrl": "https://claude-gateway.internal.example.com"

277}

278```

279 

280개발자는 Enter를 눌러 연결합니다. 첫 연결 TLS 지문 프롬프트는 여전히 나타납니다.

281 

282개발자가 수동으로 선택할 수 있는 로그인 선택기의 게이트웨이 옵션이 없으며, `forceLoginGatewayUrl`은 개발자의 자신의 설정 파일에서 무시됩니다. `forceLoginMethod`만, URL 없이, 개발자를 "IT 관리자에게 문의하세요" 메시지에 남깁니다. 두 키 모두 게이트웨이의 `managed.policies[].cli` 블록이 아닌 머신으로 푸시하는 파일에 속하며, 이는 이미 연결된 클라이언트에만 도달합니다.

283 

284<h3 id="ci-pipelines-and-remote-machines">

285 CI 파이프라인 및 원격 머신

286</h3>

287 

288무인 파이프라인을 위한 서비스 토큰 흐름이 없습니다. 게이트웨이 로그인은 항상 브라우저 장치 흐름을 실행하므로, 로그인을 승인할 개발자가 없는 CI 작업은 인증할 수 없습니다; 제공자에 대해 직접 구성하세요.

289 

290개발자가 로그인하면, 해당 머신의 모든 Claude Code 호출은 게이트웨이 세션을 사용하며, 비대화형 `claude -p` 실행 및 Agent SDK에서 시작된 세션을 포함하고, [게이트웨이 정책은 모두에 적용됩니다](/docs/ko/claude-apps-gateway-config#managed).

291 

292장치 흐름은 폴링 CLI를 승인하는 브라우저에서 분리하므로, 디스플레이가 없는 원격 개발 상자도 작동합니다: 개발자는 원격 머신에서 SSH를 통해 `/login`을 실행하고 노트북의 브라우저에서 확인 링크를 엽니다.

293 

294<h3 id="what’s-enforced-on-developers">

295 개발자에게 적용되는 것

296</h3>

297 

298이러한 보장은 모든 로그인한 게이트웨이 세션에 적용됩니다.

299 

300* **모델 액세스**: 정책이 부여하지 않는 모델에 대한 요청은 400을 반환하고, `/model` 선택기는 정책의 `availableModels` 허용 목록으로 필터링됩니다. 정책에서 [`enforceAvailableModels: true`](/docs/ko/model-config#default-model-behavior)를 설정하여 Default 옵션이 `availableModels` 내의 모델로 확인되도록 하세요. 없으면 Default는 선택 가능하게 유지되고 해당 모델이 부여되지 않으면 요청 시 거부됩니다.

301* **텔레메트리 대상**: [텔레메트리 전달](/docs/ko/claude-apps-gateway-config#telemetry)이 구성되면, OTLP 내보내기 엔드포인트는 게이트웨이에 고정되고, 게이트웨이 푸시 구성은 로컬로 설정된 `OTEL_*` 변수를 재정의합니다.

302* **자격증명**: 게이트웨이 토큰은 세션의 유일한 자격증명입니다. `ANTHROPIC_AUTH_TOKEN`, `ANTHROPIC_API_KEY`, `apiKeyHelper` 및 이전 claude.ai 로그인은 로그인 중에 무시되므로, 개발자는 먼저 claude.ai에서 로그아웃할 필요가 없습니다.

303* **관리 설정**: 잠긴 키는 로컬로 재정의될 수 없습니다. CLI는 시작 시 정책을 적용하고 각 시간별 폴에서 적용합니다.

304* **시작**: 로그인한 세션은 게이트웨이가 도달 불가능할 때 약 10초 후 시작 시 오류로 종료되며, 설정 없이 시작하는 대신입니다.

305* **프로비저닝 해제**: 사용자가 IdP에서 비활성화된 세션은 다음 새로 고침이 실패할 때 `ttl_hours` 내에 만료됩니다.

306 

307<h3 id="what-the-organization-can-see">

308 조직이 볼 수 있는 것

309</h3>

310 

311사용 현황 텔레메트리는 개발자의 신원, 토큰 수, 모델 및 지연 시간을 조직의 수집기로 전달합니다. 게이트웨이는 프롬프트 또는 완료 콘텐츠를 기록하거나 저장하지 않습니다. 명령 및 파일 경로를 포함할 수 있는 로그 및 추적과 같은 더 풍부한 텔레메트리를 수집할지 여부는 조직의 [대상별 선택](/docs/ko/claude-apps-gateway-config#telemetry)입니다.

312 

313<h2 id="availability-and-limitations">

314 가용성 및 제한사항

315</h2>

316 

317표는 개발자가 게이트웨이를 통해 연결할 때 작동하는 Claude Code 기능과 게이트웨이 서버 자체가 지원하는 것을 다룹니다. 지원되지 않는 경우, Notes 열은 대안을 제공합니다.

318 

319게이트웨이는 CLI가 모든 업스트림으로 보내는 [`anthropic-beta`](https://platform.claude.com/docs/ko/api/beta-headers) 값을 전달하므로, 운영자는 베타 허용 목록을 유지하지 않습니다. Amazon Bedrock의 경우 헤더를 무시하므로, 게이트웨이는 값을 요청 본문의 `anthropic_beta` 필드로 이동합니다; 다른 업스트림은 보낸 대로 헤더를 받습니다. CLI의 게이트웨이 세션 베타 집합은 자사 전용 베타 및 확장 캐시 TTL 베타를 생략하므로, 아래 해당 행은 사용 불가능으로 표시됩니다.

320 

321| 기능 | 상태 | 참고 |

322| ---------------------------------------------------------------------------------------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

323| 추론 전달 (Amazon Bedrock, Claude Platform on AWS, Google Cloud의 Agent Platform, Microsoft Foundry, Anthropic) | 사용 가능 | 업스트림별 모델 변환 및 장애 조치 포함. Amazon Bedrock 업스트림은 `bedrock-runtime` 엔드포인트 및 AWS 기본 자격증명 체인을 사용합니다; Amazon Bedrock [Mantle 엔드포인트](/docs/ko/amazon-bedrock#use-the-mantle-endpoint)는 지원되는 업스트림이 아닙니다. [Claude Platform on AWS 업스트림](/docs/ko/claude-apps-gateway-config#claude-platform-on-aws)은 게이트웨이 서버에서 Claude Code v2.1.198 이상이 필요합니다. |

324| IdP 그룹별 모델 액세스 및 관리 설정 | 사용 가능 | 모델 액세스는 서버 측에서 적용됩니다; 관리 설정은 IdP 그룹별로 전달되고 CLI에서 [관리 설정 계층](/docs/ko/settings#settings-precedence)에서 적용됩니다. |

325| 텔레메트리 팬아웃 (OTLP/HTTP) | 사용 가능 | 내보내기별 ID 스탬프; protobuf 및 JSON 인코딩 모두 |

326| OIDC 신원 제공자 | 사용 가능 | 모든 OIDC 호환 IdP; 게이트웨이는 표준 OIDC 검색 및 인증 코드 흐름을 실행합니다. [신원 제공자 설정](/docs/ko/claude-apps-gateway-deploy#identity-provider-setup)에서 IdP별 구성을 참조하세요. |

327| 사용자별 및 그룹별 지출 제한 | 사용 가능 | [지출 제한](/docs/ko/claude-apps-gateway-spend-limits) 참조 |

328| 서버 측 웹 검색 | 사용 불가능 | CLI는 게이트웨이가 라우팅하는 업스트림 제공자를 볼 수 없으므로 웹 검색 지원을 확인할 수 없고 게이트웨이 세션에서 WebSearch를 비활성화합니다. |

329| 표준 프롬프트 캐싱 | 사용 가능 | `cache_control` 중단점은 모든 업스트림으로 전달됩니다. |

330| 1시간 캐시 TTL | 사용 불가능 | CLI는 게이트웨이 세션에서 확장 캐시 TTL 베타를 생략합니다. 게이트웨이가 라우팅할 수 있는 모든 업스트림이 1시간 TTL을 지원하지 않기 때문에, 게이트웨이를 통한 프롬프트 캐싱은 5분 TTL을 사용합니다; 베타 헤더 참고 참조 |

331| Auto 모드 | 사용 가능 | [타사 제공자 규칙](/docs/ko/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry) 따름: 타사 제공자에서 적격인 모델만 사용 가능합니다. {/* min-version: 2.1.207 */}v2.1.207 이전에는 게이트웨이 세션의 auto 모드에서 `CLAUDE_CODE_ENABLE_AUTO_MODE=1` 설정이 필요했으며, 관리 정책 `env` 블록을 통해 전달 가능했습니다. |

332| 글로벌 캐시 범위 및 토큰 효율적인 도구와 같은 자사 전용 최적화 | 사용 불가능 | CLI는 게이트웨이 세션에서 이를 활성화하지 않습니다; 베타 헤더 참고 참조 |

333| OTLP/gRPC | 지원되지 않음 | HTTP를 통한 OTLP만 |

334| SAML, LDAP 및 기타 비 OIDC 인증 | 지원되지 않음 | OIDC만. 필요한 경우 OIDC 브리지로 프론트 |

335| 다중 테넌트 (여러 OIDC 발급자) | 지원되지 않음 | 게이트웨이당 하나의 발급자. 별도 인스턴스 실행 |

336| Windows 서버 | 지원되지 않음 | Linux에 배포. 로컬 개발만 macOS |

337| Helm 차트 | 사용 불가능 | 게이트웨이는 표준 상태 비저장 배포로 실행됩니다; [배포 가이드](/docs/ko/claude-apps-gateway-deploy#kubernetes) 참조 |

338| 관리 UI | 사용 불가능 | 구성은 YAML 파일입니다; 변경하려면 다시 배포하세요. |

339 

340<h2 id="next-steps">

341 다음 단계

342</h2>

343 

344빠른 시작은 Docker Compose에서 실행되는 최소 구성을 남깁니다. 더 나아가려면:

345 

346* 예를 들어 그룹별 RBAC, 다중 업스트림 장애 조치 또는 텔레메트리 대상을 추가하여 `gateway.yaml`을 최소 구성 이상으로 확장하세요. [구성 참조](/docs/ko/claude-apps-gateway-config)는 모든 옵션을 다룹니다.

347* Compose에서 Kubernetes 또는 Cloud Run의 프로덕션 배포로 이동하고, IdP를 올바르게 설정하고, 보안 모델을 검토하세요. [배포 및 운영 가이드](/docs/ko/claude-apps-gateway-deploy)는 IdP별 설정, 컨테이너 이미지 요구사항, 상태 프로브 및 문제 해결을 다룹니다.

348* 개별 개발자 또는 그룹에 지출 상한을 설정하여 폭주 워크로드가 전체 약정을 소비할 수 없도록 하세요. [지출 제한](/docs/ko/claude-apps-gateway-spend-limits)은 관리 API 및 적용 방식을 다룹니다.

349* Google Cloud의 완전한 작동 예제(Cloud Run, Cloud SQL 및 Secret Manager 포함)는 [Google Cloud에 배포](/docs/ko/claude-apps-gateway-on-gcp)를 참조하세요.

corporate-launcher.md +142 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 기업 런처 뒤에서 Claude Code 실행

6 

7> CLAUDE_CODE_PROCESS_WRAPPER를 사용하여 Claude Code가 자체 바이너리에서 시작하는 프로세스(백그라운드 서비스 및 모든 에이전트 뷰 세션 포함)를 필수 런처를 통해 라우팅합니다.

8 

9일부 조직에서는 워크스테이션의 모든 프로세스가 필수 런처를 통해 시작되도록 요구합니다. 런처는 회사의 보안 태세가 의존하는 샌드박스, 네트워크 제어 또는 자격 증명 주입을 적용하며, 이를 거치지 않고 시작되는 바이너리는 정책 위반입니다.

10 

11`CLAUDE_CODE_PROCESS_WRAPPER`는 Claude Code가 자체 바이너리에서 시작하는 모든 프로세스를 런처를 통해 실행합니다: 백그라운드 서비스, [에이전트 뷰](/docs/ko/agent-view)에서 호스팅하는 모든 세션, 그리고 업데이트 후 Claude Code의 재시작입니다. 런처의 절대 경로로 설정하면 Claude Code는 런처를 Claude Code 명령을 인수로 하여 실행합니다.

12 

13`PATH`에서 `claude` 명령을 래핑하는 런처는 이러한 프로세스에 도달할 수 없습니다. 왜냐하면 이들은 `PATH` 조회 없이 바이너리의 직접 경로에서 시작되기 때문입니다.

14 

15<Note>

16 `CLAUDE_CODE_PROCESS_WRAPPER`는 Claude Code v2.1.208 이상이 필요합니다. 이전 버전은 변수를 무시하고 모든 프로세스를 래핑 없이 시작합니다.

17</Note>

18 

19<h2 id="what-the-launcher-covers">

20 런처가 포함하는 것

21</h2>

22 

23`CLAUDE_CODE_PROCESS_WRAPPER`가 설정되면 Claude Code는 다음 각 프로세스를 런처를 통해 시작합니다:

24 

25* `claude agents`와 백그라운드 세션이 필요에 따라 시작하는 백그라운드 서비스입니다.

26* 모든 에이전트 뷰 행 내의 터미널 호스트 및 Claude Code 세션(서비스가 준비해 두는 웜 스탠바이 세션 포함).

27* 업데이트 또는 충돌 후 서비스가 다시 생성하는 세션입니다.

28* 업데이트 설치를 완료하기 위해 Claude Code가 자신을 재시작하는 것(에이전트 뷰의 업데이트를 위한 재시작 작업 포함).

29 

30Windows에서는 변수가 무시됩니다: 런처 계약은 `exec`에 따라 달라지는데, Windows는 이를 지원하지 않습니다. 변수가 설정된 Windows 머신은 모든 프로세스를 래핑 없이 실행하며 계속 작동하며, 유일한 신호는 [디버그 로그](/docs/ko/troubleshooting)의 경고입니다. 런처 정책이 Windows를 포함하는 경우, 변수는 거기서 이를 만족하지 않습니다: 롤아웃을 계획할 때 Windows 머신을 래핑되지 않은 것으로 계산합니다.

31 

32<h3 id="processes-that-start-outside-the-launcher">

33 런처 외부에서 시작되는 프로세스

34</h3>

35 

36세 가지 프로세스는 절대 런처를 통해 시작되지 않습니다:

37 

38* [설치된 백그라운드 서비스](/docs/ko/agent-view#the-supervisor-process): `launchd` 또는 `systemd`가 해당 프로세스를 단위 파일에서 시작합니다. `/status`와 `claude daemon status`는 이것이 적용될 때 경고하며, 서비스가 변수를 설정한 상태로 재시작되면 서비스가 생성하는 세션은 여전히 런처를 통해 시작됩니다.

39* 터미널에서 직접 시작하는 세션으로, 호출한 방식대로 실행됩니다. 이러한 세션을 포함하려면 `PATH`의 이전 디렉토리에 `claude`라는 스크립트를 배치하여 실제 바이너리로 런처를 실행합니다. 관리되는 심볼릭 링크를 교체하지 마십시오. 자체 생성은 `PATH`를 참조하지 않으므로 두 런처는 절대 스택되지 않습니다.

40* `claude-cli://` 딥 링크의 첫 번째 프로세스로, 운영 체제의 프로토콜 핸들러가 직접 시작합니다. 해당 세션이 백그라운드에서 시작하는 모든 것은 런처를 통해 실행됩니다. 이 경로를 완전히 닫으려면 `disableDeepLinkRegistration` 설정으로 [핸들러 등록을 방지](/docs/ko/deep-links#registration-and-supported-platforms)합니다.

41 

42<h3 id="helper-process-names-in-process-monitors">

43 프로세스 모니터의 헬퍼 프로세스 이름

44</h3>

45 

46런처가 구성되면 `ps`와 Activity Monitor는 런처의 `exec`가 인수 목록을 재구성하기 때문에 Claude Code의 `claude bg-pty-host` 및 `claude bg-spare` 레이블 대신 백그라운드 헬퍼 프로세스의 버전이 지정된 바이너리 이름을 표시합니다. 이름 변경은 은폐가 아닌 부작용입니다: 프로세스는 그 외에는 변경되지 않으며, Claude Code는 표시 이름이 아닌 바이너리 경로로 자신의 프로세스를 식별합니다.

47 

48<h2 id="set-up-the-launcher">

49 런처 설정

50</h2>

51 

52<Steps>

53 <Step title="런처 스크립트 작성">

54 `/opt/corp/launcher`와 같은 절대 경로에 실행 가능한 스크립트를 만듭니다. Claude Code는 전체 Claude Code 명령을 인수로 실행하며, 스크립트는 `exec "$@"`를 호출하여 자신을 Claude Code로 교체해야 합니다:

55 

56 ```bash theme={null}

57 #!/bin/sh

58 # Your organization's setup: enter the sandbox, apply

59 # network controls, or inject credentials.

60 exec "$@"

61 ```

62 

63 `chmod +x`로 실행 가능하게 만듭니다. 설정 부분은 Claude Code가 실행되기 전에 런처가 수행해야 하는 모든 것입니다. 아래의 [런처 계약](#the-launcher-contract)은 스크립트가 따라야 할 규칙을 나열합니다.

64 

65 <Note>

66 이전에 `~/.local/bin/claude` 심볼릭 링크를 런처로 교체한 경우, 같은 변경에서 원본 심볼릭 링크를 복원합니다. 교체된 심볼릭 링크는 첫 번째 래핑된 세션이 백그라운드 서비스를 두 런처를 통해 동시에 시작하게 하며, 설치를 외부에서 관리되는 상태로 만듭니다: `/doctor`가 이를 보고하고, 자동 업데이트는 파일을 제자리에 두며, 이전 버전의 정리는 설치 프로그램이 해당 경로를 다시 관리할 때까지 비활성화됩니다.

67 </Note>

68 </Step>

69 

70 <Step title="설정에서 CLAUDE_CODE_PROCESS_WRAPPER 설정">

71 백그라운드 서비스가 이를 상속하도록 설정 파일의 `env` 블록에서 변수를 설정합니다. 셸 `export`는 충분하지 않습니다: 백그라운드 서비스는 필요에 따라 시작되고, 셸보다 오래 지속되며, 셸 프로필을 다시 읽지 않습니다.

72 

73 한 대의 머신의 경우 `~/.claude/settings.json`에 추가합니다. 조직의 모든 머신에 배포하려면 [관리되는 설정](/docs/ko/permissions#managed-settings)에 같은 블록을 배치합니다:

74 

75 ```json theme={null}

76 {

77 "env": {

78 "CLAUDE_CODE_PROCESS_WRAPPER": "/opt/corp/launcher"

79 }

80 }

81 ```

82 

83 둘 이상의 소스가 변수를 설정하면 관리되는 설정 값이 `~/.claude/settings.json`과 셸에서 내보낸 값을 모두 재정의하므로 사용자는 자체 생성을 다른 런처로 지정할 수 없습니다.

84 

85 프로젝트 및 로컬 설정은 이 변수를 설정할 수 없습니다. 저장소에 커밋된 파일은 머신의 모든 Claude Code 프로세스 앞에 바이너리를 배치할 수 없으므로 `.claude/settings.json` 또는 `.claude/settings.local.json`의 `CLAUDE_CODE_PROCESS_WRAPPER`는 무시되며 [디버그 로그](/docs/ko/troubleshooting)에 경고가 표시됩니다.

86 </Step>

87 

88 <Step title="백그라운드 서비스 및 세션 재시작">

89 실행 중인 백그라운드 서비스와 열려 있는 `claude` 세션은 시작 시 변수를 한 번 읽으므로 재시작될 때까지 래핑되지 않은 프로세스를 계속 시작합니다. `claude daemon stop --any`를 실행하여 필요에 따라 서비스를 중지합니다. `claude agents`와 같이 이를 필요로 하는 다음 명령은 래핑된 서비스를 시작합니다. [설치된 서비스](/docs/ko/agent-view#the-supervisor-process)는 `--any` 없이 `claude daemon stop`을 사용합니다. 그런 다음 열려 있는 `claude` 세션을 재시작합니다.

90 

91 손으로 재시작할 수 없는 머신에서는 설정 푸시 후 시작된 첫 번째 세션이 남은 래핑되지 않은 필요에 따른 서비스를 자동으로 폐기합니다. 새 세션이 시작되지 않는 머신은 하나가 시작될 때까지 래핑되지 않은 서비스를 유지하며, 설치된 서비스는 항상 이 단계에서 재시작이 필요합니다.

92 </Step>

93 

94 <Step title="확인">

95 세션에서 `/status`를 실행합니다: Self-exec 항목은 해결된 시작 명령을 표시하고 실행 중인 백그라운드 서비스가 일치하지 않을 때 경고합니다. `claude daemon status`는 변수를 설정 해제할 때를 포함하여 셸에서 같은 정보를 인쇄하며, 이때 `/status`는 더 이상 항목을 표시하지 않습니다.

96 </Step>

97</Steps>

98 

99<h2 id="the-launcher-contract">

100 런처 계약

101</h2>

102 

103런처가 실행될 수 없으면 Claude Code는 래핑되지 않은 상태로 시작하는 대신 프로세스 시작을 거부합니다. Windows에서는 [변수가 무시되며](#what-the-launcher-covers) 프로세스가 래핑되지 않은 상태로 시작됩니다. Claude Code는 스크립트를 다음 규칙에 따릅니다:

104 

105* **`exec "$@"`로 끝냅니다.** 자식을 포크하고 종료하는 런처는 백그라운드 서비스가 추적할 수 없는 고아 Claude Code 프로세스를 남깁니다. 에이전트 뷰는 런처 이름을 지정하는 메시지와 함께 이러한 세션을 실패로 표시하며, 서비스는 런처가 남긴 것을 수거합니다.

106* **인수를 재정렬, 흡수 또는 앞에 추가하지 마십시오.** 첫 번째 인수는 Claude Code 바이너리이고 그 이후의 모든 것은 해당 argv입니다.

107* **상속된 모든 환경 변수를 `exec`를 통해 전달합니다.** 주입된 자격 증명과 같은 변수를 추가하는 것은 괜찮습니다. 상속된 변수를 삭제하는 것은 아닙니다.

108 * 세션별 인증 토큰, 모델 및 공급자 선택, 그리고 `CLAUDE_CODE_PROCESS_WRAPPER` 자체는 모두 상속된 환경에서 이동하므로 허용 목록에서 재구성하는 런처는 시작하는 세션을 중단하며, `/status`는 런처 불일치를 보고합니다.

109 * 런처가 환경을 재설정하는 네임스페이스 또는 샌드박스에 들어가야 하는 경우, 상속된 환경을 그 안에서 그대로 다시 내보냅니다.

110* **런처가 실행될 때마다 약 3초 이내에 `exec`에 도달합니다.** 콜드 백그라운드 디스패치는 첫 번째 출력 바이트 전에 런처를 두 번 연속으로 실행하므로 단일 사인온 교환과 같은 느린 작업을 게으르게 또는 캐시에서 수행합니다.

111 * 예산을 훨씬 초과하여 실행되는 런처는 정지된 시작으로 취급되고 재시작됩니다.

112* **자신 내부에서 호출되는 것을 허용합니다.** Claude Code는 모든 중첩된 자체 생성에 런처를 적용하므로 배타적 리소스를 획득하는 런처는 이미 보유하고 있음을 감지해야 합니다.

113* **Claude Code가 시작되기 전에 터미널에 쓰지 마십시오.** `exec` 전에 인쇄된 모든 것은 세션이 초기화 전에 종료되면 충돌 원인으로 보고됩니다.

114 

115<h3 id="format-of-the-claude_code_process_wrapper-value">

116 `CLAUDE_CODE_PROCESS_WRAPPER` 값의 형식

117</h3>

118 

119대부분의 런처의 경우 값은 `/opt/corp/launcher`와 같은 스크립트의 절대 경로입니다.

120 

121런처에 자신의 인수를 전달하려면 경로 뒤에 작성합니다. Claude Code는 값을 셸 명령이 아닌 인수 목록으로 구문 분석합니다:

122 

123* 공백은 토큰을 분리하고 큰따옴표는 공백을 포함하는 토큰을 그룹화합니다.

124* `[`로 시작하는 값은 `["/opt/corp/launcher", "--profile", "cc"]`와 같은 JSON 문자열 배열로 읽혀집니다.

125* 셸 구문은 작동하지 않습니다: 변수 확장이나 글로빙이 없으며, `;`, `|`, `&` 또는 `$(`와 같은 인용되지 않은 연산자는 재해석되지 않고 구성 오류로 거부됩니다.

126 

127값을 사용할 수 없으면 Claude Code는 영향을 받는 프로세스 시작을 거부하고 [이유를 보고합니다](/docs/ko/errors#claude_code_process_wrapper-launcher-errors).

128 

129<h2 id="relationship-to-claude_code_shell_prefix">

130 `CLAUDE_CODE_SHELL_PREFIX`와의 관계

131</h2>

132 

133`CLAUDE_CODE_PROCESS_WRAPPER`는 Claude Code의 자신의 프로세스를 래핑하고 명령을 런처가 `exec`할 별도의 argv 토큰으로 전달합니다. [`CLAUDE_CODE_SHELL_PREFIX`](/docs/ko/env-vars)는 Claude Code가 사용자를 대신하여 실행하는 셸 명령(예: Bash 도구 호출, 훅, stdio MCP 서버를 시작하는 명령)을 래핑하고 각각을 래퍼가 재평가할 `$1`의 단일 셸 인용 문자열로 전달합니다. 하나를 위해 작성된 런처는 다른 하나로 작동하지 않습니다.

134 

135<h2 id="related-resources">

136 관련 리소스

137</h2>

138 

139* [에이전트 뷰](/docs/ko/agent-view): 런처가 포함하는 백그라운드 세션 및 감독자 프로세스

140* [환경 변수](/docs/ko/env-vars): `CLAUDE_CODE_PROCESS_WRAPPER` 참조 항목

141* [관리되는 설정](/docs/ko/permissions#managed-settings): 전체 플릿에 `env` 블록 전달

142* [런처 오류 참조](/docs/ko/errors#claude_code_process_wrapper-launcher-errors): 거부 메시지 및 복구 방법

devcontainer.md +24 −24

Details

12 12 

13<Warning>13<Warning>

14 개발 컨테이너가 상당한 보호를 제공하지만, 모든 공격에 완전히 면역인 시스템은 없습니다.14 개발 컨테이너가 상당한 보호를 제공하지만, 모든 공격에 완전히 면역인 시스템은 없습니다.

15 `--dangerously-skip-permissions`으로 실행할 때, 개발 컨테이너는 [`~/.claude`](/ko/claude-directory)에 저장된 Claude Code 자격 증명을 포함하여 컨테이너 내에서 접근 가능한 모든 것을 악의적인 프로젝트가 유출하는 것을 방지하지 않습니다.15 `--dangerously-skip-permissions`으로 실행할 때, 개발 컨테이너는 [`~/.claude`](/docs/ko/claude-directory)에 저장된 Claude Code 자격 증명을 포함하여 컨테이너 내에서 접근 가능한 모든 것을 악의적인 프로젝트가 유출하는 것을 방지하지 않습니다.

16 신뢰할 수 있는 저장소로 개발할 때만 개발 컨테이너를 사용하고 Claude의 활동을 모니터링하세요.16 신뢰할 수 있는 저장소로 개발할 때만 개발 컨테이너를 사용하고 Claude의 활동을 모니터링하세요.

17 호스트 시크릿(예: `~/.ssh` 또는 클라우드 자격 증명 파일)을 컨테이너에 마운트하지 마세요. 대신 저장소 범위 또는 단기 토큰을 사용하세요.17 호스트 시크릿(예: `~/.ssh` 또는 클라우드 자격 증명 파일)을 컨테이너에 마운트하지 마세요. 대신 저장소 범위 또는 단기 토큰을 사용하세요.

18</Warning>18</Warning>


20<Accordion title="개발 컨테이너가 편집기와 어떻게 작동하는지">20<Accordion title="개발 컨테이너가 편집기와 어떻게 작동하는지">

21 <img src="https://mintcdn.com/claude-code/YvJyjZfd9yMihr0i/images/devcontainer-architecture.svg?fit=max&auto=format&n=YvJyjZfd9yMihr0i&q=85&s=9017b1d16a446c6cc37ba562f35b9aae" className="dark:hidden" alt="호스트의 편집기가 Docker 개발 컨테이너에 연결되는 것을 보여주는 다이어그램입니다. Claude Code, 터미널 및 빌드 도구는 컨테이너 내에서 실행됩니다. 호스트 저장소는 컨테이너에 바인드 마운트되어 작업 공간으로 사용됩니다." width="640" height="300" data-path="images/devcontainer-architecture.svg" />21 <img src="https://mintcdn.com/claude-code/YvJyjZfd9yMihr0i/images/devcontainer-architecture.svg?fit=max&auto=format&n=YvJyjZfd9yMihr0i&q=85&s=9017b1d16a446c6cc37ba562f35b9aae" className="dark:hidden" alt="호스트의 편집기가 Docker 개발 컨테이너에 연결되는 것을 보여주는 다이어그램입니다. Claude Code, 터미널 및 빌드 도구는 컨테이너 내에서 실행됩니다. 호스트 저장소는 컨테이너에 바인드 마운트되어 작업 공간으로 사용됩니다." width="640" height="300" data-path="images/devcontainer-architecture.svg" />

22 22 

23 <img src="https://mintcdn.com/claude-code/YvJyjZfd9yMihr0i/images/devcontainer-architecture-dark.svg?fit=max&auto=format&n=YvJyjZfd9yMihr0i&q=85&s=ef00c8e25b1ea7a3a152895f1488831b" className="hidden dark:block" alt="호스트의 편집기가 Docker 개발 컨테이너에 연결되는 것을 보여주는 다이어그램입니다. Claude Code, 터미널 및 빌드 도구는 컨테이너 내에서 실행됩니다. 호스트 저장소는 컨테이너에 바인드 마운트되어 작업 공간으로 사용됩니다." width="640" height="300" data-path="images/devcontainer-architecture-dark.svg" />23 <img src="https://mintcdn.com/claude-code/_xqph1dUOslCOwsj/images/devcontainer-architecture-dark.svg?fit=max&auto=format&n=_xqph1dUOslCOwsj&q=85&s=a0a340b1f2afc6a590696102c8acaaca" className="hidden dark:block" alt="호스트의 편집기가 Docker 개발 컨테이너에 연결되는 것을 보여주는 다이어그램입니다. Claude Code, 터미널 및 빌드 도구는 컨테이너 내에서 실행됩니다. 호스트 저장소는 컨테이너에 바인드 마운트되어 작업 공간으로 사용됩니다." width="640" height="300" data-path="images/devcontainer-architecture-dark.svg" />

24 24 

25 개발 컨테이너는 Docker 컨테이너로 실행되며, 머신 또는 GitHub Codespaces와 같은 클라우드 호스트에서 실행될 수 있습니다. Dev Containers 사양을 지원하는 편집기(예: VS Code, GitHub Codespaces, JetBrains IDE 또는 Cursor)가 해당 컨테이너에 연결됩니다. 편집기에서 파일을 평소대로 탐색하고 편집하지만, 통합 터미널, 언어 서버 및 빌드 도구는 모두 호스트가 아닌 컨테이너 내에서 실행됩니다. 일반 Vim과 같이 개발 컨테이너를 지원하지 않는 편집기는 이 워크플로우에 포함되지 않습니다.25 개발 컨테이너는 Docker 컨테이너로 실행되며, 머신 또는 GitHub Codespaces와 같은 클라우드 호스트에서 실행될 수 있습니다. Dev Containers 사양을 지원하는 편집기(예: VS Code, GitHub Codespaces, JetBrains IDE 또는 Cursor)가 해당 컨테이너에 연결됩니다. 편집기에서 파일을 평소대로 탐색하고 편집하지만, 통합 터미널, 언어 서버 및 빌드 도구는 모두 호스트가 아닌 컨테이너 내에서 실행됩니다. 일반 Vim과 같이 개발 컨테이너를 지원하지 않는 편집기는 이 워크플로우에 포함되지 않습니다.

26 26 

27 Claude Code는 컨테이너 내에서 실행되므로 프로젝트의 나머지 도구 체인과 동일한 파일, 종속성 및 도구를 봅니다. VS Code에서는 [Claude Code 확장 패널](/ko/vs-code)을 사용하거나 통합 터미널에서 `claude`를 실행할 수 있습니다. 둘 다 컨테이너 내에서 실행되며 동일한 `~/.claude` 구성을 공유합니다.27 Claude Code는 컨테이너 내에서 실행되므로 프로젝트의 나머지 도구 체인과 동일한 파일, 종속성 및 도구를 봅니다. VS Code에서는 [Claude Code 확장 패널](/docs/ko/vs-code)을 사용하거나 통합 터미널에서 `claude`를 실행할 수 있습니다. 둘 다 컨테이너 내에서 실행되며 동일한 `~/.claude` 구성을 공유합니다.

28</Accordion>28</Accordion>

29 29 

30<h2 id="add-claude-code-to-your-dev-container">30<h2 id="add-claude-code-to-your-dev-container">


75인증 프롬프트에서 보는 내용은 제공자에 따라 다릅니다:75인증 프롬프트에서 보는 내용은 제공자에 따라 다릅니다:

76 76 

77* **Anthropic**: Claude 또는 Anthropic Console 계정으로 브라우저를 통해 로그인77* **Anthropic**: Claude 또는 Anthropic Console 계정으로 브라우저를 통해 로그인

78* **[Amazon Bedrock, Google Cloud의 Agent Platform 또는 Microsoft Foundry](/ko/third-party-integrations)**: Claude Code는 클라우드 제공자 자격 증명을 사용하며 브라우저 프롬프트가 없습니다.78* **[Amazon Bedrock, Google Cloud의 Agent Platform 또는 Microsoft Foundry](/docs/ko/third-party-integrations)**: Claude Code는 클라우드 제공자 자격 증명을 사용하며 브라우저 프롬프트가 없습니다.

79 79 

80클라우드 제공자의 경우 호스트에서 자격 증명 파일을 마운트하는 대신 `containerEnv`, Codespaces 시크릿 또는 클라우드의 워크로드 ID를 통해 자격 증명을 컨테이너에 전달합니다. Claude Code가 읽는 자격 증명 체인은 [Amazon Bedrock](/ko/amazon-bedrock), [Google Cloud의 Agent Platform](/ko/google-vertex-ai) 또는 [Microsoft Foundry](/ko/microsoft-foundry)를 참조하세요.80클라우드 제공자의 경우 호스트에서 자격 증명 파일을 마운트하는 대신 `containerEnv`, Codespaces 시크릿 또는 클라우드의 워크로드 ID를 통해 자격 증명을 컨테이너에 전달합니다. Claude Code가 읽는 자격 증명 체인은 [Amazon Bedrock](/docs/ko/amazon-bedrock), [Google Cloud의 Agent Platform](/docs/ko/google-vertex-ai) 또는 [Microsoft Foundry](/docs/ko/microsoft-foundry)를 참조하세요.

81 81 

82조직에 맞는 경로를 결정하려면 [API 제공자 선택](/ko/admin-setup#choose-your-api-provider)을 참조하세요.82조직에 맞는 경로를 결정하려면 [API 제공자 선택](/docs/ko/admin-setup#choose-your-api-provider)을 참조하세요.

83 83 

84<Note>84<Note>

85 브라우저 로그인이 완료되었지만 콜백이 컨테이너에 도달하지 않으면 브라우저에 표시된 코드를 복사하여 터미널의 `Paste code here if prompted` 프롬프트에 붙여넣습니다. 이는 편집기의 포트 포워딩이 localhost 콜백을 라우팅하지 않을 때 발생할 수 있습니다.85 브라우저 로그인이 완료되었지만 콜백이 컨테이너에 도달하지 않으면 브라우저에 표시된 코드를 복사하여 터미널의 `Paste code here if prompted` 프롬프트에 붙여넣습니다. 이는 편집기의 포트 포워딩이 localhost 콜백을 라우팅하지 않을 때 발생할 수 있습니다.


89 재구축 시 인증 및 설정 유지89 재구축 시 인증 및 설정 유지

90</h2>90</h2>

91 91 

92기본적으로 컨테이너의 홈 디렉토리는 재구축 시 삭제되므로 엔지니어는 매번 다시 로그인해야 합니다. Claude Code는 인증 토큰, 사용자 설정 및 세션 기록을 [`~/.claude`](/ko/claude-directory) 아래에 저장합니다. 해당 경로에 명명된 볼륨을 마운트하여 재구축 시 이 상태를 유지합니다.92기본적으로 컨테이너의 홈 디렉토리는 재구축 시 삭제되므로 엔지니어는 매번 다시 로그인해야 합니다. Claude Code는 인증 토큰, 사용자 설정 및 세션 기록을 [`~/.claude`](/docs/ko/claude-directory) 아래에 저장합니다. 해당 경로에 명명된 볼륨을 마운트하여 재구축 시 이 상태를 유지합니다.

93 93 

94다음 예제는 `node` 사용자의 홈 디렉토리에 볼륨을 마운트합니다:94다음 예제는 `node` 사용자의 홈 디렉토리에 볼륨을 마운트합니다:

95 95 


99]99]

100```100```

101 101 

102`/home/node`를 컨테이너의 `remoteUser`의 홈 디렉토리로 바꿉니다. 볼륨을 `~/.claude` 이외의 위치에 마운트하는 경우 [`CLAUDE_CONFIG_DIR`](/ko/env-vars)을 마운트 경로로 설정하여 Claude Code가 해당 위치에서 읽고 쓰도록 합니다.102`/home/node`를 컨테이너의 `remoteUser`의 홈 디렉토리로 바꿉니다. 볼륨을 `~/.claude` 이외의 위치에 마운트하는 경우 [`CLAUDE_CONFIG_DIR`](/docs/ko/env-vars)을 마운트 경로로 설정하여 Claude Code가 해당 위치에서 읽고 쓰도록 합니다.

103 103 

104모든 저장소에서 하나의 볼륨을 공유하는 대신 프로젝트별로 상태를 격리하려면 소스 이름에 `${devcontainerId}` 변수를 포함합니다. [참조 구성](https://github.com/anthropics/claude-code/blob/main/.devcontainer/devcontainer.json)은 이 목적을 위해 `source=claude-code-config-${devcontainerId}`를 사용합니다.104모든 저장소에서 하나의 볼륨을 공유하는 대신 프로젝트별로 상태를 격리하려면 소스 이름에 `${devcontainerId}` 변수를 포함합니다. [참조 구성](https://github.com/anthropics/claude-code/blob/main/.devcontainer/devcontainer.json)은 이 목적을 위해 `source=claude-code-config-${devcontainerId}`를 사용합니다.

105 105 

106GitHub Codespaces에서 `~/.claude`는 codespace를 중지하고 시작할 때 유지되지만 컨테이너를 재구축할 때는 여전히 지워지므로 위의 볼륨 마운트가 여기에도 적용됩니다. codespace 간에 인증을 유지하려면 [`claude setup-token`](/ko/authentication#generate-a-long-lived-token)에서 `ANTHROPIC_API_KEY` 또는 `CLAUDE_CODE_OAUTH_TOKEN`을 [Codespaces 시크릿](https://docs.github.com/en/codespaces/managing-your-codespaces/managing-your-account-specific-secrets-for-github-codespaces)으로 저장합니다. Codespaces는 시크릿을 컨테이너 내에서 자동으로 환경 변수로 사용 가능하게 합니다.106GitHub Codespaces에서 `~/.claude`는 codespace를 중지하고 시작할 때 유지되지만 컨테이너를 재구축할 때는 여전히 지워지므로 위의 볼륨 마운트가 여기에도 적용됩니다. codespace 간에 인증을 유지하려면 [`claude setup-token`](/docs/ko/authentication#generate-a-long-lived-token)에서 `ANTHROPIC_API_KEY` 또는 `CLAUDE_CODE_OAUTH_TOKEN`을 [Codespaces 시크릿](https://docs.github.com/en/codespaces/managing-your-codespaces/managing-your-account-specific-secrets-for-github-codespaces)으로 저장합니다. Codespaces는 시크릿을 컨테이너 내에서 자동으로 환경 변수로 사용 가능하게 합니다.

107 107 

108<h2 id="enforce-organization-policy">108<h2 id="enforce-organization-policy">

109 조직 정책 적용109 조직 정책 적용


111 111 

112개발 컨테이너는 동일한 이미지와 구성이 모든 엔지니어의 머신에서 실행되므로 조직 정책을 적용하기에 편리한 장소입니다.112개발 컨테이너는 동일한 이미지와 구성이 모든 엔지니어의 머신에서 실행되므로 조직 정책을 적용하기에 편리한 장소입니다.

113 113 

114Claude Code는 Linux에서 `/etc/claude-code/managed-settings.json`을 읽고 [설정 계층](/ko/settings#how-scopes-interact)에서 가장 높은 우선순위로 적용하므로 해당 값은 엔지니어가 `~/.claude` 또는 프로젝트의 `.claude/` 디렉토리에서 설정한 모든 것을 재정의합니다. Dockerfile에서 파일을 제자리에 복사합니다:114Claude Code는 Linux에서 `/etc/claude-code/managed-settings.json`을 읽고 [설정 계층](/docs/ko/settings#how-scopes-interact)에서 가장 높은 우선순위로 적용하므로 해당 값은 엔지니어가 `~/.claude` 또는 프로젝트의 `.claude/` 디렉토리에서 설정한 모든 것을 재정의합니다. Dockerfile에서 파일을 제자리에 복사합니다:

115 115 

116```dockerfile Dockerfile theme={null}116```dockerfile Dockerfile theme={null}

117RUN mkdir -p /etc/claude-code117RUN mkdir -p /etc/claude-code

118COPY managed-settings.json /etc/claude-code/managed-settings.json118COPY managed-settings.json /etc/claude-code/managed-settings.json

119```119```

120 120 

121Dockerfile이 저장소에 있으므로 쓰기 액세스 권한이 있는 모든 사람이 이 단계를 변경하거나 제거할 수 있습니다. 엔지니어가 저장소 파일을 편집하여 우회할 수 없는 정책의 경우 [서버 관리 설정](/ko/server-managed-settings) 또는 MDM을 통해 관리 설정을 제공합니다. 사용 가능한 키 및 기타 전달 경로는 [관리 설정 파일](/ko/settings#settings-files)을 참조하세요.121Dockerfile이 저장소에 있으므로 쓰기 액세스 권한이 있는 모든 사람이 이 단계를 변경하거나 제거할 수 있습니다. 엔지니어가 저장소 파일을 편집하여 우회할 수 없는 정책의 경우 [서버 관리 설정](/docs/ko/server-managed-settings) 또는 MDM을 통해 관리 설정을 제공합니다. 사용 가능한 키 및 기타 전달 경로는 [관리 설정 파일](/docs/ko/settings#settings-files)을 참조하세요.

122 122 

123컨테이너의 모든 Claude Code 세션에 적용되는 [환경 변수](/ko/env-vars)를 설정하려면 `devcontainer.json`의 `containerEnv`에 추가합니다. 다음 예제는 원격 분석 및 오류 보고를 거부하고 Claude Code가 설치 후 자동으로 업데이트되는 것을 방지합니다:123컨테이너의 모든 Claude Code 세션에 적용되는 [환경 변수](/docs/ko/env-vars)를 설정하려면 `devcontainer.json`의 `containerEnv`에 추가합니다. 다음 예제는 원격 분석 및 오류 보고를 거부하고 Claude Code가 설치 후 자동으로 업데이트되는 것을 방지합니다:

124 124 

125```json devcontainer.json theme={null}125```json devcontainer.json theme={null}

126"containerEnv": {126"containerEnv": {


131 131 

132Dev Container Feature는 항상 최신 Claude Code 릴리스를 설치합니다. 재현 가능한 빌드를 위해 특정 Claude Code 버전을 고정하려면 기능을 사용하는 대신 Dockerfile에서 `npm install -g @anthropic-ai/claude-code@X.Y.Z`로 설치하고 위와 같이 `DISABLE_AUTOUPDATER`를 설정합니다.132Dev Container Feature는 항상 최신 Claude Code 릴리스를 설치합니다. 재현 가능한 빌드를 위해 특정 Claude Code 버전을 고정하려면 기능을 사용하는 대신 Dockerfile에서 `npm install -g @anthropic-ai/claude-code@X.Y.Z`로 설치하고 위와 같이 `DISABLE_AUTOUPDATER`를 설정합니다.

133 133 

134권한 규칙, 도구 제한 및 MCP 서버 허용 목록을 포함한 정책 제어의 전체 목록은 [조직을 위한 Claude Code 설정](/ko/admin-setup)을 참조하세요.134권한 규칙, 도구 제한 및 MCP 서버 허용 목록을 포함한 정책 제어의 전체 목록은 [조직을 위한 Claude Code 설정](/docs/ko/admin-setup)을 참조하세요.

135 135 

136[MCP 서버](/ko/mcp)를 컨테이너 내에서 사용 가능하게 하려면 저장소 루트의 `.mcp.json` 파일에서 [프로젝트 범위](/ko/mcp#mcp-installation-scopes)로 정의하여 개발 컨테이너 구성과 함께 체크인됩니다. 로컬 stdio 서버가 의존하는 모든 바이너리를 Dockerfile에 설치하고 원격 서버 도메인을 네트워크 허용 목록에 추가합니다.136[MCP 서버](/docs/ko/mcp)를 컨테이너 내에서 사용 가능하게 하려면 저장소 루트의 `.mcp.json` 파일에서 [프로젝트 범위](/docs/ko/mcp#mcp-installation-scopes)로 정의하여 개발 컨테이너 구성과 함께 체크인됩니다. 로컬 stdio 서버가 의존하는 모든 바이너리를 Dockerfile에 설치하고 원격 서버 도메인을 네트워크 허용 목록에 추가합니다.

137 137 

138<h2 id="restrict-network-egress">138<h2 id="restrict-network-egress">

139 네트워크 송신 제한139 네트워크 송신 제한

140</h2>140</h2>

141 141 

142컨테이너의 아웃바운드 트래픽을 Claude Code가 필요로 하는 도메인으로만 제한할 수 있습니다. 추론 및 인증 도메인은 [네트워크 액세스 요구 사항](/ko/network-config#network-access-requirements)을 참조하고, 선택적 원격 분석 및 오류 보고 연결 및 비활성화 방법은 [원격 분석 서비스](/ko/data-usage#telemetry-services)를 참조하세요.142컨테이너의 아웃바운드 트래픽을 Claude Code가 필요로 하는 도메인으로만 제한할 수 있습니다. 추론 및 인증 도메인은 [네트워크 액세스 요구 사항](/docs/ko/network-config#network-access-requirements)을 참조하고, 선택적 원격 분석 및 오류 보고 연결 및 비활성화 방법은 [원격 분석 서비스](/docs/ko/data-usage#telemetry-services)를 참조하세요.

143 143 

144참조 컨테이너에는 Claude Code 및 개발 도구가 필요로 하는 도메인을 제외한 모든 아웃바운드 트래픽을 차단하는 [`init-firewall.sh`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/init-firewall.sh) 스크립트가 포함되어 있습니다. 컨테이너 내에서 방화벽을 실행하려면 추가 권한이 필요하므로 참조는 `runArgs`를 통해 `NET_ADMIN` 및 `NET_RAW` 기능을 추가합니다. 방화벽 스크립트 및 이러한 기능은 Claude Code 자체에는 필요하지 않습니다. 이를 제외하고 대신 자신의 네트워크 제어에 의존할 수 있습니다.144참조 컨테이너에는 Claude Code 및 개발 도구가 필요로 하는 도메인을 제외한 모든 아웃바운드 트래픽을 차단하는 [`init-firewall.sh`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/init-firewall.sh) 스크립트가 포함되어 있습니다. 컨테이너 내에서 방화벽을 실행하려면 추가 권한이 필요하므로 참조는 `runArgs`를 통해 `NET_ADMIN` 및 `NET_RAW` 기능을 추가합니다. 방화벽 스크립트 및 이러한 기능은 Claude Code 자체에는 필요하지 않습니다. 이를 제외하고 대신 자신의 네트워크 제어에 의존할 수 있습니다.

145 145 


151 151 

152권한 프롬프트를 건너뛰면 도구 호출을 실행하기 전에 검토할 기회가 제거됩니다. Claude는 여전히 바인드 마운트된 작업 공간의 모든 파일을 수정할 수 있으며, 이는 호스트에 직접 나타나고 컨테이너의 네트워크 정책이 허용하는 모든 것에 도달할 수 있습니다. 이 플래그를 [위의 네트워크 송신 제한](#restrict-network-egress)과 쌍으로 사용하여 우회된 세션이 도달할 수 있는 것을 제한합니다.152권한 프롬프트를 건너뛰면 도구 호출을 실행하기 전에 검토할 기회가 제거됩니다. Claude는 여전히 바인드 마운트된 작업 공간의 모든 파일을 수정할 수 있으며, 이는 호스트에 직접 나타나고 컨테이너의 네트워크 정책이 허용하는 모든 것에 도달할 수 있습니다. 이 플래그를 [위의 네트워크 송신 제한](#restrict-network-egress)과 쌍으로 사용하여 우회된 세션이 도달할 수 있는 것을 제한합니다.

153 153 

154안전 검사를 비활성화하지 않고 더 적은 프롬프트를 원하면 대신 [자동 모드](/ko/permission-modes#eliminate-prompts-with-auto-mode)를 고려하세요. 이는 분류기가 실행 전에 작업을 검토합니다. 엔지니어가 `--dangerously-skip-permissions`을 전혀 사용하지 못하도록 하려면 [관리 설정](/ko/settings#permission-settings)에서 `permissions.disableBypassPermissionsMode`를 `"disable"`로 설정합니다.154안전 검사를 비활성화하지 않고 더 적은 프롬프트를 원하면 대신 [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)를 고려하세요. 이는 분류기가 실행 전에 작업을 검토합니다. 엔지니어가 `--dangerously-skip-permissions`을 전혀 사용하지 못하도록 하려면 [관리 설정](/docs/ko/settings#permission-settings)에서 `permissions.disableBypassPermissionsMode`를 `"disable"`로 설정합니다.

155 155 

156<h2 id="try-the-reference-container">156<h2 id="try-the-reference-container">

157 참조 컨테이너 시도157 참조 컨테이너 시도


193 193 

194Claude Code가 개발 컨테이너에서 실행되면 아래 페이지는 조직 롤아웃의 나머지 부분을 다룹니다. 인증 경로 선택, 저장소 외부에서 관리 정책 제공, 사용량 모니터링 및 Claude Code가 저장하고 전송하는 것 이해:194Claude Code가 개발 컨테이너에서 실행되면 아래 페이지는 조직 롤아웃의 나머지 부분을 다룹니다. 인증 경로 선택, 저장소 외부에서 관리 정책 제공, 사용량 모니터링 및 Claude Code가 저장하고 전송하는 것 이해:

195 195 

196* [조직을 위한 Claude Code 설정](/ko/admin-setup): 인증 제공자 선택, 정책이 장치에 도달하는 방법 결정 및 롤아웃 계획196* [조직을 위한 Claude Code 설정](/docs/ko/admin-setup): 인증 제공자 선택, 정책이 장치에 도달하는 방법 결정 및 롤아웃 계획

197* [서버 관리 설정](/ko/server-managed-settings): Claude.ai 관리 콘솔에서 관리 정책을 제공하여 엔지니어가 저장소 파일을 편집하여 우회할 수 없도록 합니다.197* [서버 관리 설정](/docs/ko/server-managed-settings): Claude.ai 관리 콘솔에서 관리 정책을 제공하여 엔지니어가 저장소 파일을 편집하여 우회할 수 없도록 합니다.

198* [사용량 모니터링 및 활동 감사](/ko/monitoring-usage): OpenTelemetry 메트릭을 내보내고 팀이 실행 중인 것을 검토합니다.198* [사용량 모니터링 및 활동 감사](/docs/ko/monitoring-usage): OpenTelemetry 메트릭을 내보내고 팀이 실행 중인 것을 검토합니다.

199* [네트워크 액세스 요구 사항](/ko/network-config#network-access-requirements): 프록시 및 방화벽을 위한 전체 도메인 허용 목록199* [네트워크 액세스 요구 사항](/docs/ko/network-config#network-access-requirements): 프록시 및 방화벽을 위한 전체 도메인 허용 목록

200* [원격 분석 서비스 및 거부](/ko/data-usage#telemetry-services): Claude Code가 기본적으로 전송하는 것 및 비활성화하는 환경 변수200* [원격 분석 서비스 및 거부](/docs/ko/data-usage#telemetry-services): Claude Code가 기본적으로 전송하는 것 및 비활성화하는 환경 변수

201* [`.claude` 디렉토리 탐색](/ko/claude-directory): 볼륨 마운트가 보유하는 것(자격 증명, 설정 및 세션 기록 포함)201* [`.claude` 디렉토리 탐색](/docs/ko/claude-directory): 볼륨 마운트가 보유하는 것(자격 증명, 설정 및 세션 기록 포함)

202* [보안 모델](/ko/security): Claude Code의 권한 시스템, 샌드박싱 및 프롬프트 주입 보호가 어떻게 맞는지202* [보안 모델](/docs/ko/security): Claude Code의 권한 시스템, 샌드박싱 및 프롬프트 주입 보호가 어떻게 맞는지

203* [권한 모드](/ko/permission-modes): 계획 모드에서 자동 모드에서 우회까지의 전체 범위 및 각각을 사용할 때203* [권한 모드](/docs/ko/permission-modes): 계획 모드에서 자동 모드에서 우회까지의 전체 범위 및 각각을 사용할 때

llm-gateway.md +64 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 다른 LLM gateway

6 

7> 조직이 이미 실행 중인 LLM gateway를 통해 Claude Code를 라우팅합니다. Claude Code를 gateway에 연결하고, 조직을 위해 gateway를 배포하고, Claude Code가 gateway에 전송하는 내용을 다룹니다.

8 

9이 섹션에서는 [Claude 앱 gateway](/docs/ko/claude-apps-gateway) 대신 조직이 이미 실행 중인 gateway 제품을 사용하는 것을 다룹니다. gateway가 무엇인지, Claude Code와 공급자 간에 어떻게 위치하는지, Claude 앱 gateway와 다른 제품 중에서 선택하는 방법에 대해서는 [gateway 개요](/docs/ko/gateways)를 참조하세요.

10 

11<Note>

12 * 기존 gateway에 연결하는 개발자인 경우: [Claude Code를 gateway에 연결](/docs/ko/llm-gateway-connect)

13 * 조직을 위해 gateway를 배포하는 관리자인 경우: [gateway를 배포 및 배포](/docs/ko/llm-gateway-rollout)

14 * gateway 제품을 구성하는 경우: [gateway 프로토콜 참조](/docs/ko/llm-gateway-protocol)

15</Note>

16 

17[지원되는 API 형식](/docs/ko/llm-gateway-protocol#api-formats)을 노출하는 모든 gateway가 작동합니다. Anthropic은 제3자 gateway 제품을 보증, 유지 관리 또는 감사하지 않으며, 모든 gateway를 통해 Claude Code를 비Claude 모델로 라우팅하는 것을 지원하지 않습니다. gateway를 자체 문서에 따라 배포한 다음 아래의 [배포 단계](#roll-out-a-gateway)로 Claude Code 측의 배포를 완료합니다.

18 

19<h2 id="what-a-gateway-provides">

20 gateway가 제공하는 것

21</h2>

22 

23gateway는 조직이 다음을 관리할 수 있는 한 곳을 제공합니다:

24 

25* **자격 증명**: 공급자 키는 서버 측에 유지되고, 개발자는 gateway 자격 증명을 대신 보유합니다

26* **사용량 추적**: 요청을 처리하는 공급자와 관계없이 개발자 또는 팀별로 사용량을 속성화합니다

27* **비용 제어**: 한 곳에서 예산 및 속도 제한을 적용합니다

28* **감사 로깅**: 규정 준수를 위해 모든 모델 요청을 기록합니다

29* **공급자 전환**: 개발자 머신을 건드리지 않고 gateway 구성에서 공급자를 변경합니다

30 

31이 중 공급자 전환을 제외한 모든 것은 업스트림이 Anthropic의 API이든 [클라우드 공급자](/docs/ko/third-party-integrations)이든 적용됩니다. 개발자 머신을 재구성하지 않고도 공급자 전환이 가능하려면 gateway가 업스트림과 관계없이 단일 [Anthropic 형식 엔드포인트](/docs/ko/llm-gateway-protocol#api-formats)를 노출해야 합니다. 공급자 자체 형식을 노출하는 gateway는 클라이언트 구성을 해당 공급자에 연결합니다.

32 

33트레이드오프는 gateway가 조직이 운영하는 인프라가 된다는 것입니다. Claude Code는 각 릴리스마다 기능을 추가하고, gateway가 이를 전달하지 않으면 해당 기능이 손상되므로, gateway 제품은 Claude Code가 진화함에 따라 최신 상태로 유지되어야 합니다. [gateway 프로토콜 참조](/docs/ko/llm-gateway-protocol)는 전달할 내용을 다룹니다.

34 

35<h2 id="roll-out-a-gateway">

36 gateway 배포

37</h2>

38 

39조직에 LLM gateway를 배포할 준비가 되면, 선택한 gateway 제품이 무엇이든 순서는 동일합니다:

40 

411. gateway를 배포하고 공급자 자격 증명을 제공하여 전달하는 요청을 인증할 수 있도록 합니다.

422. 각 개발자에게 gateway 자격 증명을 발급하여 사용량이 개발자에게 속성화되고 오프보딩이 하나의 자격 증명을 취소하도록 합니다.

433. [관리되는 설정 파일](/docs/ko/settings#settings-files) 및 비밀 도구를 통해 구성을 배포하여 모든 머신이 기본 URL과 자격 증명을 받도록 합니다. 둘 다 배포되면 개발자는 아무것도 구성하지 않습니다. 설정 배포가 없으면 개발자는 [연결 페이지](/docs/ko/llm-gateway-connect)를 따라 변수를 직접 설정합니다.

444. 각 개발자가 [Claude Code에서 구성을 확인](/docs/ko/llm-gateway-connect#check-for-an-existing-configuration)하도록 하여 배포 문제가 gateway에 의존하기 전에 표면화되도록 합니다.

45 

46[조직을 위해 LLM gateway 배포](/docs/ko/llm-gateway-rollout)는 각 단계를 안내하고 각 단계에서 배포할 구성 파일을 보여줍니다. gateway는 조직 설정의 한 부분입니다. 정책 적용, 사용량 가시성 및 데이터 처리 결정의 경우 [조직을 위해 Claude Code 설정](/docs/ko/admin-setup)을 참조하세요.

47 

48<h2 id="subscriptions-and-gateways">

49 구독 및 gateway

50</h2>

51 

52[gateway 자격 증명 변수](/docs/ko/llm-gateway-connect#set-the-credential-variable) 또는 `apiKeyHelper`가 활성화되어 있는 동안 개발자의 claude.ai 구독은 사용되지 않습니다: 자격 증명이 해당 세션에 대한 구독 로그인을 대체하고, 구독의 사용량 제한이 적용되지 않습니다. 해당 트래픽은 gateway가 전달하는 자격 증명의 소유자(예: 조직의 Anthropic Console 계정 또는 gateway가 그곳으로 라우팅할 때 Amazon Bedrock, Google Cloud의 Agent Platform 또는 Microsoft Foundry 계정)에게 토큰당 청구됩니다.

53 

54[`ANTHROPIC_BASE_URL`](/docs/ko/llm-gateway-connect#set-the-base-url-and-credential)은 Claude Code를 gateway로 가리키는 변수입니다. gateway 자격 증명 없이 해당 변수만 설정하면 구독을 대체하지 않습니다. 요청은 여전히 gateway를 통해 라우팅되지만 저장된 claude.ai 로그인이 활성 자격 증명으로 유지되므로 해당 사용량 제한 및 청구가 적용됩니다. 이 트래픽을 Anthropic에 전달하는 gateway는 `anthropic-beta`에서 OAuth 기능을 전달해야 합니다. [요청 헤더 참조](/docs/ko/llm-gateway-protocol#request-headers)를 참조하세요.

55 

56<h2 id="related-pages">

57 관련 페이지

58</h2>

59 

60* [Gateway 개요](/docs/ko/gateways): gateway가 작동하는 방식 및 Claude 앱 gateway와 다른 제품 중에서 선택하는 방법

61* [Claude 앱 gateway](/docs/ko/claude-apps-gateway): SSO 로그인 및 OTLP 원격 분석을 포함한 Anthropic의 자체 호스팅 gateway

62* [Claude Code를 LLM gateway에 연결](/docs/ko/llm-gateway-connect): 자신의 머신에서 기본 URL 및 자격 증명을 설정하고, 표면별 구성 및 문제 해결 테이블 포함

63* [조직을 위해 LLM gateway 배포](/docs/ko/llm-gateway-rollout): gateway 배포, 개발자 자격 증명 발급 및 관리되는 설정 배포를 위한 관리자 체크리스트

64* [Gateway 프로토콜 참조](/docs/ko/llm-gateway-protocol): Claude Code가 gateway에 전송하는 내용, gateway를 구성하는 운영자를 위해, 엔드포인트, 전달할 헤더 및 기능 통과를 다룸

prompt-caching.md +38 −38

Details

20 20 

21<img src="https://mintcdn.com/claude-code/VbDJw--l6T9a9Wvm/images/prompt-caching-prefix.svg?fit=max&auto=format&n=VbDJw--l6T9a9Wvm&q=85&s=f2e8f0b8298a50305fe428ca3f1d1594" className="dark:hidden" alt="네 개의 턴이 증가하는 수평 막대로 표시됩니다. 각 턴의 요청은 이전 턴의 모든 것과 끝에 추가된 최신 교환을 포함합니다. 턴 2와 3에서는 변경되지 않은 프리픽스가 캐시에서 읽혀지고 새로운 교환만 처리됩니다. 턴 4에서는 시스템 프롬프트가 변경되어 프리픽스가 더 이상 일치하지 않으므로 전체 요청이 다시 처리되고 기록됩니다." width="720" height="454" data-path="images/prompt-caching-prefix.svg" />21<img src="https://mintcdn.com/claude-code/VbDJw--l6T9a9Wvm/images/prompt-caching-prefix.svg?fit=max&auto=format&n=VbDJw--l6T9a9Wvm&q=85&s=f2e8f0b8298a50305fe428ca3f1d1594" className="dark:hidden" alt="네 개의 턴이 증가하는 수평 막대로 표시됩니다. 각 턴의 요청은 이전 턴의 모든 것과 끝에 추가된 최신 교환을 포함합니다. 턴 2와 3에서는 변경되지 않은 프리픽스가 캐시에서 읽혀지고 새로운 교환만 처리됩니다. 턴 4에서는 시스템 프롬프트가 변경되어 프리픽스가 더 이상 일치하지 않으므로 전체 요청이 다시 처리되고 기록됩니다." width="720" height="454" data-path="images/prompt-caching-prefix.svg" />

22 22 

23<img src="https://mintcdn.com/claude-code/VbDJw--l6T9a9Wvm/images/prompt-caching-prefix-dark.svg?fit=max&auto=format&n=VbDJw--l6T9a9Wvm&q=85&s=7434a04e08187edd26ec6c3dd332f624" className="hidden dark:block" alt="네 개의 턴이 증가하는 수평 막대로 표시됩니다. 각 턴의 요청은 이전 턴의 모든 것과 끝에 추가된 최신 교환을 포함합니다. 턴 2와 3에서는 변경되지 않은 프리픽스가 캐시에서 읽혀지고 새로운 교환만 처리됩니다. 턴 4에서는 시스템 프롬프트가 변경되어 프리픽스가 더 이상 일치하지 않으므로 전체 요청이 다시 처리되고 기록됩니다." width="720" height="454" data-path="images/prompt-caching-prefix-dark.svg" />23<img src="https://mintcdn.com/claude-code/_xqph1dUOslCOwsj/images/prompt-caching-prefix-dark.svg?fit=max&auto=format&n=_xqph1dUOslCOwsj&q=85&s=297dc1c639f0915cae858d0c4b6f3be5" className="hidden dark:block" alt="네 개의 턴이 증가하는 수평 막대로 표시됩니다. 각 턴의 요청은 이전 턴의 모든 것과 끝에 추가된 최신 교환을 포함합니다. 턴 2와 3에서는 변경되지 않은 프리픽스가 캐시에서 읽혀지고 새로운 교환만 처리됩니다. 턴 4에서는 시스템 프롬프트가 변경되어 프리픽스가 더 이상 일치하지 않으므로 전체 요청이 다시 처리되고 기록됩니다." width="720" height="454" data-path="images/prompt-caching-prefix-dark.svg" />

24 24 

25프리픽스 일치를 최대한 활용하기 위해 Claude Code는 각 요청을 정렬하여 턴 간에 거의 변경되지 않는 콘텐츠가 먼저 오도록 합니다:25프리픽스 일치를 최대한 활용하기 위해 Claude Code는 각 요청을 정렬하여 턴 간에 거의 변경되지 않는 콘텐츠가 먼저 오도록 합니다:

26 26 


32 32 

33대화 계층의 변경은 시스템 프롬프트와 프로젝트 컨텍스트를 캐시된 상태로 유지합니다. 시스템 프롬프트의 변경은 모든 것을 무효화합니다. 왜냐하면 모든 이후 콘텐츠가 이제 다른 프리픽스 뒤에 있기 때문입니다. 세 번째 열은 완전한 목록이 아닌 일반적인 트리거를 제공하며, 아래 섹션에서는 세션 시작 시 고정되는 출력 스타일과 같은 콘텐츠를 포함한 전체 집합을 다룹니다.33대화 계층의 변경은 시스템 프롬프트와 프로젝트 컨텍스트를 캐시된 상태로 유지합니다. 시스템 프롬프트의 변경은 모든 것을 무효화합니다. 왜냐하면 모든 이후 콘텐츠가 이제 다른 프리픽스 뒤에 있기 때문입니다. 세 번째 열은 완전한 목록이 아닌 일반적인 트리거를 제공하며, 아래 섹션에서는 세션 시작 시 고정되는 출력 스타일과 같은 콘텐츠를 포함한 전체 집합을 다룹니다.

34 34 

35프리픽스 일치 규칙은 이 페이지의 대부분의 동작을 설명합니다. 예를 들어 [Plan Mode](/ko/permission-modes#analyze-before-you-edit-with-plan-mode)와 [스킬 로딩](/ko/skills)은 대화 메시지로 지침을 추가하므로 캐시된 프리픽스는 그대로 유지됩니다.35프리픽스 일치 규칙은 이 페이지의 대부분의 동작을 설명합니다. 예를 들어 [Plan Mode](/docs/ko/permission-modes#analyze-before-you-edit-with-plan-mode)와 [스킬 로딩](/docs/ko/skills)은 대화 메시지로 지침을 추가하므로 캐시된 프리픽스는 그대로 유지됩니다.

36 36 

37두 가지 설정은 프롬프트 텍스트의 일부가 아니므로 계층 표에 나타나지 않습니다. 하지만 둘 다 캐시 키의 일부입니다:37두 가지 설정은 프롬프트 텍스트의 일부가 아니므로 계층 표에 나타나지 않습니다. 하지만 둘 다 캐시 키의 일부입니다:

38 38 


49 49 

50캐싱은 서버 측에서 발생하며, 모델을 제공하는 인프라에서 발생합니다. 그 위치는 인증 방식에 따라 다릅니다:50캐싱은 서버 측에서 발생하며, 모델을 제공하는 인프라에서 발생합니다. 그 위치는 인증 방식에 따라 다릅니다:

51 51 

52* **API 키, Claude 구독 또는 [Claude Platform on AWS](/ko/claude-platform-on-aws)**: 캐시는 Anthropic의 인프라에 있으며 [Claude API](https://platform.claude.com/docs)를 통해 액세스됩니다.52* **API 키, Claude 구독 또는 [Claude Platform on AWS](/docs/ko/claude-platform-on-aws)**: 캐시는 Anthropic의 인프라에 있으며 [Claude API](https://platform.claude.com/docs)를 통해 액세스됩니다.

53* **Amazon Bedrock 또는 Google Cloud의 Agent Platform**: 캐시는 클라우드 제공자의 제공 인프라에 있습니다.53* **Amazon Bedrock 또는 Google Cloud의 Agent Platform**: 캐시는 클라우드 제공자의 제공 인프라에 있습니다.

54* **Microsoft Foundry**: 요청은 Anthropic의 인프라로 라우팅됩니다.54* **Microsoft Foundry**: 요청은 Anthropic의 인프라로 라우팅됩니다.

55* **사용자 정의 `ANTHROPIC_BASE_URL` 또는 [LLM gateway](/ko/llm-gateway)**: 캐시는 요청이 전달되는 위치에 있으며, 캐싱이 작동하는지 여부는 게이트웨이에 따라 다릅니다.55* **사용자 정의 `ANTHROPIC_BASE_URL` 또는 [LLM gateway](/docs/ko/llm-gateway)**: 캐시는 요청이 전달되는 위치에 있으며, 캐싱이 작동하는지 여부는 게이트웨이에 따라 다릅니다.

56 56 

57각 제공자가 저장하고 처리하는 내용은 [데이터 사용](/ko/data-usage)을 참조하세요. 캐시가 어디에 있든 항목은 비활성 기간 후에 만료되며, 아래의 [캐시 수명](#cache-lifetime)에서 TTL과 연장 방법을 다룹니다.57각 제공자가 저장하고 처리하는 내용은 [데이터 사용](/docs/ko/data-usage)을 참조하세요. 캐시가 어디에 있든 항목은 비활성 기간 후에 만료되며, 아래의 [캐시 수명](#cache-lifetime)에서 TTL과 연장 방법을 다룹니다.

58 58 

59<h2 id="actions-that-invalidate-the-cache">59<h2 id="actions-that-invalidate-the-cache">

60 캐시를 무효화하는 작업60 캐시를 무효화하는 작업


75 모델 전환75 모델 전환

76</h3>76</h3>

77 77 

78각 모델은 자체 캐시를 가집니다. [`/model`](/ko/model-config#setting-your-model)로 전환하면 콘텐츠가 동일한 경우에도 다음 요청이 캐시 히트 없이 전체 대화 기록을 읽습니다.78각 모델은 자체 캐시를 가집니다. [`/model`](/docs/ko/model-config#setting-your-model)로 전환하면 콘텐츠가 동일한 경우에도 다음 요청이 캐시 히트 없이 전체 대화 기록을 읽습니다.

79 79 

80[`opusplan` 모델 설정](/ko/model-config#opusplan-model-setting)은 Plan 모드 중에 Opus로, 실행 중에 Sonnet으로 확인되므로 각 Plan 모드 토글은 모델 전환이고 새로운 캐시를 시작합니다.80[`opusplan` 모델 설정](/docs/ko/model-config#opusplan-model-setting)은 Plan 모드 중에 Opus로, 실행 중에 Sonnet으로 확인되므로 각 Plan 모드 토글은 모델 전환이고 새로운 캐시를 시작합니다.

81 81 

82[Fable 5의 자동 모델 폴백](/ko/model-config#automatic-model-fallback)도 모델 전환입니다. 안전 분류기가 요청에 플래그를 지정하면 Claude Code는 기본 Opus 모델에서 다시 실행하고 세션이 계속됩니다.82[Fable 5의 자동 모델 폴백](/docs/ko/model-config#automatic-model-fallback)도 모델 전환입니다. 안전 분류기가 요청에 플래그를 지정하면 Claude Code는 기본 Opus 모델에서 다시 실행하고 세션이 계속됩니다.

83 83 

84<h3 id="changing-effort-level">84<h3 id="changing-effort-level">

85 노력 수준 변경85 노력 수준 변경

86</h3>86</h3>

87 87 

88캐시는 [노력 수준](/ko/model-config#adjust-effort-level)뿐만 아니라 모델로도 키가 지정되므로 `/effort`로 전환하면 다음 요청이 캐시 히트 없이 전체 대화 기록을 읽습니다. 대화가 시작되면 Claude Code는 캐시를 무효화할 노력 변경을 적용하기 전에 확인 대화를 표시합니다. 모델의 기본값을 명시적으로 설정하는 것과 같이 이미 적용 중인 동일한 수준으로 확인되는 변경은 대화를 건너뛰고 캐시를 유지합니다.88캐시는 [노력 수준](/docs/ko/model-config#adjust-effort-level)뿐만 아니라 모델로도 키가 지정되므로 `/effort`로 전환하면 다음 요청이 캐시 히트 없이 전체 대화 기록을 읽습니다. 대화가 시작되면 Claude Code는 캐시를 무효화할 노력 변경을 적용하기 전에 확인 대화를 표시합니다. 모델의 기본값을 명시적으로 설정하는 것과 같이 이미 적용 중인 동일한 수준으로 확인되는 변경은 대화를 건너뛰고 캐시를 유지합니다.

89 89 

90<h3 id="turning-on-fast-mode">90<h3 id="turning-on-fast-mode">

91 빠른 모드 켜기91 빠른 모드 켜기

92</h3>92</h3>

93 93 

94[빠른 모드](/ko/fast-mode)를 활성화하면 캐시 키의 일부인 요청 헤더가 추가되므로 다음 요청이 캐시 히트 없이 전체 대화 기록을 읽습니다. 캐시되지 않은 입력 토큰은 [빠른 모드 요금](/ko/fast-mode#understand-the-cost-tradeoff)으로 청구되므로 세션 시작 시 켜는 것이 긴 세션 깊숙이 켜는 것보다 비용이 적게 듭니다. 비 Opus 모델에서 빠른 모드를 활성화하면 [모델도 전환](#switching-models)되므로 자체적으로 새로운 캐시를 시작합니다.94[빠른 모드](/docs/ko/fast-mode)를 활성화하면 캐시 키의 일부인 요청 헤더가 추가되므로 다음 요청이 캐시 히트 없이 전체 대화 기록을 읽습니다. 캐시되지 않은 입력 토큰은 [빠른 모드 요금](/docs/ko/fast-mode#understand-the-cost-tradeoff)으로 청구되므로 세션 시작 시 켜는 것이 긴 세션 깊숙이 켜는 것보다 비용이 적게 듭니다. 비 Opus 모델에서 빠른 모드를 활성화하면 [모델도 전환](#switching-models)되므로 자체적으로 새로운 캐시를 시작합니다.

95 95 

96비용은 대화당 한 번 적용됩니다. 첫 번째 빠른 모드 턴 후 Claude Code는 계속 헤더를 보내고 캐시 키의 일부가 아닌 요청의 속도 설정만 변경합니다. 빠른 모드를 끄기, [속도 제한 후 표준 속도로 자동 폴백](/ko/fast-mode#handle-rate-limits), 나중에 다시 켜기는 모두 캐시를 유지합니다. `/clear`와 `/compact`는 어차피 그 지점에서 캐시를 다시 구축하므로 이를 재설정합니다.96비용은 대화당 한 번 적용됩니다. 첫 번째 빠른 모드 턴 후 Claude Code는 계속 헤더를 보내고 캐시 키의 일부가 아닌 요청의 속도 설정만 변경합니다. 빠른 모드를 끄기, [속도 제한 후 표준 속도로 자동 폴백](/docs/ko/fast-mode#handle-rate-limits), 나중에 다시 켜기는 모두 캐시를 유지합니다. `/clear`와 `/compact`는 어차피 그 지점에서 캐시를 다시 구축하므로 이를 재설정합니다.

97 97 

98<h3 id="connecting-or-disconnecting-an-mcp-server">98<h3 id="connecting-or-disconnecting-an-mcp-server">

99 MCP 서버 연결 또는 연결 해제99 MCP 서버 연결 또는 연결 해제

100</h3>100</h3>

101 101 

102도구 정의는 시스템 프롬프트 계층에 있으므로 요청 간에 도구 정의 집합이 변경되면 캐시가 무효화됩니다. [advisor 도구](/ko/advisor)를 토글하는 것은 예외입니다: 해당 정의는 캐시 중단점 이후에 있으므로 `/advisor`를 활성화 또는 비활성화하면 캐시된 프리픽스가 그대로 유지됩니다. [MCP 서버](/ko/mcp) 변경이 이를 수행하는지 여부는 해당 도구가 [도구 검색](/ko/mcp#scale-with-mcp-tool-search)으로 연기되는지 또는 프리픽스에 로드되는지에 따라 달라집니다:102도구 정의는 시스템 프롬프트 계층에 있으므로 요청 간에 도구 정의 집합이 변경되면 캐시가 무효화됩니다. [advisor 도구](/docs/ko/advisor)를 토글하는 것은 예외입니다: 해당 정의는 캐시 중단점 이후에 있으므로 `/advisor`를 활성화 또는 비활성화하면 캐시된 프리픽스가 그대로 유지됩니다. [MCP 서버](/docs/ko/mcp) 변경이 이를 수행하는지 여부는 해당 도구가 [도구 검색](/docs/ko/mcp#scale-with-mcp-tool-search)으로 연기되는지 또는 프리픽스에 로드되는지에 따라 달라집니다:

103 103 

104* **연기된 도구**, 지원되는 모델의 기본값: 서버 연결, 연결 해제 또는 도구 목록 변경은 새로운 콘텐츠만 추가하고 이미 캐시된 항목을 방해하지 않습니다.104* **연기된 도구**, 지원되는 모델의 기본값: 서버 연결, 연결 해제 또는 도구 목록 변경은 새로운 콘텐츠만 추가하고 이미 캐시된 항목을 방해하지 않습니다.

105* **프리픽스에 로드된 도구**: 이에 대한 모든 변경은 캐시를 무효화합니다. 이는 [도구 검색을 사용할 수 없거나 비활성화](/ko/mcp#configure-tool-search)된 경우(예: Google Cloud의 Agent Platform 또는 사용자 정의 `ANTHROPIC_BASE_URL` 게이트웨이)에 발생합니다. 또한 [`alwaysLoad`](/ko/mcp#exempt-a-server-from-deferral)로 표시된 서버 또는 도구, 그리고 [임계값 기반 로딩](/ko/mcp#configure-tool-search)으로 유지되는 정의에 대해서도 발생합니다.105* **프리픽스에 로드된 도구**: 이에 대한 모든 변경은 캐시를 무효화합니다. 이는 [도구 검색을 사용할 수 없거나 비활성화](/docs/ko/mcp#configure-tool-search)된 경우(예: Google Cloud의 Agent Platform 또는 사용자 정의 `ANTHROPIC_BASE_URL` 게이트웨이)에 발생합니다. 또한 [`alwaysLoad`](/docs/ko/mcp#exempt-a-server-from-deferral)로 표시된 서버 또는 도구, 그리고 [임계값 기반 로딩](/docs/ko/mcp#configure-tool-search)으로 유지되는 정의에 대해서도 발생합니다.

106 106 

107도구가 프리픽스에 로드될 때 무효화의 가장 일반적인 원인은 세션 중에 서버가 연결 또는 연결 해제되는 것입니다. 이는 사용자의 조치 없이 발생할 수 있습니다: stdio 서버의 프로세스가 종료되거나, HTTP 세션이 만료되거나, 서버가 [일시적 오류 후 자동으로 재연결](/ko/mcp#automatic-reconnection)됩니다. 연결된 서버는 도구 목록을 변경하는 [동적 도구 업데이트](/ko/mcp#dynamic-tool-updates)를 푸시할 수도 있습니다.107도구가 프리픽스에 로드될 때 무효화의 가장 일반적인 원인은 세션 중에 서버가 연결 또는 연결 해제되는 것입니다. 이는 사용자의 조치 없이 발생할 수 있습니다: stdio 서버의 프로세스가 종료되거나, HTTP 세션이 만료되거나, 서버가 [일시적 오류 후 자동으로 재연결](/docs/ko/mcp#automatic-reconnection)됩니다. 연결된 서버는 도구 목록을 변경하는 [동적 도구 업데이트](/docs/ko/mcp#dynamic-tool-updates)를 푸시할 수도 있습니다.

108 108 

109MCP 구성을 편집해도 캐시가 자동으로 변경되지 않습니다. 새로운 구성은 재시작 후에만 적용되며, 이때 서버가 연결 또는 연결 해제됩니다.109MCP 구성을 편집해도 캐시가 자동으로 변경되지 않습니다. 새로운 구성은 재시작 후에만 적용되며, 이때 서버가 연결 또는 연결 해제됩니다.

110 110 


112 플러그인 활성화 또는 비활성화112 플러그인 활성화 또는 비활성화

113</h3>113</h3>

114 114 

115[플러그인](/ko/plugins)은 여러 구성 요소 유형을 번들로 제공하며, 변경 비용은 플러그인이 제공하는 구성 요소에 따라 달라집니다. Skills, commands, agents, hooks, LSP 서버, monitors, themes는 캐시를 무효화하지 않습니다: 이들이 요청에 추가하는 모든 것은 기존 대화 후에 추가되므로 다음 요청은 새로운 콘텐츠에 대해 비용을 지불하지만 여전히 그 이전의 모든 것을 캐시에서 읽습니다.115[플러그인](/docs/ko/plugins)은 여러 구성 요소 유형을 번들로 제공하며, 변경 비용은 플러그인이 제공하는 구성 요소에 따라 달라집니다. Skills, commands, agents, hooks, LSP 서버, monitors, themes는 캐시를 무효화하지 않습니다: 이들이 요청에 추가하는 모든 것은 기존 대화 후에 추가되므로 다음 요청은 새로운 콘텐츠에 대해 비용을 지불하지만 여전히 그 이전의 모든 것을 캐시에서 읽습니다.

116 116 

117예외는 [MCP 서버](/ko/plugins-reference#mcp-servers)를 제공하는 플러그인입니다. 하나를 활성화 또는 비활성화하면 [MCP 서버 연결 또는 연결 해제](#connecting-or-disconnecting-an-mcp-server)와 동일한 규칙을 따릅니다: 서버의 도구가 연기될 때 캐시가 유지되고, 프리픽스에 로드될 때 다음 요청이 전체 대화를 다시 읽습니다.117예외는 [MCP 서버](/docs/ko/plugins-reference#mcp-servers)를 제공하는 플러그인입니다. 하나를 활성화 또는 비활성화하면 [MCP 서버 연결 또는 연결 해제](#connecting-or-disconnecting-an-mcp-server)와 동일한 규칙을 따릅니다: 서버의 도구가 연기될 때 캐시가 유지되고, 프리픽스에 로드될 때 다음 요청이 전체 대화를 다시 읽습니다.

118 118 

119플러그인 변경은 [`/reload-plugins`](/ko/discover-plugins#apply-plugin-changes-without-restarting)를 실행하거나 새 세션을 시작할 때 적용됩니다. 비용(추가된 공지 사항이든 전체 다시 읽기든)은 다시 로드 후 첫 턴에 표시되며, `/plugin install`, `/plugin enable` 또는 `/plugin disable`을 실행할 때가 아닙니다. {/* min-version: 2.1.163 */}v2.1.163부터 다시 로드가 전체 다시 읽기를 트리거할 때 `/reload-plugins`는 경고를 표시하고 다시 로드를 적용하지 않습니다. `--force`를 전달하여 어차피 적용합니다.119플러그인 변경은 [`/reload-plugins`](/docs/ko/discover-plugins#apply-plugin-changes-without-restarting)를 실행하거나 새 세션을 시작할 때 적용됩니다. 비용(추가된 공지 사항이든 전체 다시 읽기든)은 다시 로드 후 첫 턴에 표시되며, `/plugin install`, `/plugin enable` 또는 `/plugin disable`을 실행할 때가 아닙니다. {/* min-version: 2.1.163 */}v2.1.163부터 다시 로드가 전체 다시 읽기를 트리거할 때 `/reload-plugins`는 경고를 표시하고 다시 로드를 적용하지 않습니다. `--force`를 전달하여 어차피 적용합니다.

120 120 

121세션 초반에 활성화한 플러그인을 비활성화하면 이전 요청 형태가 복원됩니다. 해당 프리픽스가 여전히 [캐시 수명](#cache-lifetime) 내에 있으면 다음 요청이 다시 구축하는 대신 이전 캐시 항목을 읽습니다.121세션 초반에 활성화한 플러그인을 비활성화하면 이전 요청 형태가 복원됩니다. 해당 프리픽스가 여전히 [캐시 수명](#cache-lifetime) 내에 있으면 다음 요청이 다시 구축하는 대신 이전 캐시 항목을 읽습니다.

122 122 


124 전체 도구 거부124 전체 도구 거부

125</h3>125</h3>

126 126 

127`Bash` 또는 `WebFetch`와 같은 단순 도구 이름을 [거부 규칙](/ko/permissions#manage-permissions)으로 추가하면 해당 도구가 Claude의 컨텍스트에서 완전히 제거됩니다. 기본 제공 도구 정의는 시스템 프롬프트 계층에 로드되므로 이러한 규칙을 추가하거나 제거하면 세션 중에 캐시가 무효화됩니다. 변경 사항은 `/permissions`를 통해 추가하든 [설정 파일을 직접 편집](/ko/settings#when-edits-take-effect)하든 다음 턴에 적용됩니다.127`Bash` 또는 `WebFetch`와 같은 단순 도구 이름을 [거부 규칙](/docs/ko/permissions#manage-permissions)으로 추가하면 해당 도구가 Claude의 컨텍스트에서 완전히 제거됩니다. 기본 제공 도구 정의는 시스템 프롬프트 계층에 로드되므로 이러한 규칙을 추가하거나 제거하면 세션 중에 캐시가 무효화됩니다. 변경 사항은 `/permissions`를 통해 추가하든 [설정 파일을 직접 편집](/docs/ko/settings#when-edits-take-effect)하든 다음 턴에 적용됩니다.

128 128 

129단순 도구 이름, 동등한 `Bash(*)` 형식, 또는 `"*"`와 같은 [도구 이름 글로브](/ko/permissions#tool-name-wildcards)만 이 효과를 가집니다. `"mcp__*"`와 같이 MCP 도구만 일치하는 글로브는 해당 도구를 동일한 방식으로 제거하지만 일치하는 도구가 [연기](#connecting-or-disconnecting-an-mcp-server)될 때 캐시를 그대로 유지합니다. 기본값이므로 연기된 정의는 캐시된 프리픽스에 없었습니다. `Bash(rm *)`와 같은 범위가 지정된 거부 규칙과 모든 허용 및 요청 규칙은 Claude가 보는 도구를 변경하지 않습니다. Claude Code는 Claude가 호출을 시도할 때 이를 확인하여 프리픽스를 그대로 유지합니다.129단순 도구 이름, 동등한 `Bash(*)` 형식, 또는 `"*"`와 같은 [도구 이름 글로브](/docs/ko/permissions#tool-name-wildcards)만 이 효과를 가집니다. `"mcp__*"`와 같이 MCP 도구만 일치하는 글로브는 해당 도구를 동일한 방식으로 제거하지만 일치하는 도구가 [연기](#connecting-or-disconnecting-an-mcp-server)될 때 캐시를 그대로 유지합니다. 기본값이므로 연기된 정의는 캐시된 프리픽스에 없었습니다. `Bash(rm *)`와 같은 범위가 지정된 거부 규칙과 모든 허용 및 요청 규칙은 Claude가 보는 도구를 변경하지 않습니다. Claude Code는 Claude가 호출을 시도할 때 이를 확인하여 프리픽스를 그대로 유지합니다.

130 130 

131<h3 id="compacting-the-conversation">131<h3 id="compacting-the-conversation">

132 대화 압축132 대화 압축

133</h3>133</h3>

134 134 

135[압축](/ko/context-window#what-survives-compaction)은 메시지 기록을 요약으로 바꿉니다. 설계상 이는 대화 계층을 무효화합니다. 다음 요청에는 이전 요청과 프리픽스를 공유하지 않는 새로운 더 짧은 기록이 있기 때문입니다. Claude Code는 시스템 프롬프트 계층을 재사용하고 디스크에서 프로젝트 컨텍스트를 다시 로드합니다. 이는 세션 시작 이후 CLAUDE.md와 메모리가 변경되지 않은 경우에만 캐시 히트됩니다.135[압축](/docs/ko/context-window#what-survives-compaction)은 메시지 기록을 요약으로 바꿉니다. 설계상 이는 대화 계층을 무효화합니다. 다음 요청에는 이전 요청과 프리픽스를 공유하지 않는 새로운 더 짧은 기록이 있기 때문입니다. Claude Code는 시스템 프롬프트 계층을 재사용하고 디스크에서 프로젝트 컨텍스트를 다시 로드합니다. 이는 세션 시작 이후 CLAUDE.md와 메모리가 변경되지 않은 경우에만 캐시 히트됩니다.

136 136 

137요약을 생성하기 위해 Claude Code는 대화와 동일한 시스템 프롬프트, 도구 및 기록을 가진 일회성 요청을 보내고, 최종 사용자 메시지로 요약 지침을 추가합니다. 프리픽스를 공유하기 때문에 해당 요청은 전체 기록을 다시 처리하는 대신 기존 캐시를 읽습니다. 압축 시간의 대부분은 캐시 미스가 아닌 요약 생성에 소요됩니다. 뒤따르는 턴은 훨씬 더 짧은 요약에 대해서만 대화 캐시를 다시 구축하므로 압축 후 턴은 느린 부분이 아닙니다.137요약을 생성하기 위해 Claude Code는 대화와 동일한 시스템 프롬프트, 도구 및 기록을 가진 일회성 요청을 보내고, 최종 사용자 메시지로 요약 지침을 추가합니다. 프리픽스를 공유하기 때문에 해당 요청은 전체 기록을 다시 처리하는 대신 기존 캐시를 읽습니다. 압축 시간의 대부분은 캐시 미스가 아닌 요약 생성에 소요됩니다. 뒤따르는 턴은 훨씬 더 짧은 요약에 대해서만 대화 캐시를 다시 구축하므로 압축 후 턴은 느린 부분이 아닙니다.

138 138 


144 Claude Code 업그레이드144 Claude Code 업그레이드

145</h3>145</h3>

146 146 

147새로운 Claude Code 버전은 일반적으로 시스템 프롬프트 또는 도구 정의를 업데이트하므로 업그레이드 후 첫 번째 요청은 캐시를 처음부터 다시 구축합니다. [자동 업데이트](/ko/setup#auto-updates)는 백그라운드에서 새 버전을 다운로드하지만 다음 시작 시에만 적용하므로 세션 중에 놀라운 일이 아닌 재시작 후 캐시되지 않은 첫 턴으로 표시됩니다. `DISABLE_AUTOUPDATER=1`을 설정하여 업그레이드가 적용되는 시기를 제어합니다.147새로운 Claude Code 버전은 일반적으로 시스템 프롬프트 또는 도구 정의를 업데이트하므로 업그레이드 후 첫 번째 요청은 캐시를 처음부터 다시 구축합니다. [자동 업데이트](/docs/ko/setup#auto-updates)는 백그라운드에서 새 버전을 다운로드하지만 다음 시작 시에만 적용하므로 세션 중에 놀라운 일이 아닌 재시작 후 캐시되지 않은 첫 턴으로 표시됩니다. `DISABLE_AUTOUPDATER=1`을 설정하여 업그레이드가 적용되는 시기를 제어합니다.

148 148 

149<Note>149<Note>

150 업그레이드 후 [세션을 재개](/ko/sessions#resume-a-session)하면 캐시 히트 없이 전체 대화 기록을 다시 처리합니다. 기록이 이제 다른 시스템 프롬프트 뒤에 있기 때문입니다. 비용은 재개된 대화의 길이에 따라 확장되므로 긴 세션으로 돌아가는 첫 턴이 보내는 가장 비싼 요청일 수 있습니다.150 업그레이드 후 [세션을 재개](/docs/ko/sessions#resume-a-session)하면 캐시 히트 없이 전체 대화 기록을 다시 처리합니다. 기록이 이제 다른 시스템 프롬프트 뒤에 있기 때문입니다. 비용은 재개된 대화의 길이에 따라 확장되므로 긴 세션으로 돌아가는 첫 턴이 보내는 가장 비싼 요청일 수 있습니다.

151</Note>151</Note>

152 152 

153<h2 id="actions-that-keep-the-cache">153<h2 id="actions-that-keep-the-cache">


177 177 

178프로젝트 루트 및 사용자 수준 CLAUDE.md 파일은 세션 시작 시 한 번 읽혀지고 메모리에 보관됩니다. 세션 중에 편집해도 캐시가 무효화되지 않지만 편집도 적용되지 않습니다. Claude는 세션 시작 시 로드된 버전으로 계속 작동합니다. 새로운 콘텐츠는 다음 `/clear`, `/compact` 또는 재시작 시 로드됩니다.178프로젝트 루트 및 사용자 수준 CLAUDE.md 파일은 세션 시작 시 한 번 읽혀지고 메모리에 보관됩니다. 세션 중에 편집해도 캐시가 무효화되지 않지만 편집도 적용되지 않습니다. Claude는 세션 시작 시 로드된 버전으로 계속 작동합니다. 새로운 콘텐츠는 다음 `/clear`, `/compact` 또는 재시작 시 로드됩니다.

179 179 

180[하위 디렉토리의 중첩된 CLAUDE.md 파일](/ko/memory)과 [`paths:` 프론트매터가 있는 규칙](/ko/memory#path-specific-rules)은 나중에 로드되며, Claude가 일치하는 파일을 처음 읽을 때 로드됩니다. 로드되기 전에 편집하면 적용됩니다. 로드된 후 콘텐츠는 대화 기록의 일부이므로 세션 중 편집은 소급하여 변경하지 않습니다.180[하위 디렉토리의 중첩된 CLAUDE.md 파일](/docs/ko/memory)과 [`paths:` 프론트매터가 있는 규칙](/docs/ko/memory#path-specific-rules)은 나중에 로드되며, Claude가 일치하는 파일을 처음 읽을 때 로드됩니다. 로드되기 전에 편집하면 적용됩니다. 로드된 후 콘텐츠는 대화 기록의 일부이므로 세션 중 편집은 소급하여 변경하지 않습니다.

181 181 

182<h3 id="changing-output-style">182<h3 id="changing-output-style">

183 출력 스타일 변경183 출력 스타일 변경

184</h3>184</h3>

185 185 

186[출력 스타일](/ko/output-styles)은 Claude Code가 세션 시작 시 한 번 읽는 시스템 프롬프트의 일부입니다. `/config` 또는 `outputStyle` 설정을 통해 세션 중에 변경해도 캐시가 무효화되지 않지만 변경도 적용되지 않습니다. Claude는 세션 시작 시 로드된 스타일을 계속 사용합니다. 새로운 스타일은 다음 `/clear` 또는 재시작 시 로드됩니다.186[출력 스타일](/docs/ko/output-styles)은 Claude Code가 세션 시작 시 한 번 읽는 시스템 프롬프트의 일부입니다. `/config` 또는 `outputStyle` 설정을 통해 세션 중에 변경해도 캐시가 무효화되지 않지만 변경도 적용되지 않습니다. Claude는 세션 시작 시 로드된 스타일을 계속 사용합니다. 새로운 스타일은 다음 `/clear` 또는 재시작 시 로드됩니다.

187 187 

188<h3 id="changing-permission-mode">188<h3 id="changing-permission-mode">

189 권한 모드 변경189 권한 모드 변경

190</h3>190</h3>

191 191 

192[권한 모드](/ko/permission-modes) 간 전환(예: 기본값에서 편집 수락으로)은 시스템 프롬프트 또는 도구 정의를 변경하지 않으므로 모드 변경은 캐시 안전입니다. 예외는 [`opusplan`](/ko/model-config#opusplan-model-setting) 모델 설정이 있는 Plan 모드입니다. 이는 Plan 모드에 들어가거나 나갈 때 모델을 Opus와 Sonnet 간에 전환합니다. 이는 모드 토글을 [모델 전환](#switching-models)으로 만듭니다.192[권한 모드](/docs/ko/permission-modes) 간 전환(예: 기본값에서 편집 수락으로)은 시스템 프롬프트 또는 도구 정의를 변경하지 않으므로 모드 변경은 캐시 안전입니다. 예외는 [`opusplan`](/docs/ko/model-config#opusplan-model-setting) 모델 설정이 있는 Plan 모드입니다. 이는 Plan 모드에 들어가거나 나갈 때 모델을 Opus와 Sonnet 간에 전환합니다. 이는 모드 토글을 [모델 전환](#switching-models)으로 만듭니다.

193 193 

194<h3 id="invoking-skills-and-commands">194<h3 id="invoking-skills-and-commands">

195 스킬 및 명령 호출195 스킬 및 명령 호출

196</h3>196</h3>

197 197 

198[스킬](/ko/skills)과 [명령](/ko/commands)은 호출 지점에서 사용자 메시지로 지침을 주입합니다. 대화의 이전 내용은 변경되지 않습니다.198[스킬](/docs/ko/skills)과 [명령](/docs/ko/commands)은 호출 지점에서 사용자 메시지로 지침을 주입합니다. 대화의 이전 내용은 변경되지 않습니다.

199 199 

200<h3 id="running-/recap">200<h3 id="running-/recap">

201 `/recap` 실행201 `/recap` 실행

202</h3>202</h3>

203 203 

204[`/recap`](/ko/interactive-mode#session-recap)은 터미널에 표시할 요약을 생성합니다. `/compact`와 달리 메시지 기록을 바꾸는 대신 요약을 명령 출력으로 추가하므로 캐시된 프리픽스는 그대로 유지됩니다.204[`/recap`](/docs/ko/interactive-mode#session-recap)은 터미널에 표시할 요약을 생성합니다. `/compact`와 달리 메시지 기록을 바꾸는 대신 요약을 명령 출력으로 추가하므로 캐시된 프리픽스는 그대로 유지됩니다.

205 205 

206<h3 id="rewinding-the-conversation">206<h3 id="rewinding-the-conversation">

207 대화 되감기207 대화 되감기

208</h3>208</h3>

209 209 

210[`/rewind`](/ko/checkpointing)는 대화를 이전 턴으로 자릅니다. 남은 기록은 그 시점에서 캐시가 구축된 동일한 콘텐츠이고, 시스템 프롬프트 및 프로젝트 컨텍스트 계층은 변경되지 않으므로 다음 요청은 이전 캐시 항목에 히트합니다. 그 이후의 모든 턴은 해당 프리픽스를 통해 읽었으며, 원래 턴이 TTL보다 오래 전이었더라도 항목을 따뜻하게 유지했습니다.210[`/rewind`](/docs/ko/checkpointing)는 대화를 이전 턴으로 자릅니다. 남은 기록은 그 시점에서 캐시가 구축된 동일한 콘텐츠이고, 시스템 프롬프트 및 프로젝트 컨텍스트 계층은 변경되지 않으므로 다음 요청은 이전 캐시 항목에 히트합니다. 그 이후의 모든 턴은 해당 프리픽스를 통해 읽었으며, 원래 턴이 TTL보다 오래 전이었더라도 항목을 따뜻하게 유지했습니다.

211 211 

212대화와 함께 파일 체크포인트를 복원해도 캐시에 별도의 영향을 주지 않습니다. 파일 콘텐츠는 [저장소의 파일 편집](#editing-files-in-your-repository)과 동일하게 Claude가 읽을 때만 컨텍스트에 들어갑니다.212대화와 함께 파일 체크포인트를 복원해도 캐시에 별도의 영향을 주지 않습니다. 파일 콘텐츠는 [저장소의 파일 편집](#editing-files-in-your-repository)과 동일하게 Claude가 읽을 때만 컨텍스트에 들어갑니다.

213 213 


239 TTL 재정의239 TTL 재정의

240</h3>240</h3>

241 241 

242`FORCE_PROMPT_CACHING_5M=1`을 설정하여 인증에 관계없이 5분 TTL을 강제합니다. 이는 캐시 동작을 디버깅하거나, 두 TTL을 비교하거나, [관리 설정](/ko/settings#settings-files)에 설정된 `ENABLE_PROMPT_CACHING_1H`을 재정의할 때 유용합니다.242`FORCE_PROMPT_CACHING_5M=1`을 설정하여 인증에 관계없이 5분 TTL을 강제합니다. 이는 캐시 동작을 디버깅하거나, 두 TTL을 비교하거나, [관리 설정](/docs/ko/settings#settings-files)에 설정된 `ENABLE_PROMPT_CACHING_1H`을 재정의할 때 유용합니다.

243 243 

244<h2 id="cache-scope">244<h2 id="cache-scope">

245 캐시 범위245 캐시 범위


249 249 

250동일한 디렉토리에서 병렬로 실행하는 세션은 일치하는 프리픽스를 구축하고 서로의 캐시를 읽습니다. 순차 세션은 시작 시 git 상태 스냅샷이 일치할 때만 프리픽스를 공유합니다. 시스템 프롬프트도 분기 및 최근 커밋을 캡처하기 때문입니다.250동일한 디렉토리에서 병렬로 실행하는 세션은 일치하는 프리픽스를 구축하고 서로의 캐시를 읽습니다. 순차 세션은 시작 시 git 상태 스냅샷이 일치할 때만 프리픽스를 공유합니다. 시스템 프롬프트도 분기 및 최근 커밋을 캡처하기 때문입니다.

251 251 

252기본 API 캐시는 더 광범위합니다. 캐시는 조직 간에 격리되며, 일부 제공자에서는 [조직 내 워크스페이스 간](https://platform.claude.com/docs/ko/build-with-claude/prompt-caching#cache-storage-and-sharing)에 격리됩니다. 이러한 경계 내에서 동일한 모델과 프리픽스를 가진 두 요청은 동일한 캐시를 읽습니다. 자동화된 프로세스의 플릿을 실행하는 Agent SDK 호출자의 경우 [사용자 및 머신 간 프롬프트 캐싱 개선](/ko/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines)을 참조하여 시스템 프롬프트의 머신별 섹션을 억제하고 머신 간 캐시를 공유합니다.252기본 API 캐시는 더 광범위합니다. 캐시는 조직 간에 격리되며, 일부 제공자에서는 [조직 내 워크스페이스 간](https://platform.claude.com/docs/ko/build-with-claude/prompt-caching#cache-storage-and-sharing)에 격리됩니다. 이러한 경계 내에서 동일한 모델과 프리픽스를 가진 두 요청은 동일한 캐시를 읽습니다. 자동화된 프로세스의 플릿을 실행하는 Agent SDK 호출자의 경우 [사용자 및 머신 간 프롬프트 캐싱 개선](/docs/ko/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines)을 참조하여 시스템 프롬프트의 머신별 섹션을 억제하고 머신 간 캐시를 공유합니다.

253 253 

254<h2 id="check-cache-performance">254<h2 id="check-cache-performance">

255 캐시 성능 확인255 캐시 성능 확인

256</h2>256</h2>

257 257 

258캐시 성능은 API가 모든 응답에 보고하는 두 개의 토큰 수로 표시됩니다. 라이브로 감시하는 가장 직접적인 방법은 `current_usage` 객체를 읽는 [상태 줄 스크립트](/ko/statusline)입니다:258캐시 성능은 API가 모든 응답에 보고하는 두 개의 토큰 수로 표시됩니다. 라이브로 감시하는 가장 직접적인 방법은 `current_usage` 객체를 읽는 [상태 줄 스크립트](/docs/ko/statusline)입니다:

259 259 

260| 필드 | 의미 |260| 필드 | 의미 |

261| ----------------------------- | --------------------------------------- |261| ----------------------------- | --------------------------------------- |


264 264 

265높은 읽기 대 생성 비율은 캐싱이 잘 작동하고 있음을 의미합니다. 생성이 턴마다 높게 유지되면 프리픽스에서 뭔가 변경되고 있습니다. [캐시를 무효화하는 작업](#actions-that-invalidate-the-cache) 섹션에서 일반적인 원인을 나열합니다.265높은 읽기 대 생성 비율은 캐싱이 잘 작동하고 있음을 의미합니다. 생성이 턴마다 높게 유지되면 프리픽스에서 뭔가 변경되고 있습니다. [캐시를 무효화하는 작업](#actions-that-invalidate-the-cache) 섹션에서 일반적인 원인을 나열합니다.

266 266 

267조직 전체의 가시성을 위해 OpenTelemetry 내보내기는 사용자 및 세션당 캐시 읽기 및 생성 토큰을 보고합니다. 메트릭 및 이벤트 속성 참조는 [사용량 모니터링](/ko/monitoring-usage)을 참조하세요.267조직 전체의 가시성을 위해 OpenTelemetry 내보내기는 사용자 및 세션당 캐시 읽기 및 생성 토큰을 보고합니다. 메트릭 및 이벤트 속성 참조는 [사용량 모니터링](/docs/ko/monitoring-usage)을 참조하세요.

268 268 

269<h2 id="subagents-and-the-cache">269<h2 id="subagents-and-the-cache">

270 서브에이전트 및 캐시270 서브에이전트 및 캐시

271</h2>271</h2>

272 272 

273[서브에이전트](/ko/sub-agents)는 부모와 별개의 자체 대화를 시작하며, 자체 시스템 프롬프트 및 도구 집합을 가집니다. 자체 캐시를 구축하며, 첫 호출 시 캐시 히트가 없고 자체 턴에 걸쳐 따뜻해집니다. 서브에이전트는 자동 1시간 TTL이 주 대화에 적용되더라도 5분 TTL을 사용합니다.273[서브에이전트](/docs/ko/sub-agents)는 부모와 별개의 자체 대화를 시작하며, 자체 시스템 프롬프트 및 도구 집합을 가집니다. 자체 캐시를 구축하며, 첫 호출 시 캐시 히트가 없고 자체 턴에 걸쳐 따뜻해집니다. 서브에이전트는 자동 1시간 TTL이 주 대화에 적용되더라도 5분 TTL을 사용합니다.

274 274 

275부모의 캐시는 영향을 받지 않습니다. 부모 측에서 서브에이전트의 호출 및 결과는 대화에 추가되어 부모의 프리픽스를 그대로 유지합니다.275부모의 캐시는 영향을 받지 않습니다. 부모 측에서 서브에이전트의 호출 및 결과는 대화에 추가되어 부모의 프리픽스를 그대로 유지합니다.

276 276 

277[포크](/ko/sub-agents#fork-the-current-conversation)는 대조적으로 부모의 시스템 프롬프트, 도구 및 대화 기록을 정확히 상속하므로 첫 요청은 부모의 캐시를 읽습니다. [대화 압축](#compacting-the-conversation)에서 설명한 압축 요약 호출은 동일한 프리픽스 공유 접근 방식을 사용합니다.277[포크](/docs/ko/sub-agents#fork-the-current-conversation)는 대조적으로 부모의 시스템 프롬프트, 도구 및 대화 기록을 정확히 상속하므로 첫 요청은 부모의 캐시를 읽습니다. [대화 압축](#compacting-the-conversation)에서 설명한 압축 요약 호출은 동일한 프리픽스 공유 접근 방식을 사용합니다.

278 278 

279<h2 id="disable-prompt-caching">279<h2 id="disable-prompt-caching">

280 프롬프트 캐싱 비활성화280 프롬프트 캐싱 비활성화


290| `DISABLE_PROMPT_CACHING_OPUS` | Opus만 비활성화 |290| `DISABLE_PROMPT_CACHING_OPUS` | Opus만 비활성화 |

291| `DISABLE_PROMPT_CACHING_FABLE` | Fable만 비활성화 |291| `DISABLE_PROMPT_CACHING_FABLE` | Fable만 비활성화 |

292 292 

293조직 전체에 캐싱 정책을 설정하려면 이 중 하나 또는 [TTL 변수](#cache-lifetime)를 [관리 설정](/ko/settings#settings-files)의 `env` 블록에 넣습니다. 정상 사용의 경우 캐싱을 활성화된 상태로 유지합니다.293조직 전체에 캐싱 정책을 설정하려면 이 중 하나 또는 [TTL 변수](#cache-lifetime)를 [관리 설정](/docs/ko/settings#settings-files)의 `env` 블록에 넣습니다. 정상 사용의 경우 캐싱을 활성화된 상태로 유지합니다.

294 294 

295<h2 id="related-resources">295<h2 id="related-resources">

296 관련 리소스296 관련 리소스

297</h2>297</h2>

298 298 

299* [Claude Code 구축에서 배운 교훈: 프롬프트 캐싱이 모든 것입니다](https://claude.com/blog/lessons-from-building-claude-code-prompt-caching-is-everything): Plan 모드, 연기된 도구 로딩 및 압축의 설계 근거299* [Claude Code 구축에서 배운 교훈: 프롬프트 캐싱이 모든 것입니다](https://claude.com/blog/lessons-from-building-claude-code-prompt-caching-is-everything): Plan 모드, 연기된 도구 로딩 및 압축의 설계 근거

300* [컨텍스트 윈도우 탐색](/ko/context-window): 컨텍스트에 로드되는 내용 및 시기300* [컨텍스트 윈도우 탐색](/docs/ko/context-window): 컨텍스트에 로드되는 내용 및 시기

301* [토큰 사용량 감소](/ko/costs#reduce-token-usage): 컨텍스트 크기 관리를 위한 캐싱 이상의 전략301* [토큰 사용량 감소](/docs/ko/costs#reduce-token-usage): 컨텍스트 크기 관리를 위한 캐싱 이상의 전략

302* [비용 추적 및 감소](/ko/agent-sdk/cost-tracking): Agent SDK 호출자를 위한 캐시 토큰 추적 및 TTL 구성302* [비용 추적 및 감소](/docs/ko/agent-sdk/cost-tracking): Agent SDK 호출자를 위한 캐시 토큰 추적 및 TTL 구성

303* [프롬프트 캐싱](https://platform.claude.com/docs/en/build-with-claude/prompt-caching): 기본 API 메커니즘, 중단점 및 가격 책정303* [프롬프트 캐싱](https://platform.claude.com/docs/en/build-with-claude/prompt-caching): 기본 API 메커니즘, 중단점 및 가격 책정