텍스트 비교 도구는 이 버전과 저 버전 사이에 무엇이 바뀌었는지 하나의 질문에 답합니다. 왼쪽에 원본, 오른쪽에 변경본을 붙여 넣거나 양쪽에 파일을 열면 두 텍스트를 줄 단위로 맞춰 줍니다. 추가, 삭제, 변경, 그대로인 줄 수를 세어 주고, 결과는 나란히 보기, 통합 보기, 복사하거나 내려받을 수 있는 패치로 볼 수 있습니다. 설정 파일, JSON·YAML 내보내기, 코드, 계약서 초안, 릴리스 노트에 알맞습니다.
비교는 줄 단위이며, 앞뒤에서 똑같은 줄을 먼저 맞춘 뒤 git diff와 같은 최소 편집 스크립트 방식인 Myers 알고리즘을 씁니다. 삭제된 줄이 추가된 줄로 바뀐 경우에는 둘을 변경된 줄 하나로 묶고 그 안에서 달라진 단어를 강조합니다. 옵션으로 공백이나 대소문자 차이를 무시할 수 있고, 길게 이어지는 같은 줄은 접어서 변경 부분이 눈에 잘 들어오게 합니다.
두 텍스트는 브라우저 탭 안에만 있고 아무것도 업로드되지 않습니다. 두 텍스트를 합쳐 UTF-8 기준 5MiB, 한쪽당 50,000줄까지 비교할 수 있습니다.
사용 방법
원본 텍스트 입력
원본 칸에 이전 버전을 붙여 넣거나 파일을 끌어다 놓거나 파일 열기를 누릅니다. 설정 변경, 코드 수정, 마지막 줄바꿈 없음 예제를 고르면 양쪽이 한 번에 채워집니다.
변경된 텍스트 입력
변경본 칸에 새 버전을 붙여 넣거나 엽니다. 양쪽을 거꾸로 넣었다면 양쪽 바꾸기로 두 칸을 맞바꿉니다.
옵션 설정
차이로 보고 싶지 않다면 공백 무시나 대소문자 무시를 켭니다. "변경 주변의 같은 줄"(없음, 3줄, 10줄, 전체)로 변경 앞뒤에 같은 줄을 얼마나 남길지 정합니다.
차이점 읽기
수치에 추가, 삭제, 변경, 그대로인 줄 수가 나옵니다. 나란히 보기는 두 버전을 줄 번호와 함께 양옆에 놓고, 통합 보기는 삭제와 추가를 한 열에 나열합니다. 바뀐 단어는 강조되고, 접힌 부분은 "같은 줄 N개"로 표시되며, 줄바꿈 없이 끝나는 마지막 줄에는 "파일 끝에 줄바꿈 없음" 표시가 붙습니다.
패치 복사 또는 내려받기
패치 탭은 결과를 git 형식의 통합 diff로 보여 줍니다. 패치 복사를 누르거나 Ctrl+Enter(Mac은 Cmd+Enter)를 누르면 클립보드에 들어가고, 다운로드 버튼은
changes.diff로 저장합니다.
작동 원리
줄을 짝짓는 방식
먼저 두 텍스트의 앞과 뒤에서 똑같은 줄을 맞춥니다. 남은 부분에는 Myers 알고리즘을 적용해 최소 편집 스크립트, 즉 원본을 변경본으로 바꾸는 가장 적은 수의 줄 삭제와 추가를 찾고 나머지 줄은 그대로 둡니다. git이 기본으로 쓰는 알고리즘입니다.
편집이 몰린 구간 안에서는 삭제된 줄과 추가된 줄을 순서대로 짝짓습니다. 짝 하나는 변경 1줄로 세고 단어 강조와 함께 보여 주며, 한쪽이 더 많아 남는 줄은 삭제나 추가로 셉니다. 줄 편집이 2,000개를 넘으면 최소 스크립트 탐색을 멈추고 달라진 구간 전체를 교체된 한 덩어리로 보여 주며, 그렇다는 안내가 함께 나옵니다.
무엇이 다른 것으로 취급되는가
기본 설정에서는 모든 문자가 일치해야 같은 줄입니다. 공백 무시를 켜면 연속된 공백·탭을 공백 하나로 바꾸고 양 끝을 잘라 낸 뒤 비교하며, 대소문자 무시를 켜면 소문자로 바꿔 비교합니다. 줄 끝은 가장 먼저 통일하므로 CRLF와 LF 때문에 줄이 달라지는 일은 없습니다.
| 차이 | 변경으로 보고되는가 |
|---|---|
| 줄 안의 단어가 다름 | 예, 바뀐 단어가 강조된 변경 1줄 |
| 줄 끝 공백 | 예, 공백 무시를 켜지 않았다면 |
| 단어 사이의 탭과 공백 | 예, 공백 무시를 켜지 않았다면 |
a b와 ab | 예, 공백 무시를 켜도 다름 |
| Hello와 hello | 예, 대소문자 무시를 켜지 않았다면 |
| CRLF와 LF | 아니요, 다른 차이가 없으면 줄 끝만 다르다고 알려 줌 |
| 마지막 줄바꿈이 한쪽에만 있음 | 예, 마지막 줄이 변경되고 파일 끝에 줄바꿈 없음 표시가 붙음 |
| 같은 줄의 순서만 다름 | 예, 삭제와 추가로 보고됨 |
변경된 줄 안의 단어 강조
변경된 줄은 글자·숫자·밑줄이 이어진 덩어리, 이어진 공백, 문장 부호 하나씩으로 토큰을 나눕니다. 두 토큰 목록을 같은 알고리즘으로 비교해 다른 토큰만 강조하므로 item.qty와 item.quantity에서는 qty와 quantity만 표시됩니다. 공백 무시를 켜면 길이가 다른 공백 토큰도 같다고 보고, 대소문자 무시도 여기에 똑같이 적용됩니다. 토큰이 600개를 넘는 줄은 줄 전체를 강조합니다.
패치 형식
패치 탭은 git과 같은 방식으로 통합 diff를 씁니다. --- a/원본과 +++ b/변경본 헤더 뒤에 @@ -시작,개수 +시작,개수 @@로 시작하는 헌크가 이어집니다. 개수가 1이면 생략하고, 줄이 하나도 없는 쪽은 새 파일이나 삭제된 파일처럼 0,0을 씁니다. 헌크마다 "변경 주변의 같은 줄"에서 고른 만큼(기본 3줄) 같은 줄을 남기며, 전체를 고르면 헌크 하나로 만듭니다. 편집 구간 안에서는 삭제를 모두 쓴 뒤 추가를 씁니다.
마지막 줄 뒤에 줄바꿈이 없으면 패치에서 그 줄 다음에 \ No newline at end of file 줄이 붙습니다. git과 GNU diff가 쓰는 문구 그대로라서 patch나 git apply가 결과 파일을 줄바꿈으로 끝낼지 알 수 있습니다.
실제 예시
원본:
name: service
port: 4000
cache: false
region: Seoul
변경본:
name: service
port: 4010
cache: true
region: Seoul
(두 텍스트 모두 줄바꿈으로 끝남)--- a/원본
+++ b/변경본
@@ -1,4 +1,4 @@
name: service
-port: 4000
-cache: false
+port: 4010
+cache: true
region: Seoul수치는 추가 0, 삭제 0, 변경 2, 그대로 2입니다. 나란히 보기에서는 고친 두 줄이 바뀐 줄 옆에 놓이고 4000/4010, false/true만 강조됩니다. 패치에는 삭제 두 줄이 먼저, 추가 두 줄이 그다음에 나옵니다.
원본:
function total(items, taxRate) {
let sum = 0;
for (const item of items) {
sum += item.price * item.qty;
}
return sum * (1 + taxRate);
}
module.exports = { total };
변경본:
function total(items, taxRate = 0.1) {
let sum = 0;
for (const item of items) {
sum += item.price * item.quantity;
}
return Math.round(sum * (1 + taxRate) * 100) / 100;
}
module.exports = { total };1 - function total(items, taxRate) {
1 + function total(items, taxRate{+ = 0.1+}) {
4 - sum += item.price * item.[-qty-];
4 + sum += item.price * item.{+quantity+};
6 - return sum * (1 + taxRate);
6 + return {+Math.round(+}sum * (1 + taxRate){+ * 100) / 100+};변경된 세 줄만 옮겼습니다. [-…-]는 삭제로 강조된 부분, {+…+}는 추가로 강조된 부분입니다. 수치는 변경 3, 그대로 6입니다. 1번째 줄은 지운 글자가 없어서 원본 쪽에는 강조가 전혀 없습니다.
원본: "x\ny" (y 뒤에 줄바꿈 없음)
변경본: "x\ny\n"--- a/원본
+++ b/변경본
@@ -1,2 +1,2 @@
x
-y
\ No newline at end of file
+y수치는 변경 1, 그대로 1입니다. 변경본 끝의 줄바꿈은 빈 줄을 하나 더 만들지 않습니다. 대신 마지막 줄이 줄바꿈 유무만으로 달라지고, 보기 화면에서는 원본의 y에 파일 끝에 줄바꿈 없음 표시가 붙습니다. 패치 안의 이 표시 줄은 git 형식이라 영어로 나옵니다.
원본: "line one\nline two \n" ("two" 뒤에 공백 2칸)
변경본: "line one\nline two\n"기본 옵션: 추가 0, 삭제 0, 변경 1, 그대로 1
- line two[- -]
+ line two
공백 무시를 켠 경우: 현재 옵션에서는 차이가 없습니다.[-…-]는 강조된 부분입니다. 강조가 줄 끝 공백 두 칸에 걸리므로 눈에 보이지 않던 차이가 드러납니다. 공백 무시는 줄 끝을 잘라 내고 비교하므로 두 텍스트가 같다고 나옵니다.
원본: "line 1"부터 "line 20"까지 20줄
변경본: 같은 내용에서 10번째 줄만 "line ten"통합 보기, 변경 주변 3줄:
같은 줄 6개
7 line 7
8 line 8
9 line 9
10 − line 10
10 + line ten
11 line 11
12 line 12
13 line 13
같은 줄 7개
패치:
--- a/원본
+++ b/변경본
@@ -7,7 +7,7 @@
line 7
line 8
line 9
-line 10
+line ten
line 11
line 12
line 13위 출력은 3줄 기준입니다. 없음을 고르면 보기에는 바뀐 줄만 남아 "같은 줄 9개"(1~9번 줄)와 "같은 줄 10개"(11~20번 줄) 사이에 놓이고, 헌크 헤더는 @@ -10 +10 @@이 됩니다. 전체를 고르면 20줄이 모두 나옵니다.
자주 하는 실수
무시한 차이는 패치에서도 빠짐
공백 무시나 대소문자 무시를 켜면 그 차이만 있는 줄은 같은 줄로 보고, 패치에는 원본 쪽 내용으로 들어갑니다. 그 패치를 적용해도 공백이나 대소문자 변경은 재현되지 않으므로, 실제로 적용할 패치를 복사할 때는 옵션을 끄세요.
보이지 않는 문자
기본 설정에서는 줄 끝 공백, 탭, 줄바꿈 없는 공백(NBSP)도 차이로 세며, 단어 강조가 그 위치를 보여 줍니다. 공백 무시는 NBSP도 일반 공백처럼 다루지만, 둥근 따옴표와 곧은 따옴표의 차이나 폭 없는 문자는 여전히 다른 줄로 만듭니다.
순서만 바뀌어도 큰 변경처럼 보임
줄 묶음을 옮기면 이동이 아니라 삭제 후 재추가로 보고됩니다. 순서가 중요하지 않다면(예: 단순 목록의 키) 양쪽을 먼저 정렬하세요.
변경된 줄은 위치 순서로 짝지어짐
편집 구간 안에서는 첫 번째 삭제 줄과 첫 번째 추가 줄을 짝짓는 식으로 순서대로 묶습니다. 세 줄을 지우고 한 줄을 새로 쓰면, 새 줄이 실제로는 세 번째 줄을 대신하더라도 첫 번째 삭제 줄과 짝이 됩니다. 강조는 판단이 아니라 참고로 보세요.
서식 차이와 너무 다른 텍스트
한쪽은 한 줄로 압축된 JSON·XML이고 다른 쪽은 들여쓴 상태라면 거의 모든 줄이 다르게 나오므로, 같은 포매터로 양쪽을 먼저 정리하세요. 줄 편집이 2,000개를 넘으면 달라진 구간을 교체된 한 덩어리로 보여 줍니다. 두 텍스트 합계가 5MiB를 넘거나 한쪽이 50,000줄을 넘으면 잘라 내지 않고 거부합니다.
자주 묻는 질문
비교할 텍스트가 업로드되나요?
아니요. 비교는 브라우저 탭 안에서 실행되고 어느 텍스트도 서버로 전송되지 않습니다.
줄 안의 단어나 글자 단위로도 비교하나요?
먼저 줄 단위로 맞춥니다. 삭제된 줄이 추가된 줄로 바뀐 경우에는 그 두 줄 안에서 달라진 단어, 공백, 문장 부호를 강조합니다.
대소문자를 구분하나요?
기본 설정에서는 대소문자와 공백을 모두 구분합니다. 대소문자 무시를 켜면 Hello와 hello를 같은 줄로 보고, 공백 무시를 켜면 줄 끝 공백과 단어 사이 간격 차이를 무시합니다.
"파일 끝에 줄바꿈 없음"은 무슨 뜻인가요?
그쪽 마지막 줄 뒤에 줄바꿈이 없다는 뜻입니다. git과 대부분의 편집기가 이를 실제 차이로 보기 때문에 이 도구도 차이로 보고, 패치에도 같은 표시 줄이 들어갑니다.
줄 끝만 다르다는 안내는 왜 나오나요?
한쪽은 Windows CRLF 줄바꿈, 다른 쪽은 LF를 쓰고 그 밖의 차이는 없을 때 나옵니다. 비교 전에 줄 끝을 통일하므로 표시되는 줄은 없지만, 줄 끝을 따지는 도구나 저장소가 있어서 따로 알려 줍니다.
붙여 넣기 대신 파일로 비교할 수 있나요?
네. 양쪽 모두 파일 열기를 누르거나 파일을 끌어다 놓으면 UTF-8 텍스트로 읽어 입력란에 채웁니다. .txt, .md, .json, .yaml, .csv, 소스 코드처럼 일반 텍스트 형식이면 됩니다.
최대 크기는 얼마인가요?
두 텍스트 합계 5MiB, 한쪽 50,000줄까지입니다. 크기는 UTF-8 바이트로 세기 때문에 글자당 3바이트인 한글은 그만큼 빨리 한도에 닿고, 5MiB가 넘는 파일은 열 때 거부됩니다. 줄 편집이 2,000개를 넘으면 줄 단위로 맞추는 대신 달라진 부분을 교체된 한 덩어리로 보여 줍니다.
결과를 패치로 적용할 수 있나요?
네. 패치 탭의 내용은 표준 통합 diff라서 patch original.txt < changes.diff로 파일에 적용할 수 있습니다. git apply를 쓰려면 먼저 헤더의 a/원본, b/변경본을 실제 파일 경로로 바꾸세요.
마지막 업데이트:
