텍스트 비교, 초록·빨강·회색 읽는 법

두 버전의 글이나 코드를 나란히 놓고 "어느 줄이 바뀌었나"를 눈으로 찾는 건 생각보다 실수가 잦습니다. 사람 눈은 비슷한 줄을 같은 줄로 착각하기 쉽기 때문입니다.

줄 단위 비교(diff)는 이 작업을 기계적으로 해서, 추가된 줄은 초록, 삭제된 줄은 빨강, 그대로인 줄은 회색으로 나눠 보여 줍니다. 이 글은 어느 버전이 옳은지가 아니라, 그 결과를 정확히 읽는 법을 계산 원리부터 풀어 설명합니다.

요약 ① diff는 먼저 두 글에서 순서를 지키며 최대한 겹치는 공통 줄(LCS)을 찾고, 남은 줄을 추가·삭제로 나눕니다. ② 초록(+)은 변경본에만 있는 줄, 빨강(−)은 원본에만 있는 줄, 회색은 양쪽에 똑같이 있는 줄입니다. ③ 비교 단위가 '줄'이라, 한 줄 안의 사소한 수정도 그 줄 전체가 '삭제 후 추가'로 잡힙니다.

"어디가 바뀌었지"를 눈으로 찾다 놓치는 순간

동료가 공지문이나 계약서 개정본을 보내면서 "두세 군데 고쳤어요"라고만 말합니다. 원본과 새 버전을 나란히 띄워놓고 위에서부터 읽어 내려가며 다른 곳을 찾습니다.

문제는 사람 눈이 비슷한 줄을 같은 줄로 착각한다는 점입니다. 앞부분 몇 글자가 같으면 "여긴 안 바뀌었네" 하고 넘어가는데, 정작 뒤쪽 날짜나 금액 한 곳만 바뀌어 있는 경우가 많습니다. 긴 문서일수록 이런 누락이 늘어납니다.

코드나 설정 파일은 더 예민합니다. 띄어쓰기 하나, 세미콜론 하나 차이로 동작이 달라지는데, 그런 미세한 변화는 눈으로 훑어서는 거의 잡히지 않습니다.

그래서 필요한 것이 "어느 줄이 추가·삭제·그대로인지"를 기계적으로 판정해 색으로 보여 주는 줄 단위 비교입니다.

도구 없이 직접 줄 단위로 비교하는 법

diff는 마법이 아니라 정해진 규칙을 따르는 계산입니다. 원리만 알면 짧은 글은 손으로도 똑같이 할 수 있습니다.

핵심은 두 단계입니다. 먼저 양쪽에 순서를 지키며 똑같이 등장하는 줄들을 최대한 길게 찾아냅니다. 이걸 최장 공통 부분수열(LCS)이라고 부릅니다. 그다음 이 공통 줄에 끼지 못한 나머지를, 원본에만 있으면 삭제, 변경본에만 있으면 추가로 표시합니다.

예를 들어 원본과 변경본이 이렇다고 해봅시다.

[원본]        [변경본]
사과          사과
바나나        딸기
포도          포도

양쪽에 순서대로 똑같이 나오는 줄은 '사과'와 '포도'입니다. 이 둘이 공통 줄(회색)입니다. 남은 '바나나'는 원본에만 있으니 삭제(빨강 −), '딸기'는 변경본에만 있으니 추가(초록 +)입니다.

결과를 순서대로 이으면 이렇게 됩니다.

  사과        (동일)
- 바나나      (삭제)
+ 딸기        (추가)
  포도        (동일)

요약하면 추가 1줄, 삭제 1줄, 동일 2줄입니다. 이것이 도구가 화면 위에 보여 주는 숫자와 색의 정체입니다.

명령어에 익숙하다면 같은 일을 표준 도구로도 할 수 있습니다. macOS·리눅스라면 두 파일을 만들어 diff 원본.txt 변경본.txt, 깃 저장소가 아니어도 git diff --no-index 원본.txt 변경본.txt를 쓰면 됩니다. 이들 diff 계열 도구도 공통 줄을 최대한 맞춘 뒤 나머지를 +/−로 표시하는, 같은 원리로 동작합니다.

다만 파일을 만들고 명령어를 치는 게 번거롭고, 색으로 구분된 결과를 한눈에 보기엔 웹 화면이 편합니다.

저희 도구로 확인하기.

텍스트 비교 (diff)

설치·회원가입 없이 두 텍스트를 붙여넣으면 브라우저 안에서 바로 줄 단위로 비교합니다. 입력한 내용은 서버로 전송되지 않습니다.

결과를 읽을 때 자주 하는 오해

