텍스트 비교(Diff) 도구 완전 가이드: 계약서·코드·문서 변경 추적
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
계약서 수정본을 받았는데 어디가 바뀌었는지 모르겠다면?
코드 리뷰에서 이전 버전과 뭐가 달라졌는지 확인해야 한다면?
두 PDF 사이의 변경점을 빠르게 찾아야 한다면?
텍스트 비교(Diff) 도구를 쓰면 두 텍스트의 차이를 색상으로 즉시 확인할 수 있습니다.
이 글은 Diff의 원리, 줄·단어·문자 단위 비교의 차이, 계약서·코드·번역·설정 파일 활용법, Git diff 읽는 법,
그리고 색약 친화 표시까지 실무 노하우를 한 번에 정리합니다.
Diff란?#
Diff(Difference)는 두 텍스트 사이의 차이를 추출하는 기법입니다.
1970년대 유닉스 운영체제의 diff 유틸리티에서 출발해 소프트웨어 개발에서 코드 변경 이력을 관리하기 위해 발전했지만,
지금은 문서 교정·계약서 검토·번역 검수·법무·QA 등 다양한 분야에서 활용됩니다.
결과는 보통 세 가지 색으로 표시됩니다.
- 초록(추가, +): 새로 추가된 내용
- 빨강(삭제, −): 제거된 내용
- 회색(동일): 변경 없는 내용
색약 사용자를 위해 보통 텍스트 부호(+, −)도 함께 표시하는 것이 표준입니다.
알고리즘: Myers Diff#
대부분의 Diff 도구는 1986년 발표된 Myers Diff Algorithm을 사용합니다.
이 알고리즘은 두 시퀀스(텍스트 라인 또는 단어)의 최장 공통 부분 수열(LCS, Longest Common Subsequence)을 찾아
변경점을 최소로 표시합니다.
Git의 git diff, GitHub PR diff, VS Code의 변경 표시, 그리고 모든 일반 Diff 도구가 이 알고리즘에 기반합니다.
같은 입력에 대해 거의 동일한 결과가 나오는 이유입니다.
활용 사례별 사용법#
1. 계약서·법률 문서 비교#
계약서 초안과 수정본을 비교할 때 가장 유용합니다.
- 원본 텍스트를 왼쪽(Before) 영역에 붙여넣기
- 수정본을 오른쪽(After) 영역에 붙여넣기
- 빨간 부분(삭제)과 초록 부분(추가)을 중점적으로 확인
- 문장 의미 변화 검토(이 부분은 사람의 판단)
팁:
- PDF 계약서는 텍스트로 복사(
Ctrl+A → Ctrl+C)해서 사용 - 스캔본은 OCR 변환(구글 드라이브, Adobe Acrobat OCR) 후 사용
- 원본·수정본 일부만 비교하려면 해당 단락만 잘라 붙여넣기
- 구두점 차이("그러나" vs "그러나,")가 의미 변화를 가져올 수 있음
2. 코드 변경 확인#
개발자가 아닌 경우에도 설정 파일, SQL 쿼리, 스크립트 비교에 활용할 수 있습니다.
Before:
SELECT name, age FROM users WHERE status = 'active'
After:
SELECT name, age, email FROM users
WHERE status = 'active' AND created_at > '2025-01-01'
→ email 컬럼 추가, AND created_at > '2025-01-01' 조건 추가가 시각적으로 표시됩니다.
3. 번역·교정 전후 비교#
교정 전과 후를 비교해 어떤 표현이 바뀌었는지 확인할 때 쓸 수 있습니다.
번역가나 편집자는 클라이언트 피드백 적용 전후를 Diff로 비교해 수정 내역을 명확히 전달할 수 있습니다. 출판 편집·웹 콘텐츠 교정 워크플로의 표준입니다.
4. 설정 파일 비교#
서버 설정, .env 파일, 구성 파일을 환경별로 비교할 때 유용합니다.
개발 환경(development)과 운영 환경(production)의 설정 차이를 빠르게 파악할 수 있습니다.
Before (.env.development):
DB_HOST=localhost
DEBUG=true
LOG_LEVEL=debug
After (.env.production):
DB_HOST=db.example.com
DEBUG=false
LOG_LEVEL=info
SENTRY_DSN=https://...
각 환경별 차이가 한눈에 보여 배포 전 점검에 효과적입니다.
5. API 응답 비교#
API 변경 후 응답 구조가 어떻게 달라졌는지 비교합니다.
Before:
{ "user": { "id": 1, "name": "홍길동" } }
After:
{ "user": { "id": 1, "name": "홍길동", "email": "hong@example.com" } }
리그레션 테스트, API 버전 마이그레이션, 클라이언트 영향 분석에 사용합니다.
6. 학술 논문·이력서 수정 추적#
지도교수 피드백 반영 전후, 이력서 버전 관리, 자기소개서 첨삭 비교 등 글쓰기 작업에 활용합니다.
비교 옵션 이해하기#
줄 단위 vs 단어 단위 vs 문자 단위#
| 모드 | 특징 | 적합한 경우 |
|---|---|---|
| 줄(Line) 단위 | 줄 전체를 하나의 단위로 비교 | 코드, 설정 파일, 로그 |
| 단어(Word) 단위 | 단어 하나하나를 비교 | 일반 문서, 계약서 |
| 문자(Char) 단위 | 글자 하나씩 비교 | 오탈자 교정, 짧은 텍스트 |
문서 비교에는 단어 단위가 가장 읽기 편하고, 코드 비교에는 줄 단위가 적합합니다.
짧은 한 줄 안의 미세한 차이는 문자 단위가 명확합니다.
공백·줄바꿈 무시 옵션#
- Ignore whitespace: 들여쓰기·공백만 다르면 같은 줄로 처리
- Ignore case: 대소문자 차이 무시
- Ignore line endings: CRLF(Windows)와 LF(Unix) 차이 무시
들여쓰기, 공백 정리만 한 경우 공백 차이를 무시하면 실제 내용 변경에 집중할 수 있습니다. 코드 리뷰에서 자주 사용합니다.
컨텍스트 라인#
GitHub PR 등에서 변경된 줄 위·아래 3줄(기본값)을 함께 표시해 변경의 맥락을 보여줍니다.
git diff -U10처럼 라인 수를 늘릴 수 있습니다.
Git Diff 읽는 법#
개발자가 매일 마주하는 Git Diff 형식입니다.
diff --git a/src/app.js b/src/app.js
index 7f3d2f1..8a4e1c0 100644
--- a/src/app.js
+++ b/src/app.js
@@ -10,7 +10,8 @@ function calculateTotal(items) {
let sum = 0;
for (const item of items) {
- sum += item.price;
+ sum += item.price * item.quantity;
}
+ sum *= 1.1; // 부가세 10%
return sum;
}
해석:
--- a/...: 변경 전 파일+++ b/...: 변경 후 파일@@ -10,7 +10,8 @@: 변경된 줄 범위(전: 10번째 줄부터 7줄, 후: 10번째 줄부터 8줄)-: 삭제된 줄(빨강)+: 추가된 줄(초록)- 공백으로 시작: 변경 없는 컨텍스트 라인
GitHub PR 페이지의 "Files changed" 탭이 이 형식을 시각화합니다.
한계와 주의사항#
의미 변화는 직접 판단#
Diff 도구는 텍스트 차이만 보여줄 뿐, 법적·의미적 변화의 중요도를 판단하지 않습니다.
"계약 기간: 1년"이 "계약 기간: 2년"으로 바뀐 것을 발견해도 그 의미는 사람이 판단해야 합니다.
계약서 검토는 항상 변호사·법무 전문가의 최종 검토가 필요합니다.
대용량 텍스트#
수천 줄이 넘는 문서는 브라우저 기반 도구에서 느려질 수 있습니다. 이 경우 명령줄 도구나 전용 소프트웨어를 사용하는 게 좋습니다.
# 명령줄 diff
diff old.txt new.txt
diff -u old.txt new.txt # unified 형식 (읽기 쉬움)
diff -y old.txt new.txt # side-by-side 형식
# 색상 출력
diff --color old.txt new.txt
인코딩 차이#
UTF-8과 EUC-KR로 저장된 같은 한글 텍스트를 비교하면 인코딩 차이로 모든 글자가 다르게 보일 수 있습니다. 비교 전 인코딩을 일치시킵니다.
보이지 않는 문자#
복사·붙여넣기 과정에서 보이지 않는 문자(zero-width space , NBSP , 탭/공백 혼용)가 들어가 의도치 않은 차이가 생기기도 합니다.
이상한 차이가 보이면 hex 뷰어로 확인합니다.
색약 친화 옵션#
남성의 약 8%, 여성의 약 0.4%가 적록 색약입니다. 빨강·초록만으로 구분하는 Diff는 색약 사용자에게 정보 전달이 실패할 수 있습니다.
권장 처리:
- 부호 병행:
+,−텍스트 부호를 색상과 함께 표시 - 굵기·밑줄: 색상에 더해 텍스트 스타일 변화
- 파랑·주황 옵션: 빨강·초록 대신 파랑·주황 색상 옵션 제공
- 고대비 모드: WCAG AAA 7:1 대비
GitHub는 다크모드와 색약 모드에서 부호와 함께 색상을 제공합니다.
자주 묻는 질문#
Q. 워드(.docx) 파일을 직접 비교할 수 있나요?
A. Microsoft Word에 "비교" 기능이 내장되어 있습니다(검토 → 비교).
두 .docx 파일을 선택하면 변경 내역이 추적된 새 문서가 생성됩니다.
일반 텍스트 도구로 비교하려면 텍스트만 복사해 붙여넣어야 합니다.
Q. PDF 두 개를 비교할 수 있나요?
A. Adobe Acrobat Pro에 PDF 비교 기능이 있습니다. 무료 도구로는 PDF에서 텍스트 추출(또는 OCR) 후 텍스트 Diff 도구로 비교합니다.
Q. 이미지의 차이도 Diff로 볼 수 있나요?
A. 텍스트 Diff 도구로는 불가능합니다.
이미지 Diff에는 별도 도구(ImageMagick compare, BeyondCompare, Pixelmator)가 필요합니다.
디자인 작업에서는 Figma의 Version History 비교 기능을 활용합니다.
Q. Diff 결과를 어떻게 동료에게 공유하나요?
A. 공유 방법:
- 결과 화면 캡처 후 이미지로 전달
- Diff 결과 텍스트를 Markdown 코드 블록으로 저장
- GitHub Gist에 업로드(
.diff확장자) - VS Code의 Live Share로 실시간 공유
Q. Diff 알고리즘에 따라 결과가 다를 수 있나요?
A. 미세하게 다를 수 있습니다.
Myers 알고리즘이 표준이지만,
같은 변경을 다르게 표시할 수 있습니다(예: 한 블록 이동을 "삭제+추가"로 표시 vs "이동" 단위로 표시).
Git은 --patience, --histogram 등 다른 알고리즘 옵션을 제공합니다.
Q. 두 코드의 의미가 같은지(리팩토링 검증) Diff로 확인 가능한가요?
A. 텍스트 Diff는 외형 차이만 보여줍니다.
의미 동등성은 단위 테스트, 정적 분석 도구(SonarQube),
또는 AST(Abstract Syntax Tree) 비교 도구(semantic-diff, ast-diff-tool)가 필요합니다.
Q. 큰 데이터(JSON·CSV) 차이를 보려면?
A. 일반 텍스트 Diff로도 가능하지만, 데이터 전용 도구가 더 좋습니다.
- JSON:
jd,jsondiffpatch - CSV:
csv-diff(Python),csvdiff - 데이터베이스:
pgdiff,mongodiff
텍스트 비교(Diff) 도구 활용#
텍스트 비교 도구에 두 텍스트를 붙여넣으면 줄 단위·단어 단위 차이를 색상으로 표시합니다.
추가·삭제 부호와 함께 색약 친화 옵션을 지원하며, 결과를 Markdown 형식으로 복사할 수 있습니다.
텍스트 작업이 더 필요하다면 글자 수 세기 가이드에서 분량 관리를,
대소문자 변환 가이드에서 명명 규칙 변환을,
CSV ↔ JSON 변환 가이드에서 데이터 형식 변환을 확인할 수 있습니다.