MYMONDAY.ai
서비스스튜디오도구데이터·포맷73CSS 생성기19색상·이미지10인코딩·보안10웹·SEO11개발·데브옵스10파일·내보내기18계산기6가이드

텍스트 비교(Diff)

원본과 변경본을 붙여 넣으면 추가·삭제·변경된 줄을 보여 주고, 줄 안에서 바뀐 단어를 강조합니다.

  • 브라우저에서 처리
  • 가입 없음
  • 무료

도구 작업 공간

예제

연속된 공백·탭은 공백 하나로 보고, 줄 앞뒤 공백은 무시합니다.

Hello와 hello를 같은 줄로 봅니다.

원본

10줄

변경본

11줄
추가1
삭제0
변경3
그대로7
1name: service1name: service
2port: 40002port: 4010
3cache: false3cache: true
4region: Seoul4region: Seoul
5timeouts:5timeouts:
6 connect: 5s6 connect: 5s
7 read: 30s7 read: 60s
8features:8features:
9 - search9 - search
10 - export10 - export
11 - audit

텍스트 비교 도구는 이 버전과 저 버전 사이에 무엇이 바뀌었는지 하나의 질문에 답합니다. 왼쪽에 원본, 오른쪽에 변경본을 붙여 넣거나 양쪽에 파일을 열면 두 텍스트를 줄 단위로 맞춰 줍니다. 추가, 삭제, 변경, 그대로인 줄 수를 세어 주고, 결과는 나란히 보기, 통합 보기, 복사하거나 내려받을 수 있는 패치로 볼 수 있습니다. 설정 파일, JSON·YAML 내보내기, 코드, 계약서 초안, 릴리스 노트에 알맞습니다.

비교는 줄 단위이며, 앞뒤에서 똑같은 줄을 먼저 맞춘 뒤 git diff와 같은 최소 편집 스크립트 방식인 Myers 알고리즘을 씁니다. 삭제된 줄이 추가된 줄로 바뀐 경우에는 둘을 변경된 줄 하나로 묶고 그 안에서 달라진 단어를 강조합니다. 옵션으로 공백이나 대소문자 차이를 무시할 수 있고, 길게 이어지는 같은 줄은 접어서 변경 부분이 눈에 잘 들어오게 합니다.

두 텍스트는 브라우저 탭 안에만 있고 아무것도 업로드되지 않습니다. 두 텍스트를 합쳐 UTF-8 기준 5MiB, 한쪽당 50,000줄까지 비교할 수 있습니다.

사용 방법

  1. 원본 텍스트 입력

    원본 칸에 이전 버전을 붙여 넣거나 파일을 끌어다 놓거나 파일 열기를 누릅니다. 설정 변경, 코드 수정, 마지막 줄바꿈 없음 예제를 고르면 양쪽이 한 번에 채워집니다.

  2. 변경된 텍스트 입력

    변경본 칸에 새 버전을 붙여 넣거나 엽니다. 양쪽을 거꾸로 넣었다면 양쪽 바꾸기로 두 칸을 맞바꿉니다.

  3. 옵션 설정

    차이로 보고 싶지 않다면 공백 무시나 대소문자 무시를 켭니다. "변경 주변의 같은 줄"(없음, 3줄, 10줄, 전체)로 변경 앞뒤에 같은 줄을 얼마나 남길지 정합니다.

  4. 차이점 읽기

    수치에 추가, 삭제, 변경, 그대로인 줄 수가 나옵니다. 나란히 보기는 두 버전을 줄 번호와 함께 양옆에 놓고, 통합 보기는 삭제와 추가를 한 열에 나열합니다. 바뀐 단어는 강조되고, 접힌 부분은 "같은 줄 N개"로 표시되며, 줄바꿈 없이 끝나는 마지막 줄에는 "파일 끝에 줄바꿈 없음" 표시가 붙습니다.

  5. 패치 복사 또는 내려받기

    패치 탭은 결과를 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

공백 무시를 켠 경우: 현재 옵션에서는 차이가 없습니다.

[-…-]는 강조된 부분입니다. 강조가 줄 끝 공백 두 칸에 걸리므로 눈에 보이지 않던 차이가 드러납니다. 공백 무시는 줄 끝을 잘라 내고 비교하므로 두 텍스트가 같다고 나옵니다.

20줄 파일에서 한 줄만 바뀐 경우
입력
원본: "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/변경본을 실제 파일 경로로 바꾸세요.

마지막 업데이트: