Skip to content

텍스트 비교 및 차이 분석

두 텍스트를 브라우저에서 즉시 비교. 좌우 대조 뷰, 인라인 단어 단위 하이라이트, 통합 diff 출력, 대소문자/공백/빈 줄 무시. 100% 브라우저 처리, 업로드 없음.

트래킹 없음 브라우저 실행 무료
모든 비교는 브라우저 내 로컬에서 실행됩니다. 텍스트는 이 기기를 떠나지 않습니다.
무시 옵션
`diff -u` 출력과의 동일성, 줄 내부 LCS 정확성, 접근성(ARIA 역할, 스크린 리더 변경 안내, RTL/LTR 처리) 측면에서 검토 완료. — Go Tools 텍스트 도구 팀 · May 21, 2026

텍스트 비교란?

텍스트 비교는 두 텍스트 문서의 구조적 비교로, 하나를 다른 하나로 변환하는 데 필요한 최소한의 삽입과 삭제 집합을 찾아냅니다. 출력은 변경을 시각적으로 드러냅니다. 추가 줄은 초록, 삭제 줄은 빨강이며, 좌우 대조 형태나 `git`, GitHub, Unix `patch` 명령어가 쓰는 `---/+++/@@` 통합 패치 형식으로 표현됩니다.

내부적으로 모든 현대 diff는 최장 공통 부분 수열(LCS) 알고리즘입니다. Eugene Myers의 1986년 O((N+M)D) 논문이 효율적 구현의 정석이고, 본 도구가 채택한 고전적 동적 계획법(공통 접두/접미사 트리밍 포함)은 더 단순하면서 일반적인 웹 입력에는 충분히 동작합니다. 줄 단위 정렬이 끝난 후, 인접한 삭제 + 추가 쌍은 두 번째 토큰 수준 LCS를 거쳐 렌더러가 한 줄 안에서 실제로 바뀐 단어만 강조할 수 있게 합니다 — 리뷰어들이 줄 내부 diff 또는 단어 수준 diff라 부르는 것입니다.

왜 단순히 문자 단위로 비교하지 않을까요? 편집은 평면적이지 않기 때문입니다. 200 줄 파일 중간에 한 줄을 삽입하면 그 아래 모든 줄이 밀립니다. 순진한 `===`는 아래의 199 줄을 모두 다르다고 판정합니다. LCS는 진실을 알려줍니다. 추가는 1 줄, 변경 없는 줄은 199 줄.

이 도구는 모든 비교를 브라우저 안에서 실행합니다. 업로드 없음, 임시 파일 없음, 로그 없음. 사유 코드, 레드라인이 들어간 계약서, 비공개 로그 — 제3자 서버에 붙여 넣기 꺼려지는 모든 것에 안전합니다. JSON을 diff하고 싶나요? 구조화된 JSON Diff를 사용해 키 순서와 공백이 노이즈가 되지 않게 하세요. YAML이나 CSV로 된 두 설정을 비교한다면 먼저 YAML → JSON 또는 JSON → CSV로 변환한 다음 형식에 맞는 도구로 diff하세요.

// Two strings that look 'mostly the same' but a naïve check disagrees
const a = 'hello world';
const b = 'hello, world!';

// Character equality
a === b; // false — but only 3 characters actually changed.

// LCS-style diff (this tool, at line + word granularity)
// → 1 line modified, inline highlight: 'hello[, ]world[!]'
// → unified patch:
//   --- original
//   +++ modified
//   @@ -1 +1 @@
//   -hello world
//   +hello, world!

핵심 기능

좌우 대조 + 통합 뷰

사람 리뷰용 2열 시각화 뷰와 `git apply`, 코드 리뷰 도구, 버그 리포트용 표준 통합 diff 패치 형식 사이를 자유롭게 전환할 수 있습니다.

줄 내부 단어 단위 하이라이트

두 줄이 수정으로 짝지어지면 바뀐 토큰만 색상 배경을 가집니다. 80 문자를 훑지 않고도 시선이 즉시 편집 지점을 찾아갑니다.