가장 흔한 오해는 색을 '옳고 그름'으로 읽는 것입니다. 초록과 빨강은 어느 줄이 어느 쪽에 있는지를 표시할 뿐, 어느 버전이 맞다는 뜻이 아닙니다.

오해실제
단어가 바뀌면 그 단어만 색이 칠해진다줄 단위 비교라 바뀐 줄 '전체'가 삭제 후 추가로 표시됩니다
빨강은 틀린 내용, 초록은 맞는 내용빨강은 원본에만, 초록은 변경본에만 있는 줄일 뿐 옳고 그름과 무관합니다
줄 순서만 바꾸면 '동일'로 남는다순서를 유지해 맞추므로, 이동한 줄은 원위치에서 삭제·새 위치에서 추가로 잡힙니다
들여쓰기·공백 차이는 무시된다줄 내용이 조금이라도 다르면 다른 줄로 취급됩니다
아무리 긴 문서도 비교된다양쪽 줄 수의 곱이 400만을 넘으면 비교 대신 안내 문구가 나옵니다

특히 표의 첫 항목, 한 줄 안의 작은 수정이 헷갈립니다. "재고 3개"를 "재고 5개"로 고치면, diff는 '재고 3개'를 삭제로, '재고 5개'를 추가로 각각 한 줄씩 잡습니다. 숫자 하나만 바뀌었어도 그 줄은 공통 줄 목록에 들지 못하기 때문입니다.

이건 오류가 아니라 줄 단위 비교의 정의 그대로입니다. 단어 단위로 어느 글자가 바뀌었는지까지 보고 싶다면, 그건 다른 종류의 비교라는 점을 알고 결과를 읽어야 합니다.

정리

  • diff는 먼저 순서를 지키며 겹치는 공통 줄(LCS)을 찾고, 나머지를 추가·삭제로 나눕니다.
  • 초록(+)은 변경본에만, 빨강(−)은 원본에만, 회색은 양쪽에 똑같이 있는 줄입니다. 색은 옳고 그름이 아닙니다.
  • 비교 단위가 '줄'이라, 한 글자만 고쳐도 그 줄 전체가 '삭제 1줄 + 추가 1줄'로 표시됩니다.
  • 들여쓰기·공백만 달라도 다른 줄로 잡히고, 줄 순서를 바꾸면 이동한 줄이 추가·삭제로 나타납니다.
  • 양쪽 줄 수의 곱이 400만을 넘으면 비교 대신 안내가 나오므로, 아주 긴 문서는 나눠서 비교합니다.
텍스트 비교 (diff)

설치·회원가입 없이 두 텍스트를 붙여넣으면 브라우저 안에서 바로 줄 단위로 비교합니다. 입력한 내용은 서버로 전송되지 않습니다.

자주 묻는 질문

한 글자만 고쳤는데 왜 줄 전체가 빨강·초록으로 뜨나요?

이 비교가 '줄' 단위이기 때문입니다. diff는 양쪽에 똑같이 있는 줄만 공통(회색)으로 묶는데, 한 글자라도 다른 줄은 '똑같은 줄'이 아니므로 공통에 들지 못합니다. 그래서 원본의 그 줄은 삭제(빨강), 변경본의 그 줄은 추가(초록)로 각각 한 줄씩 표시됩니다. 단어나 글자 단위로 바뀐 부분만 강조하는 방식과는 다릅니다.

초록과 빨강 중 어느 쪽이 '맞는' 내용인가요?

색만으로는 알 수 없습니다. 빨강은 왼쪽(원본)에만 있던 줄, 초록은 오른쪽(변경본)에만 있는 줄이라는 위치 정보일 뿐, 어느 쪽이 옳다는 판단은 담겨 있지 않습니다. 무엇이 맞는지는 내용을 보고 사람이 정합니다. 도구는 "무엇이 달라졌는지"까지만 보여 줍니다.

줄 순서만 바꿨는데 왜 추가·삭제로 나오나요?

diff가 공통 줄을 찾을 때 '순서'를 유지하기 때문입니다. 문단을 아래로 옮기면, 원래 자리에서는 그 줄이 사라졌으니 삭제로, 새 자리에서는 없던 줄이 생겼으니 추가로 잡힙니다. 내용은 그대로여도 위치가 달라지면 이렇게 표시될 수 있습니다.

아주 긴 문서를 붙여넣으니 비교가 안 됩니다.

양쪽 줄 수를 곱한 값이 400만을 넘으면, 계산량이 너무 커져 성능을 위해 비교 대신 안내 문구가 나옵니다. 예를 들어 양쪽이 각각 2,500줄이면 곱이 625만이라 안내가 표시됩니다. 이럴 때는 장·절 단위로 문서를 나눠 부분씩 비교하면 됩니다.

가격 보기카톡 무료 상담