텍스트 차이(Diff) 비교
두 텍스트 블록을 줄 단위로 비교하여 추가된 줄과 삭제된 줄을 색으로 구분해 보여주는 도구입니다. 설정 파일 변경 확인, 문서 교정, Git 없이 하는 코드 리뷰 등에 활용할 수 있습니다. 비교 계산은 모두 브라우저 안에서 처리되며 입력한 내용은 서버로 전송되지 않습니다.
두 텍스트를 줄 단위로 견주어 보기
설정 파일에서 무엇이 바뀌었는지 확인하고 싶을 때, 또는 글의 어디에 손이 갔는지 알고 싶을 때 손이 가는 도구입니다. 두 텍스트를 줄마다 맞대어 더해진 줄과 지워진 줄을 다른 색으로 보여 줍니다. 모든 계산이 브라우저 안에서 끝나므로 붙여 넣은 내용이 어디로도 보내지지 않습니다.
**결과를 읽을 때 알아 둘 것은, 차이 알고리즘이 「가장 짧은 편집 절차」를 찾는다는 성질입니다.** 그런 까닭에 **사람이 「이 문단이 아래로 옮겨 갔다」고 보는 것을, 기계는 「지움」과 「더함」의 짝으로 나타냅니다.** 옮김 자체를 가리키는 기호는 없습니다. 또 하나, 비교는 줄 단위이므로 **한 글자만 다른 줄도 줄 전체가 바뀐 것으로 나옵니다.** 여기서 가장 헷갈리는 것이 줄바꿈 문자나 줄 끝 공백의 차이로, 보기에는 같은데 모든 줄이 바뀐 것으로 표시되기도 합니다. 차이가 터무니없이 크다면 먼저 그것을 의심하십시오.
사용하는 방법
- 원본을 A에 붙여 넣습니다 바꾸기 전의 내용을 넣습니다.
- 고친 것을 B에 붙여 넣습니다 바꾼 뒤의 내용을 넣습니다.
- 색으로 갈린 차이를 읽습니다 **더해진 줄과 지워진 줄이 다른 색으로 나옵니다.**
- 차이가 너무 크면 줄 끝을 의심합니다 **줄바꿈 문자나 줄 끝 공백이 다른 것만으로 모든 줄이 바뀐 것으로 나옵니다.**
더 잘 활용하기 위한 팁
- 설정 파일(.env, YAML, JSON 등)의 변경 전후 내용을 붙여넣기만 하면 어떤 줄이 추가·삭제되었는지 한눈에 확인할 수 있습니다.
- Git이 설치되어 있지 않은 환경에서도 두 버전을 복사해 붙여넣기만 하면 간단한 코드 리뷰나 문서 교정이 가능합니다.
- 줄의 위치만 바뀐 경우는 "이동"이 아니라 삭제+추가로 감지됩니다. 같은 내용의 줄이 다른 위치로 옮겨졌을 뿐이어도 차이로 표시된다는 점에 유의하세요.
- 공백, 줄바꿈, 대소문자 차이까지 한 글자 단위로 엄격하게 비교되므로 들여쓰기만 바뀐 줄도 "변경됨"으로 감지됩니다.
- 긴 문장을 비교할 때는 문단마다 한 줄로 정리한 뒤 붙여넣으면 문단 단위로 차이를 한눈에 보기 쉬워집니다.
이럴 때 쓸 수 있습니다
설정 파일의 변경을 확인할 때
운영에 올리기 전에 뜻한 곳만 바뀌었는지 볼 수 있습니다.
글을 다듬은 결과를 맞대어 볼 때
**초고와 고친 글을 나란히 놓으면 어디에 손이 갔는지 한눈에 따라갈 수 있습니다.**
깃 없이 검토할 때
버전 관리에 들어 있지 않은 파일도 붙여 넣기만 하면 견줄 수 있습니다.
출력이 되풀이되는지 확인할 때
같은 처리를 두 번 돌린 결과를 견주어 어긋남이 없는지 확인할 수 있습니다.
차이 비교 용어
- 더해진 줄
- B에만 있는 줄입니다.
- 지워진 줄
- A에만 있는 줄입니다. **자리만 옮긴 줄도 지움과 더함의 짝으로 나타납니다.**
- 줄 단위 비교
- 줄을 한 덩어리로 다루는 비교입니다. **한 글자만 달라도 줄 전체가 바뀐 것으로 나옵니다.**
- 줄바꿈 문자
- 줄의 끝을 나타내는 문자로, 윈도우는 CRLF를, 유닉스 계열은 LF를 씁니다. **이 차이가 모든 줄의 차이로 드러나기도 합니다.**
- 헝크
- 차이 가운데 변경이 한데 모인 한 덩어리를 가리킵니다.
- 문맥
- 바뀐 줄의 위아래에 곁들이는, 달라지지 않은 줄입니다. 자리를 가늠하기 쉽도록 보여 줍니다.
자주 묻는 질문
여담 ― LCS(최장 공통 부분열)로 차이를 구하는 원리
두 텍스트의 차이를 감지하는 알고리즘으로는 1970년대 IBM의 컴퓨터 과학자 유진 마이어스(Eugene Myers)가 발표한 "마이어스 차이 알고리즘"이 널리 알려져 있습니다. Git이나 SVN 같은 주요 버전 관리 시스템의 `diff` 명령어는 이 계열의 알고리즘을 채택하고 있으며, 줄 단위의 추가·삭제를 효율적으로 감지합니다. 이 도구도 같은 발상을 바탕으로 최장 공통 부분열(LCS)을 구해 변경 사항을 최소한으로 좁혀냅니다.
최장 공통 부분열(LCS)이란 두 수열(여기서는 줄의 나열) 양쪽에 순서대로 공통으로 나타나는 부분열 중 가장 긴 것을 말합니다. 두 텍스트의 차이는 이 LCS에 포함되지 않는 줄을 "삭제" 또는 "추가"로 간주해 구하며, LCS가 길수록 화면에 표시되는 변경 사항은 줄어듭니다. 동적 계획법(DP)이라는 알고리즘 기법을 사용하면 줄 수가 많은 텍스트라도 현실적인 시간 안에 계산할 수 있습니다.
diff 알고리즘에는 약점도 있습니다. 어떤 줄이 단순히 다른 위치로 이동했을 뿐인 경우, 대부분의 구현은 이를 "이동"으로 감지하지 않고 "삭제"와 "추가"의 조합으로 표시합니다. 줄 순서가 크게 뒤바뀐 텍스트를 비교하면 실제 변경량보다 차이가 더 많아 보이는 것은 이 때문입니다. 이런 특성을 알아두면 차이 결과를 읽을 때 오해가 줄어듭니다.