Java 문서 비교 방법 – GroupDocs API 가이드

When you need to Java 문서 비교—whether they are contracts, technical specifications, or PDF reports—doing it manually is risky and time‑consuming. This tutorial shows you how to automate the comparison process with the GroupDocs.Comparison API, using Java streams to keep memory usage low and performance high. You’ll see the full workflow, learn how to accept or reject specific changes, and discover best‑practice tips for large‑scale deployments.

빠른 답변

  • Java 문서 비교에 가장 적합한 라이브러리는 무엇인가요? GroupDocs.Comparison (Java)
  • DOCX, PDF, TXT 파일을 비교할 수 있나요? 예 – API는 50개 이상의 형식을 지원합니다.
  • 스트림 기반 비교가 메모리 효율적인가요? 네, 확실히; 전체 파일을 로드하는 대신 청크 단위로 데이터를 처리합니다.
  • 특정 변경을 수락하거나 거부하려면 어떻게 해야 하나요? Use ChangeInfo.setComparisonAction(...) on the returned changes.
    ChangeInfo.setComparisonAction(...)는 감지된 변경에 대해 동작(수락 또는 거부)을 설정합니다.
  • 프로덕션에 라이선스가 필요합니까? 예 – 상업용 라이선스를 사용하면 워터마크가 제거되고 전체 기능을 사용할 수 있습니다.

GroupDocs와 함께 “how to compare java”란 무엇인가요?

두 문서를 비교기에 로드하고 getChanges()를 호출하면 – API는 삽입, 삭제, 서식 조정, 이미지 수정 등을 포함한 상세한 차이 목록을 몇 밀리초 안에 반환합니다. 이 답변은 핵심 아이디어를 제공합니다: 라이브러리는 diff 알고리즘을 추상화하므로 스트림을 제공하고 결과 ChangeInfo 객체를 처리하기만 하면 됩니다.
getChanges()는 각 차이를 설명하는 ChangeInfo 객체 목록을 반환합니다.

GroupDocs.Comparison은 문서 간 차이를 감지하는 Java 라이브러리입니다. 50개 이상의 입력 및 출력 형식을 지원하며, 전체 문서를 메모리에 로드하지 않고 수백 페이지 파일을 처리하고, 프로그래밍 방식으로 수락하거나 거부할 수 있는 구조화된 변경 목록을 반환합니다.

Java 문서 비교에 GroupDocs.Comparison을 사용하는 이유는 무엇인가요?

정확한 변경 추적, 크로스 포맷 지원, 그리고 200페이지 PDF에서도 RAM 사용량을 100 MB 이하로 유지하는 스트림 기반 처리를 제공합니다. 이 라이브러리는 표준 4코어 서버에서 100페이지 문서를 2 초 이하로 처리하므로 CI 파이프라인, 문서 관리 시스템, 실시간 diff 결과가 필요한 마이크로서비스에 적합합니다.

전제 조건

  • JDK 8+ (11+ 권장)
  • Maven 또는 Gradle (예제는 Maven 사용)
  • Java 스트림 및 예외 처리에 대한 기본 지식
  • 지원되는 형식(DOCX, PDF, TXT 등) 중 두 개의 샘플 문서

Pro tip: 스트림이 처음이라면 코드 스니펫에 각 단계에 대한 인라인 주석이 포함되어 있습니다.

GroupDocs.Comparison 설정: 기본

Maven 구성

Add the repository and dependency to your pom.xml:

<repositories>
   <repository>
      <id>repository.groupdocs.com</id>
      <name>GroupDocs Repository</name>
      <url>https://releases.groupdocs.com/comparison/java/</url>
   </repository>
</repositories>

<dependencies>
   <dependency>
      <groupId>com.groupdocs</groupId>
      <artifactId>groupdocs-comparison</artifactId>
      <version>25.2</version>
   </dependency>
</dependencies>

라이선스 이해 (비즈니스 측면)

GroupDocs operates on a commercial model, but they’re fairly flexible:

  • Free trial – 평가 및 소규모 프로젝트에 이상적입니다.
  • Temporary licenses – 개념 증명 작업에 적합합니다 (get one here)
  • Commercial licenses – 프로덕션에 필요합니다 (pricing details)

트라이얼은 출력 문서에 워터마크를 추가하지만, API 동작은 동일합니다.

핵심 구현: 스트림 기반 문서 비교

전체 워크플로우

  1. Initialize – 소스 문서를 스트림으로 로드합니다.
  2. Compare – 대상 문서 스트림을 추가합니다.
  3. DetectChangeInfo 객체 목록을 가져옵니다.
  4. Decide – 변경을 프로그래밍 방식으로 수락하거나 거부합니다.
  5. Generate – 최종 병합 문서를 출력 스트림에 씁니다.

Step 1: 소스 문서 스트림으로 비교기 초기화

