JAY Project
JAY Project

분명 똑같은데 왜 다르다고 할까? — 텍스트 비교(Diff)에서 눈에 안 보이는 3가지 함정

2026-11-08| Jay

코드나 계약서, 설정 파일의 변경 사항을 확인할 때 두 텍스트를 나란히 올려놓고 비교하는 Diff 도구를 자주 사용합니다. 그런데 눈으로 볼 때는 분명 양쪽 문장이 완전히 똑같은데, 도구가 "두 문서가 완전히 다르다"며 모든 줄을 빨갛고 초록색으로 칠해버려 당황했던 경험이 한 번쯤 있으실 겁니다.

글자 모양은 같아도 컴퓨터가 문서를 해석하는 보이지 않는 바이트(Byte) 단위의 규칙이 다르기 때문입니다. 텍스트 비교 시 가장 흔하게 마주치는 3가지 함정과 그 해결책을 정리해 보았습니다.


1. 눈에 안 보이는 줄바꿈: CRLF vs LF

가장 대표적인 원인은 운영체제마다 줄바꿈(엔터)을 표현하는 방식이 다르기 때문입니다.

  • LF (\n, Line Feed): macOS, Linux, Git 기본 환경에서 사용합니다. (1바이트: 0x0A)
  • CRLF (\r\n, Carriage Return + Line Feed): Windows 환경에서 전통적으로 사용합니다. (2바이트: 0x0D 0x0A)
[눈에 보이는 화면]
Hello World
Next Line

[실제 파일 내부 바이트]
LF 기준:   Hello World\nNext Line
CRLF 기준: Hello World\r\nNext Line

타자기 시절 캐리지(활자 뭉치)를 맨 앞으로 되돌리고(CR) 종이를 한 줄 올리던(LF) 방식에서 유래한 이 차이 때문에, 윈도우 메모장에서 작성한 텍스트를 맥이나 리눅스 환경의 파일과 비교하면 모든 줄의 끝에 \r이 추가된 것으로 인식되어 전체 문서가 변경된 것으로 표시됩니다.

텍스트 비교 도구에서 "공백 및 줄바꿈 차이 무시(Ignore Whitespace/Line Break)" 옵션을 켜면 이러한 OS 간 줄바꿈 차이를 정규화하여 실제 텍스트 내용의 변화만 깔끔하게 걸러낼 수 있습니다.


2. 띄어쓰기 모양을 한 '유령 문자': NBSP와 공백

웹페이지, 노션, 슬랙, PDF 등에서 텍스트를 복사해 올 때 발생하는 또 다른 복병은 특수 공백 문자입니다.

우리가 스페이스바로 입력하는 표준 공백은 아스키(ASCII) 32번(0x20) 일반 공백(Space)입니다. 하지만 웹 브라우저나 문서 편집기는 줄 끝에서 단어가 어색하게 끊겨 분리되는 것을 막기 위해 **줄 바꿈 없는 공백(NBSP, Non-Breaking Space, \u00A0)**이나 **폭 없는 공백(Zero-Width Space, \u200B)**을 자동으로 삽입합니다.

공백 종류 유니코드 화면 표시 복사 시 문제
일반 공백 (Space) U+0020 표준 띄어쓰기
줄 바꿈 없는 공백 (NBSP) U+00A0 눈에는 일반 공백과 똑같으나 바이트 값이 달라 불일치 발생
폭 없는 공백 (ZWSP) U+200B 없음 눈에 전혀 안 보이지만 커서 이동 시 걸리고 diff에서 차이로 감지

눈으로 보면 두 문장이 완벽하게 동일한 간격의 공백을 가진 것처럼 보여도, diff 엔진 입장에서는 0x20과 0xC2 0xA0(UTF-8 NBSP)이라는 완전히 다른 문자로 판단합니다. 이 역시 공백 정규화 옵션을 적용하거나, 보이지 않는 제어 문자를 시각화해 주는 전문 비교 도구를 이용해야 원인을 바로 짚어낼 수 있습니다.