대소문자 / 공백 / 빈 줄 무시

네 가지 독립 토글: 대소문자, 모든 공백, 줄 끝 공백만, 빈 줄. 몇 번의 클릭으로 `git diff -i -w -b`를 재현할 수 있습니다.

통합 diff 내보내기

3 줄 컨텍스트가 포함된 깨끗한 `---/+++/@@` 패치를 복사하세요. PR 댓글, 버그 리포트, `patch -p1`에 바로 붙여 넣을 수 있습니다.

100% 브라우저 기반

입력은 기기를 떠나지 않습니다. 업로드 없음, 텍스트에 대한 분석 없음. 페이지 로드 후 오프라인에서도 동작합니다. 사유 코드와 기밀 문서에도 안전합니다.

유니코드 + RTL 인식

유니코드 단어 경계로 토큰을 분리합니다. 아랍어, 히브리어, CJK 콘텐츠도 깔끔하게 비교되며 줄 끝 변형(CRLF, LF, CR)은 모두 정규화됩니다.

예시

코드 리뷰 — 변수 이름 변경

function getUser(id) {
  const u = db.users.find(x => x.id === id);
  return u;
}
function getUser(userId) {
  const u = db.users.find(x => x.id === userId);
  return u;
}

좌우 대조 뷰는 이름 변경이 일어난 모든 줄을 강조하고, 줄 내부 word diff는 바뀌지 않은 토큰을 흐리게 처리해 리뷰어가 어떤 식별자가 변경됐는지 정확히 볼 수 있습니다.

계약서 수정 — 조항 한 줄 추가

1. The service is provided as-is.
2. Either party may terminate with 30 days notice.
3. Disputes are resolved in California courts.
1. The service is provided as-is.
2. Either party may terminate with 30 days notice.
2a. Termination notice must be in writing.
3. Disputes are resolved in California courts.

삽입된 단일 조항(2a 줄)이 유일한 차이입니다. 주변 컨텍스트 줄은 깔끔하게 유지되어 계약서나 정책 문서의 레드라인 작업에 적합합니다.

로그 조사 — 요청 시간 변화

GET /api/users 200 14ms
POST /api/orders 201 88ms
GET /api/orders/42 200 21ms
GET /api/users 200 14ms
POST /api/orders 201 4200ms
GET /api/orders/42 500 21ms

두 줄이 바뀝니다. 줄 내부 하이라이트가 88ms → 4200ms의 지연 시간 변화와 200 → 500 상태 코드를 보여줍니다. 장애 타임라인 분석의 정석입니다.

줄 끝 공백 — '끝 공백 무시' 옵션 토글

  margin: 0;  
  padding: 0;
  border: none;
  margin: 0;
  padding: 0;
  border: none;

옵션 없이는 1 줄이 차이로 표시됩니다(끝 공백 때문). '줄 끝 공백 / 탭 무시'를 켜면 차이가 0이 됩니다. `git diff -b`와 같은 동작입니다.

사용 방법

  1. 1

    두 버전을 붙여 넣기

    원본 텍스트는 왼쪽에, 변경된 텍스트는 오른쪽에. 입력하는 동안 라이브 diff가 렌더링되며, 큰 입력(합산 200 KB 초과)은 수동 Diff 버튼으로 전환됩니다.

  2. 2

    필요한 무시 옵션 켜기

    대소문자 무시, 모든 공백 무시, 줄 끝 공백 무시, 빈 줄 무시 — 각각 독립적이며 방문 간에 유지됩니다.

  3. 3

    diff를 읽거나 패치를 가져가기

    사람 리뷰용 좌우 대조, `---/+++/@@` 패치 형식용 통합 뷰. '통합 diff 복사'는 코드 리뷰나 `patch -p1`용으로 깨끗한 패치를 클립보드에 보냅니다.

흔한 Diff 함정

Windows ↔ Unix 복사 후 파일 전체가 '바뀐' 것처럼 보임

