/Part 7: 인프라/다계층 설정 시스템
⚙️
Part 7중급⏱ 약 40분 · 1개 섹션

다계층 설정 시스템

8가지 소스의 조화

다계층 설정 시스템 대표 이미지
이 챕터에서 배울 것
  • Remote → MDM → Managed → Flag → Policy → User → Project → Local
  • settingsMergeCustomizer()로 커스텀 병합 로직
  • 변경 감지와 디바운스된 리로드
전체 아키텍처에서 현재 위치
⚙️코어 엔진
🔧도구 시스템
🛡️보안
🧠컨텍스트
🤝멀티 에이전트
🌐생태계
인프라
1

설정 소스 우선순위

8계층 설정 병합과 First-Source-Wins

우선순위병합 로직Zod 검증캐시|utils/settings/settings.tsutils/settings/types.ts

Claude Code는 8계층 설정 시스템으로 엔터프라이즈부터 개인까지 다양한 수준의 설정을 관리합니다.

src/utils/settings/settings.ts — 설정 계층
1// src/utils/settings/settings.ts — 다계층 설정 로드
2
3import mergeWith from 'lodash-es/mergeWith.js'
4import { z } from 'zod/v4'
5
6// 설정 로드 순서 (우선순위 높은 → 낮은):
7// 1. Remote Managed → 원격 동기화 서비스💡
8// 2. MDM/Registry → macOS plist / Windows 레지스트리
9// 3. Managed File → managed-settings.json + drop-ins
10// 4. Flag Settings → --flag-settings CLI 인자
11// 5. Policy → 최우선 소스에서 병합
12// 6. User → ~/.claude/settings.json
13// 7. Project → .claude/settings.json
14// 8. Local → .claude/settings.local.json
15
16// 커스텀 병합 로직
17function settingsMergeCustomizer(objVal, srcVal) {💡
18 // 배열: concat (규칙 누적)
19 if (Array.isArray(objVal)) return objVal.concat(srcVal)
20 // 객체: deep merge
21 // 원시값: 상위 소스 우선
22}
23
24// Zod 기반 설정 검증 (types.ts, 42KB)
25const SettingsSchema = z.object({
26 permissions: z.object({
27 allow: z.array(z.string()), // ["Bash(git *)", "GlobTool"]
28 deny: z.array(z.string()), // ["Bash(rm -rf *)"]
29 ask: z.array(z.string()),
30 mode: permissionModeSchema,
31 additionalDirectories: z.array(z.string()),
32 }),
33 hooks: z.record(z.array(hookConfigSchema)),
34 env: z.record(z.string()),
35 // ... sandbox, plugins, autoUpdate 등
36})
37
38// 변경 감지 (changeDetector.ts)
39// 파일 워처 → 디바운스된 리로드 → 캐시 무효화