CPN 한국어 자습서 · Claude Certified Developer — Foundations Prep
3-7 · 누적 통합 과제
Cumulative integration task — bug ID & assembly
모듈 3의 마지막은 앞에서 익힌 것을 한자리에 모아 보는 통합 과제입니다. 설정·패키징·연결이라는 세 계층에 버그가 하나씩 심어져 있는 프로젝트를 받아, 먼저 버그를 찾아내고 그다음 세 파일을 고쳐 씁니다. 화면을 넘기기 전에 손으로 답을 써 보는 것부터 시작합니다.
이 장에서 배우는 것What you'll learn
약 6분설정·패키징·MCP 세 계층에 걸친 버그를 파일 단위로 찾는 법
bypassPermissions가 프로덕션 작업 컴퓨터에서 위험한 이유
절대 경로 대신 $CLAUDE_PROJECT_DIR로 어디서나 맞는 경로 쓰기
평문 키를 환경 변수로 옮기고, 이미 노출된 키를 다루는 판단
세 파일을 완성된 형태로 고쳐 쓰는 연습
bypassPermissions는 확인을 모두 건너뛰고, acceptEdits는 파일 편집만 자동 승인하되 위험한 명령은 여전히 확인을 거친다.이번 과제는 모듈 3에서 다룬 내용을 한 번에 점검하는 자리입니다. 하나의 프로젝트 안에 버그가 세 개 심어져 있는데, 각각 서로 다른 계층에 자리하고 있습니다.
.claude/settings.jsonSKILL.md.mcp.json과제는 두 단계로 나뉩니다. 먼저 파일마다 버그를 찾아내고, 그다음 세 파일을 고쳐 씁니다. 각 단계에는 직접 답을 써 보는 칸이 있고, 다 쓴 뒤 모범 답안을 열어 맞춰 볼 수 있습니다.
지금까지 배운 것을 한 프로젝트에서 모두 꺼내 쓰는 마무리 문제입니다. 새 개념을 배우기보다, 이미 익힌 판단을 실제 파일에 적용해 보는 연습에 가깝습니다.
세 파일에는 각각 버그가 하나씩 있습니다. 파일을 하나씩 읽어 보고, 어디가 잘못됐는지, 그리고 그 상태로 실행하면 런타임에 무슨 일이 일어나는지(또는 무엇이 안 되는지)를 한 문장으로 적어 보세요.
FILE 1 · .claude/settings.json — 설정 계층
{ "permissions": { "defaultMode": "bypassPermissions", "deny": ["Read(.env.production)"] } }FILE 2 · .claude/skills/migration-validate/SKILL.md — 패키징 계층
--- name: migration-validate description: Validates migration scripts before they run against production. --- ## Steps 1. Run: /Users/priya/scripts/validate-migration.sh 2. Report validation results.
FILE 3 · .mcp.json — MCP·인증 계층
{
"mcpServers": {
"data-warehouse": {
"type": "http",
"url": "https://warehouse.internal/mcp",
"headers": {
"Authorization": "Bearer sk-prod-warehouse-abc123"
}
}
}
}MODEL ANSWER — 세 계층의 버그
| 파일 · 계층 | 심어 둔 버그 | 런타임에 벌어지는 일 |
|---|---|---|
| settings.json 설정 | defaultMode가 bypassPermissions로 되어 있다. | 확인 절차를 모두 건너뛰고 모든 동작을 자동 승인합니다. 게이트 자체가 꺼져 있어 Read(.env.production) 차단 규칙도 효력을 잃습니다. 프로덕션 작업 컴퓨터에서는 파괴적인 명령까지 그대로 실행됩니다. |
| SKILL.md 패키징 | 1단계가 절대 경로 /Users/priya/scripts/validate-migration.sh를 가리킨다. | 이 경로는 작성자 한 사람의 컴퓨터에만 있습니다. 동료가 저장소를 내려받으면 경로가 없어, 스킬이 실행되지 않습니다. |
| .mcp.json MCP·인증 | Authorization 헤더에 평문 프로덕션 토큰 sk-prod-warehouse-abc123가 그대로 적혀 있다. | 비밀 키가 설정 파일에 그대로 커밋되어, 저장소에 접근할 수 있는 누구에게나 노출됩니다. 한 번 커밋되면 나중에 파일을 고쳐도 저장소 기록에 남기 때문에, 유출된 키로 보고 교체하는 편이 안전합니다. |
비밀 키를 설정 파일에 직접 적는 것은, 비밀번호를 공용 문서에 써서 함께 공유하는 것과 비슷합니다. 한 번 저장소 기록에 들어가면 지운 뒤에도 예전 기록에서 다시 꺼낼 수 있어서, 그 키는 이미 유출됐다고 보고 새 키로 바꾸는 것이 안전합니다.
세 계층을 다 찾았나요? 놓친 파일이 있다면, 그 파일을 다시 읽어 보며 어느 값이 잘못됐는지 짚어 보는 것이 좋습니다.
이제 방향을 반대로 돌려, 찾아낸 세 버그를 고친 파일을 직접 써 봅니다. 세 파일 모두 완성된 형태로 다시 써 보세요. 고친 결과가 아래 세 가지를 만족하면 됩니다.
MODEL ANSWER — FILE 1 · settings.json (corrected)
{ "permissions": { "defaultMode": "acceptEdits", "deny": ["Read(.env.production)"] } }MODEL ANSWER — FILE 2 · SKILL.md (corrected)
--- name: migration-validate description: Validates migration scripts before they run against production. --- ## Steps 1. Run: $CLAUDE_PROJECT_DIR/scripts/validate-migration.sh 2. Report validation results.
MODEL ANSWER — FILE 3 · .mcp.json (corrected)
{
"mcpServers": {
"data-warehouse": {
"type": "http",
"url": "https://warehouse.internal/mcp",
"headers": {
"Authorization": "Bearer ${WAREHOUSE_MCP_TOKEN}"
}
}
}
}settings.json은 permissions 안의 defaultMode를 acceptEdits로 둡니다. 파일 편집과 흔한 파일 명령은 자동 승인하되, 파괴적인 셸 명령은 여전히 확인을 거칩니다 — 프로덕션 마이그레이션 작업 컴퓨터에 맞는 절충입니다. 스킬은 $CLAUDE_PROJECT_DIR를 써서, 어느 컴퓨터에서 내려받아도 프로젝트 최상위를 기준으로 경로를 찾습니다. MCP 설정은 비밀 키를 환경 변수로 참조하므로, 키가 저장소 기록에 남지 않습니다.
세 파일을 고쳤다면, 확인 게이트는 살아 있고, 경로는 어느 컴퓨터에서든 맞으며, 비밀 키는 저장소 기록에 남지 않습니다. 세 가지가 모두 맞으면 완성입니다.
bypassPermissions는 프로덕션 작업 컴퓨터에서 마이그레이션에 필요한 안전 확인까지 없앱니다. acceptEdits로 바꾸면 편집은 빨라지되 위험한 명령은 확인을 거칩니다.$CLAUDE_PROJECT_DIR 기준 경로는 어느 컴퓨터에서든 같은 위치를 가리킵니다.앞의 세 계층을 객관식으로 한 번 더 짚어 봅니다. 정답을 먼저 떠올려 본 뒤 골라 보세요. 맞히면 설명이 나옵니다.
Q1.claude/settings.json의 defaultMode가 bypassPermissions일 때, 런타임에서 벌어지는 일은?
bypassPermissions는 게이트 자체를 꺼 버리기 때문에, Read(.env.production) 차단 규칙까지 효력을 잃습니다. 편집만 자동 승인하고 위험한 명령은 확인을 거치는 것은 고친 뒤의 acceptEdits 동작입니다.
Q2SKILL.md가 절대 경로 /Users/priya/scripts/...를 쓴 것이 왜 버그일까요?
절대 경로는 작성자 한 사람의 폴더 구조를 가정합니다. $CLAUDE_PROJECT_DIR 기준 경로로 바꾸면 프로젝트 최상위를 기준으로 찾으므로, 어느 컴퓨터에서든 맞습니다.
Q3.mcp.json에 평문으로 커밋된 키 sk-prod-warehouse-abc123를, 다음 커밋에서 파일만 고치면 안전해질까요?
커밋된 값은 저장소 기록에 남아, 나중에 파일을 덮어써도 이전 기록에서 꺼낼 수 있습니다. 그래서 키를 환경 변수로 옮기는 것과 함께, 이미 노출된 키는 교체하는 것이 안전합니다.
Q4고친 settings.json에서 bypassPermissions를 대신하는 권한 모드는 무엇일까요?
모범 답안은 defaultMode를 acceptEdits로 둡니다. 편집 속도를 살리면서도 deny 규칙과 확인 게이트는 그대로 작동합니다. bypassPermissions로 두면 deny 규칙을 아무리 촘촘히 적어도 게이트가 꺼져 있어 효력이 없습니다.
모듈 3의 마지막 장은 지금까지 다룬 내용을 핵심 정리와 용어로 한 번 더 훑습니다. → 핵심 정리
전 코스는 계속 무료입니다. 등록하면 이 코스의 남은 38개 레슨을 끝까지 읽을 수 있습니다.
이미 등록하셨다면 그때 쓰신 이메일을 넣어 주세요.