뭐가 바뀌었는지 찾기: Text Diff 가이드
정신 잃지 않고 파일, 설정, 코드 버전 간 차이를 발견.
뭔가 깨졌어. 설정 파일이 같아 보여. 근데 아니야—그 500줄 어딘가에서 한 글자가 바뀌었어.
수동으로 찾는 데 행운을 빌어.
Diff 도구가 정확히 이것 때문에 존재해. 두 버전을 비교하고, 뭐가 바뀌었는지 봐. 디버깅 시간이 몇 시간에서 몇 초로 떨어져.
Diff가 널 구할 때
설정 파일. 배포가 깨졌어? 작동하는 설정과 현재 설정을 비교해.
코드 리뷰. 이 풀 리퀘스트에서 실제로 뭐가 바뀌었어?
API 응답. 같은 엔드포인트가 왜 이제 다른 데이터를 반환해?
문서 버전. 클라이언트가 계약서에서 뭘 바꿨어?
Diff 출력 읽기
대부분의 diff 도구는 보여줘:
- 제거된 줄 빨강 (접두사
-) - 추가된 줄 초록 (접두사
+) - 맥락 줄 변경 없이, 주변 콘텐츠 보여줌
function process(data) {
- return data.toLowerCase();
+ return data.toLowerCase().trim();
}
한 줄이 바뀌었어. 예전 버전은 trim 안 했고, 새 버전은 해.
나란히 vs 통합
통합 diff는 변경을 인라인으로 보여줘. 컴팩트하고, 작은 변경에 좋아.
나란히는 옛날 버전과 새 버전을 나란히 보여줘. 더 큰 변경을 이해하는 데 나아.
뭘 비교하는지에 따라 골라.
문자 레벨 Diff
줄 diff는 어느 줄이 바뀌었는지 보여줘. 문자 diff는 그 줄 안의 정확히 어떤 문자인지 보여줘.
설정 디버깅은 문자 레벨이 찾는 데 도움이 돼:
- 추가 공백
- 틀린 따옴표 (' vs ")
- 보이지 않는 문자
- 케이스 차이
실전 팁
중요하지 않을 때 공백 제거. 뒷 공백과 다른 줄 끝이 소음을 일으켜.
적절할 때 케이스 무시. 때때로 "TRUE"와 "true"는 같아.
맥락 써. 주변 줄을 보면 변경을 이해하는 데 도움이 돼.
구조화된 데이터 조심히 diff. JSON과 XML은 비교 전에 동일하게 포맷돼야 하거나 재포맷 차이가 실제 변경을 가릴 거야.
흔한 사용 사례
환경 차이 디버깅. staging 설정을 프로덕션과 비교해. 차이가 보통 버그야.
시간에 걸쳐 변경 추적. 변경 전후 버전 저장해. Diff가 정확히 뭘 했는지 알려줘.
마이그레이션 검증. 전후 데이터베이스 덤프 비교해. 예상치 못한 차이는 마이그레이션 버그를 의미해.
코드 리뷰. 작성자가 주장하는 게 아니라 실제로 뭐가 바뀌는지 봐.
줄 Diff가 충분하지 않을 때
바이너리 파일. Diff 도구는 텍스트로 작동해. 이미지, PDF, 실행 파일은 전용 도구가 필요해.
의미적으로 동일하지만 다르게 포맷됨. 같은 데이터지만 다른 포맷팅의 두 JSON 파일은 많은 차이를 보일 거야. 먼저 정규화해.
코드 이동. 표준 diff는 삭제와 추가를 따로 보여줘. 고급 도구는 이동을 감지할 수 있어.
Diff는 과소평가된 디버깅 도구야. 뭔가 "같아 보이는데" 다르게 행동하면 추측을 멈추고 비교해. 차이가 있어—그냥 봐야 해.