[6편] 설치 로그가 거짓말을 했습니다
카테고리: AI 기반 개발 / 트러블슈팅 태그: npm, 격리설치, AI스킬, 디자인시스템, 도구검증, 트러블슈팅 시리즈: 도구 열 개를 정리하고 방법론 하나를 남겼다 (6/8)
다음 문제는 디자인이었습니다
방법론 문서를 만들고 나니, 남은 큰 숙제가 하나 보였습니다.
디자인에서 시간을 제일 많이 뺏깁니다.
기능은 어떻게든 만듭니다. 그런데 "이쁘게 만들어줘"라고 하면 매번 비슷한 게 나오고, 마음에 안 들어서 다시 시키고, 또 비슷한 게 나옵니다.
그러다 이런 걸 찾았습니다.
Impeccable — "The design language that makes your AI harness better at design." 별 48.1k. 스킬 1개, 커맨드 23개, 검사 규칙 46개.
소개 문구를 읽는데 제 문제를 그대로 적어놨습니다.
모델이 전부 같은 SaaS 템플릿으로 학습돼서, 가이드 없이 시키면 매번 똑같은 게 나온다. Inter 폰트, 보라-파랑 그라디언트, 카드 안에 카드, 제목 위 둥근 아이콘 타일.
바로 이거였습니다. 제가 매번 받던 그 결과물이요.
(참고로 여기서 "AI harness"는 2편에서 다룬 그 harness가 아닙니다. AI 코딩 도구를 통칭하는 일반 명사입니다. 이름 충돌이 또 나왔습니다.)

전 같으면 그냥 깔았을 겁니다
1편에서 열 개를 깐 사람입니다. 예전 패턴대로였다면
npx impeccable install 치고 프로젝트에 바로 붙였을 겁니다.
그런데 3편에서 규칙을 만들었죠.
1. 격리 설치 기존 프로젝트를 절대 안 건드리는 별도 경로에 푼다
2. 30분 타이머
3. "내 루프에 없는 걸 주는가?"
4. 주는 부분만 뜯어온다
그래서 그대로 했습니다.
mkdir -p /root/test-impeccable && cd /root/test-impeccable
npx impeccable install --scope=project --providers=claude
--scope=project. 이 프로젝트 안에만 설치하라는 뜻입니다.
전역에 깔리면 다른 작업 세션까지 오염되니까요.
설치가 끝나고 이런 로그가 찍혔습니다.
Installed impeccable into: .claude (project)
"project"라고 찍혔습니다. 종료 코드도 0. 정상입니다.
그런데 확인해봤습니다
3편에서 가져온 규칙 중에 이런 게 있습니다.
검사 도구를 믿기 전에 검사 도구를 검사한다.
원래는 검사 스크립트에 대한 규칙이었는데, 습관이 돼서 설치 결과도 그냥 확인해봤습니다. 로그를 믿지 않고요.
ls /root/test-impeccable/ # 프로젝트 스코프
ls ~/.claude/skills/ # 전역
결과가 이랬습니다.
| 위치 | 있어야 할 것 | 실제 |
|---|---|---|
/root/test-impeccable/ |
스킬 파일 전부 | 비어 있음 |
~/.claude/skills/impeccable/ |
아무것도 없어야 함 | 2.5MB 설치됨 |
~/.claude/settings.local.json |
변경 없어야 함 | hook 등록됨 |
전부 반대였습니다.
--scope=project로 지정했고, 로그도 "project"라고 찍었는데,
실제로는 전부 전역으로 갔습니다.
그리고 전역 설정 파일에 hook까지 심어놨습니다. 그대로 뒀으면 앞으로 모든 Claude Code 세션에서 그 hook이 실행됩니다. 블로그 작업하는 세션에도, 다른 프로젝트에도요.

왜 이게 위험하냐면
hook은 매 세션에서 자동 실행되는 코드입니다. 그런데 이 도구는 Node 22를 요구하는데 서버는 Node 20이었습니다.
즉 앞으로 열 세션마다 hook 에러가 날 수 있는 상태로 만들어놓고 "project 스코프에 설치 완료"라고 보고한 겁니다.
만약 확인을 안 했다면?
며칠 뒤에 다른 프로젝트 작업하다가 알 수 없는 에러를 만났을 겁니다. 그리고 그게 며칠 전에 깐 디자인 도구 때문이라는 걸 절대 연결 못 했을 겁니다.

3편의 규칙이 여기서 값을 했습니다
격리 설치 ← 기존 프로젝트에 직접 안 깔았음
↓
실제 위치 확인 ← 로그를 안 믿고 직접 봤음
↓
오염 발견
↓
즉시 중단 ← 다음 단계로 안 넘어감
격리 설치 안 했으면 운영 중인 블로그 프로젝트에 깔았을 겁니다. 확인 안 했으면 로그만 보고 넘어갔을 겁니다. 중단 규칙 없었으면 "일단 되니까" 하고 계속 진행했을 겁니다.
세 개가 다 있어서 잡혔습니다.
솔직히 말하면, 저는 이 규칙들을 하루 전에 문서에 적었습니다. 적자마자 바로 써먹게 될 줄은 몰랐습니다.
그런데 여기서 딜레마가 생겼습니다
도구는 못 쓰게 됐습니다. 전역을 오염시키고, Node 버전도 안 맞습니다.
그런데 내용은 좋았습니다.
- 안티패턴 8종 (AI가 디자인할 때 반복하는 실수)
- 검사 규칙 46개 (LLM 없이 돌아가는 정적 검사)
- 커맨드 23개 각각의 실제 지시 내용
- 색·타이포·모션의 구체적 수치
지우면 이것도 같이 사라집니다.
여기서 보통 두 가지 반응이 나옵니다.
반응 A: "아까우니까 그냥 두자" → 전역 오염 유지 → 나중에 터짐 반응 B: "위험하니까 지우자" → 지식도 같이 날림
둘 다 아니었습니다. 세 번째 길이 있었습니다.
7편에서 그 이야기를 하겠습니다.
남는 이야기
첫째, 도구의 자기 보고를 믿지 마세요.
--scope=project를 명시했고, 로그도 "project"라고 찍었고, 종료 코드도 0이었습니다.
전부 정상이라고 말하고 있었는데 실제로는 반대였습니다.
이건 악의가 아니라 그냥 버그일 겁니다. 그래도 결과는 같습니다. "설치했다"는 보고와 "어디에 설치됐다"는 사실은 다른 정보입니다.
둘째, 격리 설치는 습관이 되어야 합니다.
"이번 건 간단하니까 그냥 깔자"가 제일 위험합니다. 간단한 도구일수록 뭘 건드리는지 안 보고 넘어가거든요.
폴더 하나 더 만드는 데 3초 걸립니다.
셋째, 규칙은 적어야 작동합니다.
이 규칙들을 저는 하루 전에 문서에 적었습니다. 머릿속에만 있었으면 그날 밤에 그냥 깔았을 겁니다.
"당연히 확인해야지"는 안 한다는 뜻입니다. 체크리스트에 있어야 합니다.
이전 편: [5편] 블로그용 지침서는 홈페이지 개발에 못 씁니다 다음 편: [7편] 도구는 버리고 지식만 뽑아냈습니다
이 글은 실제 격리 테스트에서 발생한 문제의 기록입니다. 대상: [email protected] · 검증: 설치 후 실제 파일 위치 확인 · 판정: 격리 실패



댓글 0