두 버전의 문서 중 무엇이 바뀌었는지 확인하는 일은 코드 리뷰뿐 아니라 계약서 검토, 번역 검수, 설정 파일 대조에서도 매일 일어납니다. 눈으로 훑으면 공백 하나, 숫자 한 자리 차이를 놓치기 쉽습니다.
이 도구는 두 텍스트를 문자·단어·줄 단위로 비교해 추가된 부분은 녹색, 삭제된 부분은 빨간색으로 표시합니다. 좌우 분할 뷰와 통합 뷰를 오갈 수 있고, 공백이나 대소문자 차이를 무시하는 옵션도 제공합니다. 비교 결과는 표준 unified diff 형식(.patch)으로 내려받을 수 있어 그대로 코드 리뷰 도구에 첨부할 수 있습니다.
사용 방법
- 두 텍스트 붙여넣기 — 왼쪽에 원본, 오른쪽에 변경본을 넣습니다. 순서를 잘못 넣었다면 좌우 교체 버튼으로 바꿀 수 있습니다.
- 비교 단위 선택 — 줄 단위는 코드나 설정 파일에, 단어 단위는 문서나 번역 검수에, 문자 단위는 짧은 문자열이나 숫자 대조에 적합합니다. 단위를 바꾸면 결과가 즉시 다시 계산됩니다.
- 노이즈 걸러내기 — 들여쓰기만 바뀐 경우처럼 실질적 변경이 아닌 차이가 많다면 공백 무시를 켭니다. 대소문자 표기만 바꾼 경우에는 대소문자 무시를 켜면 실제 내용 변화만 남습니다.
- 결과 저장 — 하단 통계에서 추가·삭제·유지된 양을 확인하고, 필요하면 patch 파일로 내려받습니다. unified diff 형식이므로
git apply로 적용하거나 리뷰 시스템에 첨부할 수 있습니다.
자주 묻는 질문
붙여넣은 코드가 외부로 전송되나요?
전송되지 않습니다. 비교 알고리즘이 브라우저 안에서 실행되며 네트워크 요청이 발생하지 않습니다.
사내 소스 코드나 계약서 초안처럼 외부에 노출되면 안 되는 문서를 다루는 경우가 많은 도구라, 처음부터 서버를 두지 않는 구조로 만들었습니다. 개발자 도구의 네트워크 탭을 켜 두고 사용해 보면 확인할 수 있습니다.
줄 단위와 단어 단위 중 무엇을 써야 하나요?
바뀐 내용의 성격에 따라 다릅니다.
코드는 줄 단위가 기본입니다. 한 줄 안에서 변수명만 바뀌어도 그 줄 전체가 삭제·추가로 표시되지만, 이것이 git이나 코드 리뷰 도구가 보여 주는 방식과 같아 익숙합니다. 산문은 줄바꿈 위치가 자주 바뀌므로 줄 단위로 보면 문단 전체가 변경으로 표시되어 쓸모가 없습니다. 이때는 단어 단위가 실제 수정 지점을 정확히 짚어 줍니다.
긴 파일을 넣으면 느려집니다.
diff 계산은 두 입력의 길이에 대해 제곱에 가까운 비용이 들 수 있습니다. 특히 문자 단위 비교는 입력이 길어질수록 급격히 무거워집니다.
수천 줄짜리 파일을 비교해야 한다면 먼저 줄 단위로 전환하고, 그래도 느리면 관심 있는 구간만 잘라서 넣으세요. 파일 전체를 정기적으로 비교해야 하는 작업이라면 git diff 나 diff -u 같은 명령줄 도구가 훨씬 효율적입니다.
알아두면 좋은 개념
diff 알고리즘의 기본 아이디어
대부분의 diff 도구는 두 시퀀스의 최장 공통 부분수열(LCS)을 찾는 방식으로 동작합니다. 공통 부분을 최대한 길게 잡으면 나머지가 자연스럽게 삭제·추가로 남기 때문입니다.
실무에서 많이 쓰이는 Myers 알고리즘은 이 문제를 그래프 최단 경로로 바꿔 풀어 실용적인 속도를 냅니다. 다만 '가장 짧은 편집 스크립트'가 항상 사람이 보기에 자연스러운 결과는 아니어서, git의 --histogram 이나 --patience 처럼 사람에게 읽기 좋은 결과를 우선하는 변형 알고리즘도 있습니다.
unified diff 형식 읽기
.patch 파일에서 @@ -12,7 +12,9 @@ 는 헝크(hunk) 헤더로, 원본의 12번째 줄부터 7줄이 변경본의 12번째 줄부터 9줄로 바뀐다는 뜻입니다. 이어지는 줄에서 - 는 삭제, + 는 추가, 공백으로 시작하면 변경 없이 문맥으로 포함된 줄입니다.
문맥 줄이 기본 3줄 포함되는 이유는 패치를 적용할 위치를 찾기 위해서입니다. 덕분에 원본이 조금 달라져도 패치가 적용될 수 있습니다.
공백 차이가 만드는 diff 노이즈
탭과 스페이스가 섞이거나 에디터가 자동으로 줄 끝 공백을 제거하면, 실제 로직은 그대로인데도 파일 전체가 변경으로 표시됩니다. 리뷰어가 진짜 변경을 찾지 못하는 대표적 원인입니다.
예방책은 프로젝트에 .editorconfig 와 포매터(Prettier·Black 등)를 두고 CI에서 검사하는 것입니다. 윈도우와 유닉스의 줄바꿈 차이(CRLF vs LF)도 같은 문제를 만드는데, git의 core.autocrlf 설정이나 .gitattributes 로 통일할 수 있습니다.