텍스트 비교 (차이점 검사기)

두 텍스트를 붙여넣으면 어떤 줄이 추가되었는지, 삭제되었는지, 그대로인지 정확히 확인할 수 있습니다 — 브라우저에서 바로 확인하는 깔끔한 줄 단위 비교 도구입니다.

조회수 1,141회

비교 작동 방식

이 도구는 두 텍스트를 줄 단위로 나눈 뒤 최장 공통 부분열(LCS) 알고리즘을 실행합니다 — Git과 코드 편집기가 "diff" 화면에서 사용하는 것과 동일한 핵심 로직입니다. 줄을 위치별로 비교하는 대신(1번째 줄과 1번째 줄, 2번째 줄과 2번째 줄처럼), LCS는 두 문서에 동일한 순서로 나타나는 가장 긴 줄의 시퀀스를 찾아냅니다. 이 공통 시퀀스 안에 있는 모든 것은 변경 없음으로 표시되고, 원본에서 남는 부분은 삭제됨으로, 수정본에서 남는 부분은 추가됨으로 표시됩니다.

이 구분이 중요한 이유는 위치 기반의 단순 비교는 문서 상단 근처에서 단 한 줄만 삽입되거나 삭제되어도 무너지기 때문입니다 — 실제로는 그 한 줄만 바뀌었을 뿐인데도, 그 뒤의 모든 줄이 달라진 것처럼 보이게 됩니다. 구체적인 예: 원본이 "A / B / C / D"이고 수정본이 "A / X / B / C / D"라면, 단순한 줄 단위 비교는 B, C, D가 모두 한 칸씩 밀렸으니 전부 변경된 것으로 표시할 것입니다. 반면 LCS는 A, B, C, D가 두 텍스트에서 여전히 같은 상대적 순서로 나타난다는 것을 인식하므로, 새로 추가된 줄 X 하나만 추가로 정확히 보고하고 나머지는 변경 없음으로 표시합니다.

알아둘 점

  • 단어 단위가 아닌 줄 단위: 비교는 줄 전체를 대상으로 이루어집니다. 긴 줄 안의 단어 하나만 바꿔도 그 줄 전체가 삭제된 줄 하나와 추가된 줄 하나로 표시됩니다 — 코드 및 문서 비교에서 결과를 훑어보기 쉽게 유지하기 위한 표준 관행입니다.
  • 공백과 대소문자도 구분됩니다: 끝에 붙은 공백 하나나 다른 대소문자만으로도 그렇지 않으면 동일한 두 줄이 서로 다르게 인식됩니다 — 원하는 비교 결과가 아니라면 먼저 텍스트를 정규화하는 것이 좋습니다.
  • 순서가 바뀐 내용도 올바르게 매칭됩니다: LCS는 정확한 위치가 아니라 가장 긴 공통 시퀀스를 찾기 때문에, 다른 곳으로 옮겨졌지만 내부 줄 순서는 유지된 문단은 삭제 후 추가 쌍이 아니라 변경 없음으로 인식됩니다.
  • 대용량 문서도 문제없이 처리됩니다: 이 알고리즘은 수천 줄도 무리 없이 처리합니다. 매우 큰 파일(수만 줄)의 경우 브라우저가 정렬을 계산하는 데 조금 더 시간이 걸릴 수 있지만, 무엇도 업로드되지 않으며 계산은 항상 로컬에서 이루어집니다.

이와 동일한 기법은 프로그래밍 밖에서도 "변경 내용 추적" 방식의 검토를 뒷받침합니다 — 계약서 조항의 두 초안을 비교하는 법무팀, 공동 저자가 한 장에서 정확히 무엇을 다시 썼는지 확인하는 편집자, 또는 문서의 두 현지화 버전 사이에서 어떤 문장이 바뀌었는지 확인하는 번역가처럼 말입니다. 이 알고리즘은 줄의 의미가 아니라 순서만을 신경 쓰기 때문에, 소스 코드, 설정 파일, 시, 또는 일반 텍스트로 내보낸 스프레드시트에서도 동일하게 잘 작동합니다.

자주 묻는 질문

단어 단위로 비교하나요, 줄 단위로 비교하나요?

줄 단위입니다 — 대부분의 편집기와 버전 관리 도구가 파일을 다루는 방식과 일치하기 때문에 문서와 코드의 표준적인 방식입니다. 그래서 수정된 줄은 단어 단위로 흩어진 강조 표시 대신 삭제된 줄 하나와 추가된 줄 하나로 표시되며, 이는 긴 문서에서도 결과를 훑어보기 쉽게 유지해 줍니다.

크기 제한이 있나요?

이 알고리즘은 수천 줄도 무리 없이 처리하며, 이는 대부분의 계약서, 기사, 소스 파일을 충분히 감당합니다. 매우 큰 파일(수만 줄)의 경우 브라우저가 정렬을 계산하는 데 조금 더 시간이 걸릴 수 있지만, 어느 경우든 작업은 전적으로 사용자의 기기 안에 남아 있으므로 기다려야 할 업로드 지연은 없습니다.

제 문서가 업로드되나요?

아니요. 두 텍스트는 자바스크립트를 사용해 브라우저 안에서 로컬로 비교되며, 페이지를 닫거나 새로 고치는 즉시 입력값과 결과 모두 사라집니다 — 어떤 것도 저장되거나 전송되지 않습니다.

이동되거나 순서가 바뀐 줄은 어떻게 처리되나요?

LCS 알고리즘은 위치와 상관없이 두 텍스트에 공통으로 나타나는 가장 긴 시퀀스를 매칭하기 때문에, 다른 곳으로 옮겨졌지만 내부 줄 순서는 유지된 문단은 잘못된 삭제 후 추가 쌍이 아니라 변경 없음으로 표시됩니다. 실제로 내용이나 상대적 위치가 다른 줄만 표시됩니다.

단어 하나만 바꿨는데 왜 두 줄이 변경된 것으로 표시되나요?

이 비교는 개별 단어가 아니라 줄 전체를 비교합니다. 줄 안의 단어 하나를 수정하면 그 줄 전체가 삭제된 줄 하나(이전 버전)와 추가된 줄 하나(새 버전)로 계산됩니다 — Git이나 코드 리뷰 도구에서 볼 수 있는 것과 동일한 동작이며, 줄 안의 수정이 아무리 작아도 시각적 결과를 일관되게 유지해 줍니다.

댓글

아직 댓글이 없습니다 — 첫 댓글을 남겨보세요!

비슷한 도구