Windows의 메모장에서 Unix가 편집한 원본에 붙여 넣으면 모든 줄에서 \r 차이가 나타납니다. '줄 끝 공백 / 탭 무시'를 켜면 CR 문자를 잠재울 수 있습니다.

✗ 오류
Diff: 200건 수정(전부 줄 끝 \r 때문)
✓ 정상
줄 끝 공백 / 탭 무시 → 실제 변경은 2건

들여쓰기만 다른데 diff가 비명을 지름

탭 ↔ 공백 재포맷팅은 줄 단위 diff를 폭발시킵니다. '모든 공백 무시'는 실제 의미적 변경만 남깁니다.

✗ 오류
Diff: 87건 수정(전부 들여쓰기 변경)
✓ 정상
모든 공백 무시 → 실제 변경 4건

빈 줄 하나 때문에 같은 단락이 변경으로 표시됨

산문에 빈 줄 하나를 추가하거나 제거하면 영역 전체가 어긋날 수 있습니다. '빈 줄 무시'는 본문을 건드리지 않고 이를 바로잡습니다.

✗ 오류
Diff: 단락 2가 '완전히 바뀜'(빈 줄 하나가 이동)
✓ 정상
빈 줄 무시 → 단락 2에 변경 없음

diff는 '동일'이라고 하는데 파일은 다름

거의 항상 이전 세션의 대소문자 또는 공백 무시 옵션이 켜진 상태로 남아 있는 경우입니다. '무시 옵션' 패널을 여세요 — 모든 토글이 거기 보입니다. 바이트 단위 엄격 비교를 원하면 전부 끄세요.

✗ 오류
차이 0건으로 표시되지만 `cmp`는 파일이 다르다고 함
✓ 정상
모든 무시 옵션 해제 → 실제 diff가 나타남

붙여 넣은 JSON이 '전부 바뀐' 것처럼 보임

텍스트 diff는 키 순서를 의미 있게 다루지만 JSON은 그렇지 않습니다. JSON 페이로드는 전용 JSON Diff 도구를 사용하세요. 키 순서를 무시하고 타입 엄격성을 존중합니다.

✗ 오류
JSON에 텍스트 diff: 줄의 100%가 변경(실은 키 재정렬일 뿐)
✓ 정상
<a href="/ko/tools/json-diff">JSON Diff</a>: 차이 0건

'Diff 잘림' 경고를 무시함

한쪽당 5,000 줄을 초과하면 입력이 잘립니다. 경고가 보이면 커맨드라인 `diff -u file1 file2`나 `git diff --no-index`로 전환하세요. 둘 다 스트리밍으로 GB 단위를 처리합니다.

✗ 오류
20,000 줄 로그를 붙여 넣음 — 첫 5,000 줄만 diff됨
✓ 정상
터미널에서 `diff -u a.log b.log`로 파일 전체 처리

주요 사용 사례

코드 리뷰 스니펫
함수의 두 버전을 좌우 상자에 떨어뜨려 이름 변경, 제거된 분기, 새 가드 절을 한눈에 확인하세요. 한 줄 변경을 찾는다면 GitHub diff를 스크롤하는 것보다 줄 내부 단어 하이라이트가 더 빠릅니다.
계약서 / 정책 레드라인
어제 계약서와 오늘의 수정본을 붙여 넣으세요. 삽입된 조항이 도드라지고 변경 없는 단락은 회색으로 가라앉습니다. 법무 검토 기록용으로 통합 패치를 내보내세요.
로그 타임라인 조사
SRE의 장애 이전 로그 조각을 장애 발생 중의 조각과 비교하세요. `awk` 없이도 지연 시간, 상태 코드, 빈도 변화가 즉시 드러납니다.
원고 / 초안 개정
초안과 편집자 버전을 붙여 넣으세요. 줄 내부 단어 diff가 어떤 문장이 다시 쓰였는지 정확히 보여줍니다 — 변경을 하나씩 수락 또는 거절할 때 매우 유용합니다.
번역 검토
기존 번역과 재번역을 diff해 새 카피가 의미, 구조, 플레이스홀더를 보존하는지 확인하세요. '줄 끝 공백 무시'를 켜면 번역가들이 자주 들여오는 노이즈를 잠재울 수 있습니다.
설정 / .env 파일 감사
두 개의 `.env`, `docker-compose.yaml`, 셸 rc 파일을 비교하세요. '빈 줄 무시'를 켜면 diff가 서식 흔들림 대신 기능적 차이에 집중합니다.