try (InputStream sourceStream = new FileInputStream(sourceFilePath);
     InputStream targetStream = new FileInputStream(targetFilePath);
     OutputStream resultStream = new FileOutputStream(outputFilePath)) {

    Comparer comparer = new Comparer(sourceStream);

왜 스트림인가요? 전체 파일을 로드하는 대신 청크 단위로 데이터를 처리하여 메모리 사용량을 낮춥니다.

Step 2: 비교를 위해 대상 문서 추가

comparer.add(targetStream);

엔진에 이제 두 문서가 모두 로드되어 diff를 시작할 수 있습니다.

Step 3: 변경 감지 및 분석

ChangeInfo[] changes = comparer.getChanges();

ChangeInfo는 삽입, 삭제, 서식 조정, 이미지 변경 등을 나타냅니다.

Step 4: 변경을 프로그래밍 방식으로 수락 또는 거부

changes[0].setComparisonAction(ComparisonAction.REJECT);

일반적인 자동화 패턴:

  • 모든 서식 변경을 수락하고, 내용 편집은 거부합니다.
  • 머리글/바닥글의 변경을 자동으로 거부합니다.
  • 신뢰할 수 있는 작성자만의 변경을 수락합니다.

Step 5: 최종 문서 생성

comparer.applyChanges(resultStream, new ApplyChangeOptions(changes));

ApplyChangeOptions를 사용하면 원본 스타일을 유지하는 등 병합 동작을 세밀하게 조정할 수 있습니다.

실제 적용 사례: 이 기능이 빛나는 곳

  • Legal contract review – 레드라인을 자동으로 표시하고 적절한 검토자에게 전달합니다.
  • Academic paper revisions – 사소한 서식 수정은 수락하고 실질적인 편집은 표시합니다.
  • Software documentation – 클라이언트 코드를 깨뜨릴 수 있는 API 사양 변경을 감지합니다.
  • Regulatory compliance – 정책 업데이트에 대한 감사 추적을 유지합니다.

일반적인 함정 및 회피 방법

메모리 관리 문제

  • Problem: 대용량 PDF에서 Out‑of‑memory 오류 발생.
  • Solution: 항상 try‑with‑resources를 사용하고(as shown), 힙 크기(-Xmx4g 이상)를 모니터링합니다.
try (InputStream source = new FileInputStream(sourcePath)) {
    // comparison logic
}

형식 호환성 이슈

  • Problem: DOCX와 PDF를 비교하면 미묘한 레이아웃 차이를 놓칠 수 있습니다.
  • Solution: 중요한 법률 문서는 동일 형식 비교를 선호합니다.

성능 저하

  • Problem: 시간이 지남에 따라 비교가 느려짐.
  • Solution: 임시 파일을 정리하고, 문서 크기를 제한하며, 배치 작업에 비동기 처리를 고려합니다.

변경 감지 민감도

  • Problem: 사소한 변경이 너무 많음(공백, 글꼴).
  • Solution: 엔진을 구성하여 비핵심 차이를 무시하도록 설정합니다:
CompareOptions options = new CompareOptions();
options.setIgnoreWhitespaces(true);
comparer.compare(outputStream, options);

CompareOptions를 사용하면 비교기가 감지하거나 무시해야 할 변경 유형을 구성할 수 있습니다.

성능 최적화: 프로덕션 준비 팁

  • JVM tuning: G1GC와 적절한 힙(-Xmx8g >100 MB 문서에 사용)을 사용합니다.
  • Asynchronous processing: 비교 작업을 워커 큐에 오프로드합니다.
  • Caching: 자주 비교되는 문서 쌍의 결과를 캐시합니다.
  • Scaling: 로드 밸런서 뒤에서 무상태 마이크로서비스로 비교기를 배포합니다.

문제 해결 가이드

증상진단해결 방법
OutOfMemoryError문서가 힙 용량을 초과함힙을 늘리거나, 청크 처리를 사용하거나, 불필요한 부분을 사전 처리하여 제거합니다
변�� 누락형식 호환성 문제 또는 낮은 민감도형식을 확인하고 CompareOptions를 조정합니다
시간 경과에 따른 속도 저하리소스 누수모든 스트림을 닫고, 임시 디렉터리를 정리합니다

대체 접근 방식 (GroupDocs가 최적이 아닐 때)

  • Apache Tika + custom diff – 무료이지만 더 많은 코드가 필요합니다.
  • Format‑specific libraries – 단일 형식 파이프라인에 적합합니다.
  • Cloud APIs – 유지 관리가 적지만 지연 시간과 데이터 프라이버시 문제가 발생합니다.

자주 묻는 질문

Q: GroupDocs.Comparison이 지원하는 문서 형식은 무엇인가요?
A: DOCX, PDF, PPTX, XLSX, TXT, HTML 등 50개 이상의 형식을 지원합니다. 자세한 내용은 format documentation 를 참조하세요.

Q: 한 번에 두 개 이상의 문서를 비교할 수 있나요?
A: 예. getChanges() 호출 전에 comparer.add()를 여러 번 호출하여 여러 버전을 병합할 수 있습니다.

Q: 암호로 보호된 파일을 어떻게 처리하나요?
A: 암호를 제공하려면 LoadOptions를 사용합니다:

LoadOptions loadOptions = new LoadOptions();
loadOptions.setPassword("your-password");
Comparer comparer = new Comparer(sourceStream, loadOptions);

LoadOptions를 사용하면 문서를 로드할 때 암호와 같은 옵션을 지정할 수 있습니다.

Q: 파일 크기 제한이 있나요?
A: 명확한 제한은 없지만, 파일 크기에 따라 메모리 사용량이 증가합니다. 100 MB 이상의 파일은 힙을 늘리거나 문서를 분할하세요.

Q: 감지할 변경 유형을 사용자 정의할 수 있나요?
A: 물론입니다. CompareOptions를 사용하면 공백, 서식 등을 무시하거나 특정 섹션에만 집중하도록 설정할 수 있습니다.

Q: Docker 컨테이너에서도 작동하나요?
A: 예 – 충분한 메모리를 할당하고 라이선스 파일을 마운트하면 됩니다.

추가 자료


마지막 업데이트: 2026-08-30
테스트 환경: GroupDocs.Comparison 25.2 (Java)
작성자: GroupDocs

관련 튜토리얼