# 텍스트 비교 — 두 텍스트를 나란히 비교하기

두 텍스트를 넣으면 모든 차이가 줄 단위, 단어 단위로 표시됩니다. 남의 서버에 붙여 넣는 것은 없습니다.

> 두 텍스트를 비교해 모든 차이를 줄 단위, 단어 단위로, 나란히 또는 한 열로 봅니다. 비교는 브라우저 안에서 돌아가고 아무것도 업로드되지 않아서, 공개 전 코드가 내 기기를 떠날 일이 없습니다.

이 페이지는 브라우저 안에서만 동작하는 대화형 도구입니다(https://abox.tools/ko/텍스트-비교/). 도구에 넘긴 어떤 것도 업로드되지 않습니다. 아래는 이 페이지가 도구에 대해 글로 설명하는 내용 전부입니다. 도구를 쓰려면 이 주소를 여세요.

## 텍스트는 **절대 업로드되지 않습니다**. 서버가 아예 없으니까요.

비교는 문자열 두 개를 두고 하는 산술이고, 여기 이 페이지에서 이루어집니다. 알고리즘은 마이어스의 것 — `git diff`가 쓰는 바로 그것 — 이고 `src/diff.js`에 직접 손으로 쓰여 있어서 읽어 볼 수 있습니다. 이 도구에는 네트워크 기능이 하나도 없어서 가져올 것도 보낼 것도 없고, 여기서는 그 사실이 중요합니다. 사람들이 비교하는 것은 계약서이고 설정 파일이고 공개 전 코드인데, 그것도 언제나 두 벌씩이니까요.

- ✗ 업로드 없음
- ✗ 가입 없음
- ✗ 용량 제한 없음
- ✓ 오프라인 동작
- ✓ 오픈 소스

## 업로드하지 않고 두 텍스트를 비교하는 방법

1. **두 텍스트를 붙여 넣거나, 파일 두 개를 놓습니다.** 원본은 왼쪽, 바뀐 쪽은 오른쪽. 선택 영역에 한꺼번에 놓인 파일 두 개는 놓은 순서대로 양쪽에 하나씩 놓입니다. 반대로 놓였다면 좌우를 바꾸시면 됩니다.
2. **읽는 방식을 고릅니다.** 나란히, 또는 한 열로. 휴대폰은 한 열로 시작합니다. 나란히 보기는 텍스트 열이 두 개 필요한데 휴대폰에는 한 열 들어갈 자리뿐이니까요. 어차피 메뉴는 바로 옆에 있습니다.
3. **중요하지 않은 것은 무시합니다.** 공백, 대소문자, 빈 줄. 각각 따로 무시할 수 있어서, 다시 정렬만 한 파일이 변경 백 개처럼 읽히지 않습니다. 기본으로는 바뀌지 않은 가운데 부분을 개수 하나로 접고, 변경마다 앞뒤로 세 줄씩 남깁니다.
4. **무엇이 달라졌는지 읽습니다.** 지워진 줄은 왼쪽에, 더해진 줄은 오른쪽에 표시되고, 달라진 줄 안에서는 다른 단어가 강조됩니다. 문단 두 개를 비교하면 문단 두 개가 통째로가 아니라 자리를 옮긴 단어가 보입니다.
5. **패치를 가져갑니다.** 내려받는 것은 통합(unified) 형식의 `.patch`이고, 코드 리뷰와 `git apply`와 모든 diff 뷰어가 기대하는 것이 바로 그것입니다. 복사도 같은 것을 클립보드에 넣습니다.

## 자세한 설명

[JSON 파일 두 개를 비교하는 방법](https://abox.tools/ko/가이드/json-파일-두-개-비교/): 두 파일을 같은 방식으로 정렬하고, 키를 정렬하고, 그다음 비교합니다. 날것의 JSON diff가 왜 거의 잡음뿐인지, 브라우저에서 양쪽을 표준형으로 만드는 법, 그리고 패치까지 살아남는 것.

## 상자 속 다른 도구

- [Base64 인코더 · 디코더](https://abox.tools/ko/base64-인코딩/): Base64, 퍼센트 인코딩, HTML 엔티티, 16진수, 역슬래시 이스케이프를 양방향으로. 남의 서버에 붙여 넣는 것은 없습니다.
- [텍스트·파일 공유](https://abox.tools/ko/텍스트-공유/): 공유는 이 열린 탭 안에서만 삽니다. 읽는 사람은 암호화된 내용을 당신의 브라우저에서 직접 받아 가고, 탭을 닫으면 끝납니다 - 어떤 서버에도 아무것도 남지 않습니다.
- [QR과 바코드 생성](https://abox.tools/ko/qr코드-만들기/): 입력하면 코드가 됩니다. 만드는 데 아무것도 나가지 않습니다.
- [QR과 바코드 스캔](https://abox.tools/ko/qr코드-스캔/): 코드에 카메라를 대거나, 찍어 둔 사진을 올려놓으세요. 읽는 일은 여기서만 일어납니다.

## 자주 묻는 질문

### 제 텍스트가 어딘가로 업로드되나요?

아닙니다. 비교는 내 기기에서, 내 브라우저 안에서 도는 함수입니다. 이 도구에는 네트워크 기능이 하나도 없어서 무언가를 가져오지도, 보내지도 않습니다. 이 페이지의 `Content-Security-Policy`에 연결해도 되는 주소가 전부 적혀 있는데, 그중 이 사이트 것은 하나도 없습니다. 계약서나 설정 파일, 공개 전 코드에 이 도구를 써야 하는 이유가 그것입니다. 그런 것을 남의 diff 도구에 붙여 넣는 것은 두 버전을 한꺼번에 넘겨주는 일이니까요.

### 비교는 실제로 무엇을 하나요?

왼쪽 텍스트를 오른쪽으로 바꾸는 가장 짧은 편집 묶음을 찾습니다. `git diff`가 쓰는 마이어스 알고리즘으로요. diff를 읽을 만하게 만드는 것이 바로 그 "가장 짧은"입니다. 가운데 한 줄이 끼어들었으면 그 뒤의 모든 줄이 바뀐 것이 아니라 삽입 하나로 보여야 하니까요. 바뀐 줄 안에서는 달라진 단어까지 표시하므로, 두 문단을 비교하면 문단 둘이 아니라 옮겨 간 단어가 드러납니다.

### 붙여 넣기 대신 파일 두 개를 비교할 수 있나요?

됩니다. 둘 다 한꺼번에 선택 영역에 놓으면 놓은 순서대로 양쪽에 하나씩 놓입니다. 브라우저가 그것을 읽어 이 페이지로 들이고, 그것들이 가는 곳은 거기뿐입니다. 반대로 놓으셨다면 좌우를 바꾸시면 됩니다.

### 비교 결과로 무엇이 나오고, 적용할 수 있나요?

내려받는 것은 통합 diff입니다. `git apply`와 `patch`, 모든 코드 리뷰 도구가 읽는 `@@ -3,5 +3,5 @@` 형식이죠. 복사도 같은 것을 클립보드에 넣습니다. 화면에 있는 것은 그것을 보여 주는 방식일 뿐입니다. 좌우로 나란히, 또는 한 열로, 그리고 달라지지 않은 부분은 전부 보여 달라고 하지 않는 한 개수로 접혀 있습니다.

### 공백이나 대소문자, 빈 줄을 무시할 수 있나요?

됩니다. 각각 따로요. 공백을 무시하면 다시 정렬만 한 파일이 변경 없음으로 비교되고, 대소문자를 무시하면 `Error`와 `error`가 같은 단어로 취급되고, 빈 줄을 무시하면 아무것도 싣지 않은 줄을 건너뜁니다. 그때 결과 위의 카운터는 무시해 달라고 한 차이를 무시하고 나면 둘이 같다고 말하는데, 그것은 '동일하다'와는 다른 주장이고 이 페이지는 그 두 주장을 섞지 않습니다.

### 얼마나 큰 비교까지 다룰 수 있나요?

여기 정해 둔 제한은 없습니다. 그 값을 치를 서버가 없으니까요. 이만 줄짜리 텍스트 둘에 변경이 한 줌뿐이라면 즉시 비교됩니다. 진짜 일이 시작되기 전에 공통의 앞부분과 뒷부분을 잘라 내니까요. 공통점이 전혀 없는 두 텍스트의 비교는 일찍 멈추고 그렇다고 말합니다. 이미 뻔한 것을 증명하느라 1분을 쓰는 대신에요. 아주 긴 비교는 처음 몇천 줄을 그리고 나머지는 내려받는 패치에 맡깁니다.

### 무료인가요? 가입해야 하나요?

무료이고 계정도, 로그인도, 체험판도 없으며 붙여 넣는 양에도 제한이 없습니다. 이 사이트는 광고로 유지되는데, 그 광고에도 내 텍스트에 관한 것은 넘어가지 않습니다.

### 오프라인에서도 되나요?

됩니다. 페이지를 한 번 불러온 다음 인터넷을 끊어도 계속 동작합니다. 아무것도 업로드되지 않는다는 가장 간단한 증명이기도 하고요. 텍스트를 어딘가로 보내서 비교해 오는 도구라면 선을 뽑는 순간 멈춰 버릴 테니까요.

## 이 약속을 직접 확인하는 방법

- **붙여 넣은 것은 나갈 곳이 없습니다.** 이 페이지가 연결해도 되는 주소는 Content-Security-Policy에 모두 적혀 있는데, 그중 이 사이트 것은 하나도 없습니다. 붙여 넣은 토큰이 모일 만한 수신 지점이 없고, 설령 있더라도 거기로 무언가를 보낼 코드가 없습니다.
- **여기서는 아무것도 가져오지 않습니다.** `src/` 어디에도 `fetch`도, `XMLHttpRequest`도, `sendBeacon`도 없습니다. 비교는 문자열 두 개를 받아 무엇이 달라졌는지 돌려주는 이 페이지 안의 함수입니다.
- **알고리즘은 표준 그것이고, 전부 읽어 볼 수 있습니다.** 마이어스의 최단 편집 스크립트 알고리즘, `git diff`가 쓰는 바로 그것을 `src/diff.js`에 직접 손으로 쓰고 결정마다 주석을 달아 두었습니다. `tests/js/text-diff.test.js`의 테스트는 삭제들이 왼쪽 텍스트를, 삽입들이 오른쪽 텍스트를 도로 만들어 낸다는 것을 증명합니다. diff에서 '정확하다'는 말의 뜻이 바로 그것입니다.
- **구글이 불러오는 것과, 구글에게 주지 않는 것.** 광고와 측정 스크립트는 구글에서, 후원 버튼은 Buy Me a Coffee에서 옵니다. 어느 쪽에도 내 텍스트는 한 글자도 넘어가지 않습니다. 그것을 읽고 해석하고 쓰는 코드는 한 줄도 빠짐없이 이 출처에서 제공되고 저장소에 공개되어 있습니다.
- **오프라인에서도 동작합니다.** 네트워크를 끊어도 도구는 그대로입니다. 애초에 네트워크를 쓰는 단계가 없었으니까요. 가장 간단한 증거입니다.

**직접 확인해 보세요.** 위에 적은 어느 것도 그냥 믿으실 필요는 없습니다. 이 페이지는 저장소 안의 템플릿과 설정을 빌드 스크립트가 찍어 낸 결과이고, 그 스크립트는 누구나 읽고 직접 돌려 볼 수 있습니다. 결과물은 `dist` 브랜치에 그대로 올라가 있고요. 그래서 실제로 제공되는 파일과 소스를 빌드한 결과를 나란히 놓고 비교해 보실 수 있습니다: https://github.com/A-Box-of-Tools/website

먼저 읽어 볼 파일을 꼽자면, Content-Security-Policy는 `config/site.toml`, 그리고 `src/diff.js`를 보시면 됩니다. 마이어스 알고리즘, 달라진 줄 안에서 단어 단위로 한 번 더 도는 부분, 그리고 병적인 비교가 페이지를 얼리지 못하게 막는 세 가지 안전장치가 거기 있습니다.