기술 세부 사항

접두/접미사 트리밍이 적용된 LCS
동적 계획법 LCS를 실행하기 전에 공통의 시작/끝 줄을 제거합니다. '2,000 줄짜리 설정 두 개에서 한 줄만 바뀐' diff는 1×1 DP 표로 축소되어 1 밀리초 이내에 렌더링됩니다.
토큰 단위 줄 내부 diff
인접한 삭제 + 추가 헝크가 짝지어지고, 유니코드 단어 / 비단어 / 공백 런으로 토큰화됩니다. 두 번째 LCS가 초록 / 빨강 토큰 스팬을 만들어 수정된 줄을 읽기 쉽게 만듭니다.
통합 diff = git/patch 호환
출력은 GNU patch용으로 정의되고 Git, GitHub, 모든 코드 리뷰 도구가 사용하는 `---/+++/@@ -L,C +L,C @@` 형식을 따릅니다. `pbpaste | patch -p0`로 적용하세요.
한쪽당 5,000 줄 입력 상한
상한을 넘으면 diff는 잘라내고 경고를 보냅니다. 수 MB 입력에는 커맨드라인 `diff -u`나 `git diff --no-index`를 사용하세요. 둘 다 스트리밍으로 GB 단위를 처리합니다.

모범 사례

읽기 전에 무시 옵션부터 정하기
줄 끝 공백, CRLF, 대소문자 노이즈는 신호를 묻어버립니다. 먼저 알맞은 옵션을 켜세요. diff가 훨씬 읽기 쉬워지고, '가짜' 변경을 건너뛰는 습관이 들지 않습니다.
공유에는 통합, 리뷰에는 좌우 대조
시각적 열은 당신의 눈을 위한 것이고, 통합 패치는 다른 모두의 터미널을 위한 것입니다. 복사된 통합 diff는 번역 없이 Slack 메시지, Jira 댓글, `patch -p1`에 그대로 들어갑니다.
일치율 %로 건전성 검사
두 파일이 '거의 같은데' 일치율이 30%라면 줄 끝이나 공백 문제가 있는 것입니다. '모든 공백 무시'를 켜고 다시 확인한 뒤 diff를 읽으세요.

자주 묻는 질문

