텍스트 Diff 비교기

두 텍스트를 라인별로 비교하여 차이점을 하이라이트합니다.

원본 텍스트 (A)

4줄

비교 텍스트 (B)

4줄

Diff 결과

  • 추가+2
  • 삭제-2
  • 동일2
  1. 1 첫 번째 줄
  2. 2-두 번째 줄
  3. 2+수정된 두 번째 줄
  4. 3 세 번째 줄
  5. 4-네 번째 줄
  6. 4+추가된 다섯 번째 줄

추가 2줄, 삭제 2줄, 동일 2줄

결과 공유하기

텍스트 Diff 비교기는 두 텍스트를 라인 단위로 비교하여 추가/삭제/변경된 부분을 시각적으로 하이라이트합니다. LCS(Longest Common Subsequence) 알고리즘을 사용하여 정확한 차이를 감지합니다. 코드 리뷰, 문서 수정 확인, 번역본 비교 등에서 두 텍스트의 차이점을 빠르게 파악할 수 있습니다.

실생활 예시

이럴 때 이렇게 계산해요.

  • 코드 변경사항 확인

    사례 01

    기존 코드와 수정된 코드를 비교하여 어떤 줄이 추가/삭제되었는지 확인합니다.

    Diff 비교기로 변경사항을 시각적으로 파악하여 코드 리뷰 효율을 높일 수 있습니다.

  • 문서 버전 비교

    사례 02

    계약서나 정책 문서의 이전 버전과 최신 버전을 비교하여 수정된 조항을 빠르게 파악합니다. 수백 줄의 문서에서 변경된 부분만 하이라이트로 확인합니다.

    문서 전체를 다시 읽지 않아도 변경된 부분만 집중적으로 검토할 수 있습니다.

  • 번역 텍스트 비교

    사례 03

    같은 원문의 두 가지 번역본을 비교하여 표현 차이를 분석합니다. 어떤 문장이 다르게 번역되었는지 줄 단위로 확인합니다.

    번역 품질 검수 시 두 번역본의 차이점을 빠르게 파악하여 최적의 번역을 선택할 수 있습니다.

  • 설정 파일 변경 추적

    사례 04

    서버 설정 파일(nginx.conf, .env 등)의 변경 전후를 비교하여 어떤 설정값이 추가/변경/삭제되었는지 확인합니다.

    설정 변경으로 인한 장애 원인을 빠르게 파악하고 복구할 수 있습니다.

  • SQL 쿼리 변경 확인

    사례 05

    최적화 전후의 SQL 쿼리를 비교하여 JOIN 조건, WHERE 절, 인덱스 힌트 등의 변경사항을 확인합니다.

    쿼리 최적화 과정에서 변경 사항을 명확히 추적하여 성능 개선 효과를 분석할 수 있습니다.

자주 묻는 질문

궁금한 거 모아 봤어요. 눌러서 펼쳐 보세요.

Diff 알고리즘은 어떻게 동작하나요?

LCS(최장 공통 부분수열) 알고리즘으로 두 텍스트에서 공통되는 가장 긴 부분을 찾고, 나머지를 추가 또는 삭제로 분류합니다. Git의 diff 기능과 동일한 원리입니다.

최대 몇 줄까지 비교할 수 있나요?

성능을 위해 각 텍스트는 1,000줄까지 비교합니다. 일반적인 코드 파일이나 문서 비교에 충분한 용량입니다.

줄 단위 비교와 문자 단위 비교의 차이는 무엇인가요?

줄 단위 비교는 한 줄 전체를 변경 단위로 봅니다. 한 글자만 바뀌어도 해당 줄 전체가 변경으로 표시됩니다. 문자 단위 비교는 줄 내에서 바뀐 문자만 정확히 표시하지만, 처리 시간이 더 오래 걸립니다.

공백이나 빈 줄 차이를 무시할 수 있나요?

코드 비교 시 들여쓰기 변경이나 빈 줄 추가/삭제는 의미 없는 차이인 경우가 많습니다. 이러한 경우 비교 전에 양쪽 텍스트의 공백을 정규화하면 의미 있는 변경점만 확인할 수 있습니다.

Git diff와 이 도구의 차이점은 무엇인가요?

Git diff는 파일 시스템의 버전 간 차이를 보여주는 명령어이고, 이 도구는 임의의 두 텍스트를 직접 붙여넣기하여 비교합니다. Git을 사용하지 않는 환경이나 간단한 텍스트 비교에 유용합니다.

Unified diff 형식이란 무엇인가요?

변경 전후 컨텍스트를 함께 보여주는 diff 출력 형식입니다. +로 추가된 줄, -로 삭제된 줄을 표시하며, @@ 기호로 변경 위치를 나타냅니다. 패치 파일과 코드 리뷰에서 널리 사용됩니다.

계산 원리

텍스트 Diff의 핵심은 LCS(Longest Common Subsequence, 최장 공통 부분수열) 알고리즘입니다. 두 수열 X(길이 m)와 Y(길이 n)가 주어졌을 때, 양쪽에 공통으로 포함되면서 순서가 유지되는 가장 긴 부분수열을 찾습니다. 이 문제는 동적 프로그래밍(DP)으로 O(mn) 시간과 공간에 해결됩니다.

DP 테이블 L[i][j]는 X의 처음 i개 원소와 Y의 처음 j개 원소의 LCS 길이를 저장합니다. X[i]=Y[j]이면 L[i][j] = L[i-1][j-1] + 1, 다르면 L[i][j] = max(L[i-1][j], L[i][j-1])입니다. 테이블을 역추적하여 실제 LCS를 복원하고, LCS에 포함되지 않는 원소를 추가(+) 또는 삭제(-)로 분류합니다.

Myers의 diff 알고리즘(1986)은 편집 거리(edit distance)를 최소화하는 최단 편집 스크립트를 O(ND) 시간에 찾습니다. N은 두 텍스트의 총 길이, D는 차이(편집 거리)입니다. 대부분의 실제 텍스트는 차이가 적으므로(D << N), 이 알고리즘은 실무에서 매우 빠르게 동작합니다. Git의 diff도 이 알고리즘을 기반으로 합니다.

용어 사전

Diff
두 텍스트의 차이점을 감지하고 표시하는 것으로, 추가/삭제/변경된 부분을 시각적으로 구분합니다.
LCS (Longest Common Subsequence)
두 수열에서 공통으로 포함되고 순서가 유지되는 가장 긴 부분수열로, diff 알고리즘의 핵심 개념입니다.
편집 거리 (Edit Distance)
한 텍스트를 다른 텍스트로 변환하기 위해 필요한 최소 연산(삽입, 삭제, 치환) 횟수입니다.
동적 프로그래밍 (Dynamic Programming)
큰 문제를 작은 하위 문제로 나누어 결과를 저장하면서 풀어나가는 알고리즘 설계 기법입니다.
Unified Diff
변경 전후의 컨텍스트를 함께 보여주는 diff 출력 형식으로, +/- 기호로 추가/삭제 줄을 표시합니다.
컨텍스트 라인 (Context Line)
diff 출력에서 변경되지 않은 줄로, 변경 위치의 주변 맥락을 보여줘 변경 사항을 쉽게 이해하도록 돕습니다.
패치 (Patch)
diff 결과를 파일에 적용하여 원본을 수정본으로 변환하는 것으로, 코드 배포와 협업에서 사용됩니다.