본문 바로가기

두 텍스트 비교

두 버전을 붙여 넣으면 무엇이 바뀌었는지 단어 단위까지 나란히 정확하게 보여 줍니다. git이 쓰는 것과 같은 알고리즘이며, 줄 하나만 추가해도 무너지는 줄 단위 짐작이 아닙니다.

  • 저장되지 않음
  • 대기열 없음, 기다림 없음
  • 회원가입 없음, 워터마크 없음
보기

사용 방법

1

두 버전 붙여 넣기

왼쪽에 원본, 오른쪽에 새 버전을 넣으세요. 파일 두 개를 끌어다 놓아도 됩니다.

2

차이점 확인

추가, 삭제, 변경된 줄이 표시되고, 변경된 줄 안에서는 바뀐 단어가 정확히 강조됩니다.

3

중요하지 않은 차이 무시

대소문자, 공백, 빈 줄을 각각 무시할 수 있으며, 그 때문에만 두 텍스트가 일치하는 경우에는 페이지가 알려 드립니다.

무엇을 같은 줄로 보는가

비교는 줄 자체가 아니라 키를 대상으로 합니다. 켜 둔 무시 옵션에 따라 각 줄을 키로 줄이고, 그 키들로 diff를 실행하며, 화면에 보이는 것은 언제나 원본 텍스트입니다. 그래서 “대소문자 무시”를 켜면 어떤 줄이 일치하는지는 달라지지만, 표시되는 글자는 하나도 바뀌지 않습니다. 공백 옵션은 두 가지이며, 이름보다 차이가 큽니다. 하나는 줄 양 끝만 잘라 내고, 다른 하나는 먼저 연속된 공백과 탭을 공백 하나로 합친 뒤 양 끝을 잘라 냅니다. 둘 다 공백을 완전히 없애지는 않으며, 합치는 옵션은 일반 공백과 탭만 찾으므로 줄 중간의 전각 공백이나 줄바꿈 없는 공백은 그대로 남아 차이로 표시됩니다.

빈 줄 무시는 아무도 말해 주지 않는 결과가 따르는 옵션입니다. 비교를 시작하기 전에 빈 줄을 제거하므로, 결과 옆의 줄 번호는 남은 줄만 세고 원본 파일의 줄 번호와 맞지 않게 됩니다. 이 옵션을 끄면 정확히 일치합니다. 변경된 줄 안의 단어 단위 강조는 대소문자 무시 설정만 따르고 다른 설정은 따르지 않습니다. 공백 옵션은 여기에 적용되지 않으므로, 다른 이유로 바뀐 줄 안의 공백 차이도 여전히 변경으로 칠해집니다.

복사할 수 있는 결과는 읽는 데 필요한 모든 면에서 통합 diff입니다. 두 파일 머리글, 빼기 줄, 더하기 줄, 변경마다 앞뒤 세 줄의 문맥이 있습니다. 다만 믿고 쓰기 전에 알아 둘 예외가 하나 있습니다. 헝크 표시에 줄 범위가 없으므로 버그 리포트, 코드 리뷰 댓글, 이메일용이며, patch와 git apply 명령은 이를 거부합니다. 읽을 것이 아니라 적용할 것이 필요하다면 git으로 만드세요.

다른 작업이 필요할 때

구조화된 형식은 줄 단위로 비교하면 결과가 나쁘며, 그 실패는 미묘하지 않고 요란합니다. 키 순서만 다른 두 JSON 문서나 열 하나가 이동한 두 CSV는 아무것도 알려 주지 않는 변경 사항 더미로 돌아옵니다. 구조를 이해하는 도구로 비교하세요. 두 JSON 파일의 키를 먼저 정렬한 뒤 결과를 비교하거나, CSV를 행과 열로 비교해서 모든 줄이 바뀌었다고 하지 않고 열이 이동했다고 알려 주는 daff를 쓰세요.

두 디렉터리, 또는 저장소 역사의 두 시점을 비교하는 것은 이 페이지가 아니라 git이 답할 문제입니다. 그리고 문단의 줄바꿈 위치가 다시 조정된 글이라면 줄 단위 보기는 애초에 맞지 않는 단위입니다. git diff --word-diff는 줄바꿈 위치를 무시하고 이동한 단어만 보여 주며, 문서가 다시 흘려 배치되었을 때 실제로 원했던 비교가 바로 이것입니다.

자주 묻는 질문

제 문서가 어딘가에 저장되나요?

아니요. 아무것도 저장하지 않고 어떤 요청도 보내지 않으며, 네트워크 연결을 끊어도 계속 작동합니다. 텍스트에서는 이 점이 생각보다 중요합니다. 사람들이 온라인 도구에 붙여 넣는 것은 미발표 원고, 법률 문서 초안, 학생 과제, 내부 문서이기 때문입니다. 계약서나 초안의 두 버전을 비교하는 도구라면 이것이 핵심입니다.

줄 단위 비교보다 왜 나은가요?

줄을 하나씩 맞춰 보는 방식은 무언가가 이동하는 순간 무너지기 때문입니다. 파일 맨 위에 줄 하나를 추가하면 그 아래 모든 줄의 위치가 바뀌므로, 단순한 비교는 문서 전체가 바뀌었다고 보고합니다. 이는 쓸모가 없습니다. 이 도구는 git diff와 diff(1)에 쓰이는 Myers 알고리즘을 사용하며, 한 텍스트를 다른 텍스트로 바꾸는 가장 작은 삽입·삭제 조합을 찾습니다. 맨 위에 줄 하나를 추가하면 추가된 줄 하나로 보고합니다.

줄뿐 아니라 어떤 단어가 바뀌었는지도 보여 주나요?

네. 줄이 추가되거나 삭제된 것이 아니라 수정된 경우에는 단어 단위로 다시 비교해 실제로 바뀐 단어만 강조합니다. 긴 문단에서 누군가 세 단어를 바꿨다면, 온통 색칠된 화면이 아니라 세 단어만 보입니다.

“무시” 옵션은 무슨 역할을 하나요?

어떤 줄을 같은 줄로 볼지를 바꿉니다. 대소문자, 공백, 빈 줄을 무시하면 서식을 다시 맞춘 코드나 다시 붙여 넣은 텍스트를 비교할 때 유용합니다. 중요한 점이 하나 있습니다. 두 텍스트가 오직 무언가를 무시했기 때문에 일치한다면, 페이지는 똑같다고 보고하지 않고 그 사실을 분명히 알려 드립니다. “똑같다”와 “대소문자를 무시하면 똑같다”는 서로 다른 사실이며, 이 둘을 혼동하면 바뀌지 않았다고 믿은 파일을 그대로 내보내게 됩니다.

결과를 패치로 받을 수 있나요?

네. 비교 결과를 git과 이메일 패치가 쓰는 것과 같은 형식인 통합 diff로 복사할 수 있으며, 변경 부분마다 앞뒤로 몇 줄의 문맥이 붙습니다. 버그 리포트에 붙여 넣기 좋은 형식입니다.

크기 제한이 있나요?

정해진 크기 제한은 없고 사용 가능한 메모리가 한도입니다. 긴 문서 두 개도 빠르게 비교되는데, 똑같은 앞부분과 뒷부분을 먼저 맞춰 건너뛴 뒤 본 작업을 시작하기 때문입니다. 수천 곳에서 따로따로 다른 두 텍스트는 탭을 멈추게 하는 대신 설명과 함께 거부됩니다. 그렇게 큰 diff는 어차피 읽을 수 없습니다.

워드나 PDF 파일도 비교할 수 있나요?

직접은 안 됩니다. 먼저 텍스트로 변환하세요. [PDF 텍스트 추출](pdf-to-text)과 [DOCX TXT 변환](docx-to-txt) 도구가 바로 그 일을 하며, 결과를 여기에 붙여 넣으면 됩니다.

참고: 비교는 차이 8,000개까지만 처리합니다. 그 이상은 알고리즘 비용이 급격히 늘어 탭이 멈출 수 있으므로, 페이지가 멈춰 버리는 대신 중단하고 그 사실을 알려 드립니다. 서로 전혀 관계없는 두 문서는 금방 이 한도에 닿지만, 같은 파일의 두 버전을 비교할 때는 거의 닿지 않습니다.

내 웹사이트에 이 도구 넣기

블로그, 수업 페이지, 도움말 글 어디에나 무료로 넣을 수 있습니다. 코드 한 줄만 붙여 넣으면 방문자가 페이지에서 바로 사용할 수 있습니다.