붙여넣은 텍스트가 서버로 전송되나요?
아니요. 모든 비교는 브라우저 안의 JavaScript에서 실행됩니다. 텍스트는 업로드, 로깅, 디스크 저장, 제3자 전송 어느 것도 되지 않습니다. 다음 방문 시 페이지가 기억할 수 있도록 UI 설정(뷰 모드와 무시 옵션 토글)만 localStorage에 저장되며, 텍스트 자체는 절대 저장되지 않습니다. DevTools → 네트워크 패널을 열어 직접 확인할 수 있습니다. Diff를 클릭해도 요청이 0건 발생합니다.
텍스트 diff와 JSON diff의 차이는 무엇인가요?
텍스트 diff는 줄 단위로 비교하며 산문, 코드, 로그, 계약서, 설정 파일에 적합합니다. JSON Diff는 JSON 데이터 모델을 이해합니다. 키 순서는 무관하고, 타입은 엄격하며, 배열은 키로 매칭할 수 있습니다. 텍스트 diff에 JSON을 붙여넣으면 키 재정렬과 공백 차이가 변경으로 표시되지만, JSON Diff는 이를 무시합니다. 비구조화된 콘텐츠에는 텍스트 diff를, API 응답과 설정 페이로드에는 JSON Diff를 사용하세요.
공백, 대소문자, 빈 줄을 무시하려면 어떻게 하나요?
diff 위쪽의 '무시 옵션' 패널을 클릭하세요. '대소문자 무시'는 A와 a를 동일하게 처리합니다. '모든 공백 무시'는 비교 전에 모든 공백, 탭, 줄바꿈을 압축합니다. '줄 끝 공백 / 탭 무시'는 줄 끝 공백만 제거하며, `git diff -b`의 표준 동작과 동일합니다. '빈 줄 무시'는 diff 전에 빈 줄/공백만 있는 줄을 제거합니다. 각 옵션은 독립적으로 동작하며 방문 간에 유지됩니다.
통합 diff(unified diff)란 무엇이고 언제 복사하나요?
통합 diff는 `patch`, `git apply`, GitHub PR, 대부분의 코드 리뷰 도구가 사용하는 `---/+++/@@` 텍스트 형식입니다. '통합 diff 복사'를 클릭하면 변경 부분 주위 3 줄의 컨텍스트를 포함한 패치를 얻을 수 있습니다. 버그 리포트, 코드 리뷰 댓글, `patch -p1` 명령어에 붙여 넣으면 깔끔하게 적용됩니다. 좌우 대조는 사람용, 통합 diff는 기계용(그리고 기계처럼 생각하는 리뷰어용)입니다.
단어 하나만 고쳤는데 왜 줄 전체가 바뀐 것으로 표시되나요?
그렇지 않습니다. 자세히 보세요. 줄 전체가 강조된 건 그 줄에 무언가가 바뀌었기 때문이지만, 강조 영역 안에서 밝은 배경(추가는 초록, 삭제는 빨간 취소선)을 가지는 것은 바뀐 토큰뿐입니다. 이것이 줄 내부 단어 diff입니다. 줄의 컨텍스트는 읽기 좋게 유지되면서, 시선은 정확한 편집 지점으로 떨어집니다. 연속된 두 줄이 모두 수정된 경우에는 두 줄 모두 줄 내부 하이라이트가 표시됩니다.
CRLF와 LF 줄 끝은 어떻게 처리되나요?
둘 다 인식됩니다. diff는 \r\n, \n, 그리고 단독 \r로 줄을 나누므로 Windows CRLF, Unix LF, 구형 Mac CR 텍스트 모두 올바르게 정렬됩니다. 줄 끝 변화를 특별히 표시하고 싶다면 '줄 끝 공백 / 탭 무시'를 꺼두세요. \r이 줄 끝 문자로 드러납니다. 줄 끝 노이즈를 완전히 없애려면 '모든 공백 무시'를 켜세요.
두 입력의 최대 크기는 얼마인가요?
diff는 메인 스레드에서 실행되므로 실용적인 상한은 한쪽당 약 5,000 줄 또는 1 MB이며, 그 이상은 잘라내고 경고를 표시합니다. 합산 200 KB를 넘으면 라이브 diff가 비활성화되고 수동 Diff 버튼으로 전환됩니다. 수 MB 파일에는 커맨드라인 `diff -u`나 `git diff --no-index`를 사용하세요. 스트리밍 방식으로 GB 단위도 처리합니다.
코드를 diff할 수 있나요? 제가 쓰는 언어를 알아보나요?
diff는 언어 비의존적입니다. 구문이 아니라 줄과 토큰만 봅니다. 이 점이 리뷰 스니펫, 설정 편집, 복사된 패치에는 오히려 장점이 됩니다. 의미적 코드 diff(파일 간 함수 이름 변경, AST 수준)가 필요하다면 git, GitHub PR 뷰, 전용 구조적 diff 도구를 사용하세요. 하지만 코드 리뷰의 90% 상황 — 함수 한 토막 훑기, 두 스니펫 비교 — 에서는 줄 + 단어 diff면 충분합니다.
한 번의 편집이 가끔 삭제 줄 + 추가 줄로 표시되는 이유는?
한 줄에서 너무 많이 바뀌어 단어 단위 하이라이트가 유용하지 않을 때, diff는 구조를 깔끔하게 유지하기 위해 별도의 삭제 + 추가 줄로 표시합니다. 같은 휴리스틱이 산문의 재작성과 다시 쓰여진 코드 블록에도 읽기 쉬운 출력을 제공합니다. '통합' 뷰로 전환하면 패치에서 사용되는 고전적인 `-`/`+` 쌍 형식이 보입니다.
% 일치율은 어떻게 계산되나요?
무시 옵션을 적용한 후의 변경되지 않은 줄 수를 두 줄 수 중 큰 값으로 나눈 뒤 100%로 클램프합니다. 동일한 두 입력은 100%입니다. 100줄 파일에 한 줄을 추가하면 99%입니다. 모든 줄을 교체하면 0%입니다. 'diff를 읽기 전에 이게 작은 수정인지 전면 재작성인지' 빠르게 판단하는 데 유용합니다.
diff를 동료와 공유할 수 있나요?
네, 두 가지 방법이 있습니다. (1) '통합 diff 복사'를 클릭해 패치를 채팅, Slack, PR 댓글에 붙여 넣으세요. 터미널이 있는 사람은 누구나 `patch < clip`으로 적용할 수 있습니다. (2) 좌우 대조 패널을 스크린샷으로 찍어 시각적 리뷰에 쓰세요. 'URL로 공유' 버튼을 의도적으로 제공하지 않는 이유는 텍스트를 업로드해야 하기 때문이며, 우리는 그렇게 하지 않습니다.
아랍어나 히브리어 같은 우측에서 좌측 언어도 지원하나요?
텍스트 콘텐츠는 지원합니다. 줄과 토큰은 모두 유니코드를 인식합니다. 인터페이스는 논리적 CSS 방향을 사용하므로 RTL 로케일에서는 거터(줄 번호 칸)와 열이 자연스럽게 뒤집힙니다. diff 셀 내부에서는 텍스트 방향이 콘텐츠를 따르므로 아랍어와 히브리어 문자열이 올바르게 렌더링되고, +/- 마커는 거터 쪽에 정렬된 채로 유지됩니다.

무료 정규식 테스터 — 패턴을 웹에서 디버그하고 일치 확인하기

텍스트 도구

정규 표현식을 모든 텍스트에 즉시 온라인 테스트합니다. 일치 강조, 캡처 그룹, 치환 미리보기, 분할, 설명 지원. JavaScript 정규식, 100% 비공개, 가입 없음.

무료 글자 수 세기 & 단어 카운터

텍스트 도구

단어, 문자, 문장, 단락 수와 읽기 시간을 즉시 계산합니다. Twitter, 메타 설명, Instagram 길이 제한 검사를 실시간으로 지원하는 무료 브라우저 카운터입니다.

진법 변환기 (Number Base Converter)

변환 도구

2진수, 16진수, 10진수, 8진수 및 임의 진법(2-36)을 즉시 변환합니다. 온라인에서 무료로 사용할 수 있으며 모든 처리는 브라우저에서 이루어집니다.

Base64 디코더 · 인코더 (Base64 Decoder & Encoder)

인코딩 & 포매팅

Base64를 온라인에서 무료로 인코딩하고 디코딩합니다. UTF-8과 이모지를 완벽 지원하는 실시간 변환으로, 100% 브라우저에서 처리되어 회원 가입이 필요 없습니다.

crontab 생성기 & cron 표현식 빌더

날짜 & 시간

브라우저에서 cron 표현식을 만들고 검증·해석합니다. 로컬 또는 UTC로 다음 실행을 미리 보고, POSIX 5필드 문법과 프리셋을 온라인에서 무료로 사용합니다.

CSV to JSON 변환기 (CSV to JSON Converter)

인코딩 & 포매팅

브라우저에서 CSV를 JSON으로 변환합니다. RFC 4180, 타입 추론, 헤더 행, 큰 정수 안전 처리. 100% 비공개, 업로드 없음.