diff --git a/CLAUDE.md b/CLAUDE.md index ca30f35..4152f0c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -122,63 +122,100 @@ fix: [auth] 로그인 시 세션 만료 오류 수정 --- -## 서버 직접 접근 금지 (최우선 필수 규칙) +## 서버 접근 정책 (3단계 분류) -> **경고: 운영/개발 서버에 SSH로 직접 접속하여 파일을 수정하거나 명령을 실행하지 마세요!** -> **2026-02-21 사고**: Claude가 서버에 SSH로 직접 접속하여 설정을 변경한 결과 502 Bad Gateway 발생. 개발팀장이 복구함. +> **2026-02-21 사고 교훈**: Claude가 서버에 SSH로 접속하여 **설정을 변경**한 결과 502 Bad Gateway 발생. +> → 교훈: **읽기는 허용, 변경은 확인 후, 위험 작업은 금지** ### 핵심 원칙 -서버는 **개발팀장이 관리**한다. Claude는 서버에 절대 직접 접근하지 않는다. +서버 접근을 **3단계**로 분류하여 관리한다: -### 금지 사항 +| 단계 | 분류 | 정책 | +|------|------|------| +| 🟢 Level 1 | 읽기 전용 (진단/조회) | **자유 허용** — 사용자 요청 시 즉시 실행 | +| 🟡 Level 2 | 경미한 변경 | **사용자 확인 후 실행** — 실행 전 명령어를 보여주고 승인받기 | +| 🔴 Level 3 | 위험한 변경 | **절대 금지** — 안내만 제공 | + +### 🟢 Level 1: 읽기 전용 (자유 허용) + +사용자가 서버 진단/조회를 요청하면 **즉시 SSH 접속하여 실행** 가능: ``` -❌ ssh pro@114.203.209.83 ... 로 서버 접속 금지 -❌ ssh hskwon@114.203.209.83 ... 로 서버 접속 금지 -❌ 서버에서 파일 수정, 프로세스 종료/시작, 설정 변경 금지 -❌ 서버에서 npm run build, npm start, node server.js 등 실행 금지 -❌ 서버에서 git pull, composer install, php artisan 등 실행 금지 -❌ scp, rsync로 서버에 파일 직접 전송 금지 +✅ ls, cat, head, tail, less — 파일/디렉토리 조회 +✅ ps aux, top, htop — 프로세스 확인 +✅ df -h, free -m — 디스크/메모리 확인 +✅ git status, git log, git diff — Git 상태 조회 +✅ stat, id, whoami — 권한/소유자 확인 +✅ nginx -t, php -v — 설정 검증 (변경 아닌 테스트만) +✅ tail -f /var/log/*.log — 로그 조회 +✅ systemctl status — 서비스 상태 조회 +✅ crontab -l — 크론 작업 조회 +✅ docker ps, docker logs — 컨테이너 상태 조회 ``` -### 허용 사항 +### 🟡 Level 2: 경미한 변경 (확인 후 실행) + +실행 전 **명령어를 사용자에게 보여주고 승인**받은 후 실행: ``` -✅ 로컬에서 코드 작성 및 수정 -✅ 로컬에서 git add → git commit -✅ 사용자에게 git push 안내 (사용자가 수동으로 실행) -✅ 사용자에게 서버 배포 절차 안내 (사용자가 수동으로 실행) +⚠️ git pull — 코드 업데이트 +⚠️ composer install — 의존성 설치 +⚠️ php artisan migrate — DB 마이그레이션 +⚠️ php artisan config:clear, cache:clear — 캐시 초기화 +⚠️ chmod, chown — 파일 권한 변경 (소규모) +⚠️ systemctl restart — 서비스 재시작 +⚠️ npm install — 패키지 설치 ``` +**실행 절차:** +1. 실행할 명령어를 먼저 사용자에게 표시 +2. 사용자 승인 확인 +3. 승인 후 실행 + +### 🔴 Level 3: 위험한 변경 (절대 금지 — 안내만) + +Claude가 **절대 직접 실행하지 않으며**, 사용자에게 명령어를 안내만 제공: + +``` +❌ rm -rf, 대량 파일 삭제 +❌ nginx/apache 설정 파일 직접 수정 +❌ /etc/ 하위 시스템 설정 변경 +❌ 서버에서 npm run build (메모리 부족 위험) +❌ DB 직접 수정 (DROP, TRUNCATE, 대량 UPDATE/DELETE) +❌ 방화벽(iptables, ufw) 규칙 변경 +❌ 사용자 계정 생성/삭제/비밀번호 변경 +❌ scp, rsync로 대량 파일 전송 +❌ 프로세스 강제 종료 (kill -9) +❌ 서버 재부팅 +``` + +### 서버 접속 정보 + +| 서버 | 호스트 | 계정 | +|------|--------|------| +| 운영 서버 | `114.203.209.83` | `pro` | + ### 배포 흐름 ``` -Claude 역할 사용자/팀장 역할 -┌─────────────────┐ ┌─────────────────┐ -│ 코드 작성/수정 │ │ │ -│ git add │ │ │ -│ git commit │──push──→ │ git pull │ -│ │ │ 서버 배포 │ -│ │ │ 서비스 재시작 │ -└─────────────────┘ └─────────────────┘ +Claude 역할 사용자/팀장 역할 +┌───────────────────────┐ ┌─────────────────┐ +│ 코드 작성/수정 │ │ │ +│ git add / git commit │ │ │ +│ │──push──→ │ git push │ +│ 서버 진단 (Level 1) │ │ │ +│ 서버 변경 (Level 2) │──확인──→ │ 승인 │ +│ 위험 작업 (Level 3) │──안내──→ │ 직접 실행 │ +└───────────────────────┘ └─────────────────┘ ``` -### 서버 작업이 필요한 경우 +### 체크리스트 (서버 작업 시) -사용자에게 명령어를 안내만 한다: - -``` -서버에서 다음 명령을 실행해주세요: -cd /home/webservice/api && git pull && composer install && php artisan migrate -``` - -### 체크리스트 (모든 작업 시) - -- [ ] SSH 명령 사용하지 않음 -- [ ] 서버 파일 직접 수정하지 않음 -- [ ] 배포가 필요하면 사용자에게 안내만 제공 -- [ ] git push까지만 Claude 역할 +- [ ] Level 1 (읽기): 사용자 요청 시 즉시 실행 +- [ ] Level 2 (변경): 명령어를 보여주고 승인 후 실행 +- [ ] Level 3 (위험): 절대 직접 실행하지 않고 안내만 제공 +- [ ] 사고 방지: 설정 파일 수정, 서비스 중단 가능성 있는 작업은 Level 3 --- @@ -538,6 +575,7 @@ php artisan config:clear | Skill | 설명 | |-------|------| +| `svg-precision` | SVG 결정론적 생성, 검증(validate), PNG 렌더링. 다이어그램/차트/아이콘에 사용 | | `duplicate-file-cleaner` | 중복 이미지/미디어 파일 정리 | | `npm-release-manager` | NPM 패키지 배포 자동화 |