3. 줄 단위(Line) vs 단어 단위(Word) Diff의 차이

기본적인 diff 도구는 줄(Line) 단위로 차이점을 판별합니다. 500단어로 이루어진 긴 문단에서 쉼표(,) 하나나 마침표 하나만 수정해도, 줄 단위 비교에서는 문단 전체 500단어가 통째로 삭제된 뒤 새로 작성된 것처럼 붉은색과 녹색 블록으로 표시됩니다.

반면 최신 diff 도구는 줄 단위로 변경된 영역을 먼저 찾은 뒤, 그 줄 안에서 **어떤 단어와 문자가 구체적으로 바뀌었는지 단어 단위(Word-level diff)**로 세밀하게 하이라이트해 줍니다. 특히 계약서의 숫자 수정이나 코드의 변수명 변경처럼 미세한 차이를 검토할 때는 단어 단위 하이라이트 기능이 필수적입니다.


4. 컴퓨터는 어떻게 최소한의 차이만 찾아낼까? (Myers 알고리즘)

Git과 대부분의 텍스트 비교 엔진은 1986년 유진 마이어스(Eugene W. Myers)가 발표한 Myers Diff 알고리즘을 사용합니다.

두 텍스트를 하나의 격자 좌표계(Edit Graph)로 모델링하여, 원본 텍스트를 수정본 텍스트로 바꾸기 위해 거쳐야 하는 **가장 짧은 편집 경로(Shortest Edit Script, SES)**를 탐색합니다.

  • 오른쪽 이동: 문자 삭제 (Delete, 빨간색)
  • 아래쪽 이동: 문자 추가 (Insert, 초록색)
  • 대각선 이동: 양쪽 문자가 같아서 그대로 유지 (무료 이동)

대각선으로 최대한 많이 미끄러져 내려갈 수 있는 최적의 경로를 너비 우선 탐색(BFS) 기법으로 찾아내기 때문에, 수천 수만 줄의 긴 텍스트에서도 사람이 읽기 가장 자연스러운 형태로 추가·삭제 블록을 묶어 보여줍니다.


JAY Project 텍스트 비교 도구(Diff Checker)로 안전하게 비교하기

소스 코드, 서버 설정값, 개인정보가 담긴 문서나 계약서 초안을 인터넷에 있는 아무 온라인 diff 웹사이트에 붙여넣는 것은 보안상 큰 위험이 따릅니다. 많은 무료 웹사이트가 입력된 텍스트를 백엔드 서버로 전송해 처리하기 때문입니다.

JAY Project 텍스트 비교 도구(Diff Checker)는 다음 원칙으로 안심하고 사용할 수 있습니다.

  • 100% 클라이언트 브라우저 처리: 입력한 모든 텍스트는 외부 서버로 1바이트도 전송되지 않으며, 사용자 기기의 브라우저 메모리 내에서만 즉각 비교 연산됩니다.
  • 줄 단위 및 단어 단위 동시 강조: 변경된 라인뿐만 아니라 해당 라인 안에서 실제로 바뀐 단어를 시각적으로 바로 짚어줍니다.
  • 공백·대소문자 무시 옵션: 윈도우/맥 간 줄바꿈 차이나 무의미한 들여쓰기 공백 때문에 전체 결과가 오염되는 현상을 원클릭으로 방지합니다.
  • 좌우 분할(Split) 비교 UI: 원본과 수정본을 좌우로 직관적으로 대조하며 복사할 수 있습니다.

복잡한 텍스트의 미세한 차이점을 빠르게 확인해야 할 때, 설치 없이 브라우저에서 안전하게 이용해 보세요.


참고 자료

🚀 JAY Project · 60+ 무료 웹 도구 모음

취미로 만드는 60+ 무료 웹 도구를 한곳에서. 회원가입 없이 즉시 사용, 입력값은 외부로 전송되지 않습니다.