M5· CLI 명령Ch 19 / 28
diff — 버전 비교
이전 버전과 지금 버전이 뭐가 달라졌는지, 더 나빠진 건 없는지
디자인 시스템을 수정했을 때 뭐가 바뀌었는지, 그리고 더 나빠진 건 아닌지를 기계적으로 확인해 주는 명령이에요.
기본 사용법
npx @google/design.md diff DESIGN.md DESIGN-v2.md
이전 파일과 수정 후 파일을 순서대로 넘기면 돼요.
결과 예시
{
"tokens": {
"colors": { "added": ["accent"], "removed": [], "modified": ["tertiary"] },
"typography": { "added": [], "removed": [], "modified": [] }
},
"regression": false
}
토큰 묶음별로 변화를 추가됨 · 삭제됨 · 수정됨 3가지로 분류해 줘요.
3단계 분류 — 위험도가 달라요
- added (추가됨): v2에 새로 생긴 토큰. 새 기능 추가 상황이라 보통 안전.
- removed (삭제됨): v1에 있었는데 v2에서 없어진 토큰. 가장 위험해요. 이 토큰을 참조하던 컴포넌트가 깨져요.
- modified (수정됨): 둘 다 존재하지만 값이 바뀜. "주조색 톤을 살짝 어둡게"처럼 의도적이면 OK, 실수면 위험.
"회귀(regression)" 판정
L221Exit code 1 if regressions are detected (more errors or warnings in the "after" file).
한국어로 풀면
회귀(regression)가 감지되면 종료 코드 1(실패)을 반환해요. 회귀란 "수정 후 파일이 수정 전보다 에러·경고가 더 많아졌다"는 뜻이에요.
"회귀"는 소프트웨어 업계 용어로 "고치려다 더 나빠짐"이에요. diff는 이걸 기계적으로 재요 — 토큰 값이 바뀌었나가 아니라 검사 결과가 악화됐나를 기준으로요.
어디에 쓸까
PR 자동 리뷰
GitHub Actions에서 merge 전 상태 vs PR 상태를 비교. 토큰이 삭제됐거나 회귀면 리뷰어에게 알림.
AI의 자기 검증
AI가 DESIGN.md를 수정한 뒤 diff로 확인. regression: true면 롤백하고 다시 시도.
본문(글) 변경은?
README는 "토큰 + 본문 회귀 탐지"라고 말하지만, 실제로는 토큰은 구조적으로 비교, 본문은 존재 여부 확인 수준이에요. "설명 문장의 의미가 바뀌었는지" 같은 깊은 비교는 아직 없고, 스펙 성숙에 따라 확장될 영역이에요.
핵심 인사이트
diff의 진짜 가치는 "AI가 자기 작업이 좋아졌는지 스스로 잴 수 있다"예요. "이 수정이 디자인 시스템을 개선했나, 망쳤나?"에 기계가 답을 줘요. AI가 DESIGN.md를 수정 → 자체 검증 → 문제 있으면 롤백하는 루프에 그대로 붙여 쓸 수 있어요.
체크리스트
- 추가·삭제·수정 3단계의 위험도 차이를 안다
- "회귀(regression)"의 뜻과 판정 기준을 설명할 수 있다
- AI의 자기 검증 루프에
diff가 어떻게 쓰이는지 이해한다