Java에서 바코드 및 QR 코드를 사용하여 파일에 디지털 서명 추가하는 방법

소개

파일이 digital signature java를 사용해 변조되지 않았음을 증명하는 방법이 궁금했나요? 혹은 복잡한 암호화 설정 없이 프로그래밍 방식으로 문서를 인증할 방법이 필요했나요? 전통적인 디지털 서명은 특정 사용 사례에 과도할 수 있습니다. 때로는 아카이브, 백업 또는 자동화된 워크플로를 다룰 때 파일 무결성을 확인할 수 있는 가볍고 스캔 가능한 방법만 있으면 충분합니다. 바로 바코드와 QR 코드 서명이 그런 경우에 적합합니다.

이 튜토리얼에서는 GroupDocs.Signature를 사용해 Java에서 디지털 서명을 구현하는 방법을 배웁니다. 백업 시스템 및 소프트웨어 배포에 최적화된 TAR 아카이브 서명에 중점을 두지만, 이 기술은 다양한 문서 형식에도 적용됩니다. 문서 관리 시스템을 구축하든 파일에 추가 보안 레이어를 추가하든, 여기서 필요한 모든 정보를 얻을 수 있습니다.

얻을 수 있는 것:

  • Java에서 바코드 및 QR 코드 서명을 구현한 작동 예제
  • 각 서명 유형을 언제 사용해야 하는지에 대한 이해(및 이유)
  • 일반적인 서명 문제에 대한 실용적인 해결책
  • 오늘 바로 사용할 수 있는 실제 통합 패턴
  • 프로덕션 시스템을 위한 성능 최적화 팁

그럼 시작해봅시다—암호학 학위는 필요 없습니다.

빠른 답변

  • Java에서 바코드 서명을 처리하는 라이브러리는? GroupDocs.Signature for Java.
  • 어느 서명 유형이 더 많은 데이터를 저장할 수 있나요? QR 코드(최대 4,296개의 알파벳 문자).
  • 100 MB 이상의 큰 TAR 파일을 서명할 수 있나요? 예—백그라운드 스레드를 사용하고 JVM 힙을 늘리세요.
  • 인터넷 연결이 필요합니까? 아니요, 라이브러리는 완전히 오프라인에서 작동합니다.
  • 프로덕션에 라이선스가 필요합니까? 예, 유효한 GroupDocs.Signature 라이선스가 필수입니다.

디지털 서명 Java란?

Digital signature java는 Java로 생성된 파일에 바코드나 QR 코드와 같은 검증 가능한 시각 토큰을 직접 삽입해 파일의 진위와 무결성을 증명하는 과정입니다. 이 시각 토큰을 첨부함으로써 개발자는 파일이 서명된 이후 변경되지 않았음을 사람도 읽을 수 있는 방식으로 빠르게 확인할 수 있으며, 동시에 GroupDocs.Signature API를 통해 프로그램적으로 검증할 수 있습니다.

왜 바코드 또는 QR 코드 서명을 사용하나요?

GroupDocs.Signature는 PDF, DOCX, XLSX, HTML, PNG, TAR50개 이상의 입력 및 출력 형식을 지원하며, 전체 파일을 메모리에 로드하지 않고도 수백 페이지 문서를 처리할 수 있습니다. 바코드와 QR 코드는 스캔 가능한 자체 포함 인증 증명을 제공하여 내부 워크플로에서 외부 인증 기관이 필요하지 않게 합니다.

전제 조건

  • GroupDocs.Signature for Java Library – 버전 23.12 이상
  • Java Development Kit (JDK) – 버전 8 이상
  • IDE – IntelliJ IDEA, Eclipse 또는 Java 호환 편집기
  • 기본 Java 지식 – 클래스와 import에 익숙해야 합니다

환경 설정

프로젝트에 GroupDocs.Signature를 추가하는 것은 간단합니다. 빌드 도구를 선택하세요:

Maven (pom.xml에 추가):

<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-signature</artifactId>
    <version>23.12</version>
</dependency>

Gradle (build.gradle에 추가):

implementation 'com.groupdocs:groupdocs-signature:23.12'

수동 다운로드: Maven이나 Gradle를 사용하지 않나요? GroupDocs.Signature releases에서 JAR 파일을 직접 받아 클래스패스에 추가하세요.

라이선스 획득

GroupDocs는 유연한 라이선스 옵션을 제공합니다:

  • 무료 체험: 테스트에 최적—신용카드 필요 없음. 여기 시작
  • 임시 라이선스: 평가 기간을 더 늘리고 싶나요? 개발 중 전체 기능을 사용하려면 임시 라이선스 요청
  • 프로덕션 라이선스: 배포 준비가 되면 필요에 맞는 라이선스 구매

추가 유용한 링크

프로 팁: 먼저 무료 체험으로 솔루션을 프로토타이핑하고, 커밋하기 전 더 많은 시간이 필요하면 임시 라이선스를 확보하세요.

GroupDocs.Signature for Java 설정

Signature 클래스는 GroupDocs.Signature의 모든 서명 작업에 대한 진입점입니다. 메모리에 로드된 단일 파일을 나타내며, 시각 서명을 추가·검색·삭제하는 메서드를 제공합니다.

TAR 파일을 가리키는 Signature 인스턴스를 생성합니다. 이렇게 하면 파일이 메모리로 로드되어 처리됩니다:

import com.groupdocs.signature.Signature;

public class InitializeSignature {
    public static void main(String[] args) {
        Signature signature = new Signature("your-document-path");
        // Additional setup and usage here...
    }
}

중요: 작업이 끝난 후에는 반드시 Signature 객체를 닫으세요(또는 try‑with‑resources 사용) – 큰 파일에서 메모리 누수를 방지할 수 있습니다.

바코드와 QR 코드 서명 선택하기

어떤 서명 유형을 사용해야 할지 고민되나요? 아래 간단한 결정 가이드를 참고하세요:

요소바코드 (Code128)QR 코드
데이터 용량~80자최대 4,296개의 알파벳 문자
읽기 방식바코드 스캐너 필요스마트폰 카메라로 가능
공간 효율성가로로 더 컴팩트정사각형 영역 필요
추천 용도간단한 ID, 타임스탬프, 짧은 코드URL, JSON 데이터, 상세 메타데이터
오류 보정최소내장(손상 시 복구 가능)

경험 법칙:

  • 빠르게 스캔 가능한 ID나 타임스탬프가 필요하면 바코드를 사용하세요.
  • 풍부한 데이터를 삽입하거나 스마트폰 호환성이 필요하면 QR 코드를 사용하세요.
  • 최대한의 중복성과 감사성을 원한다면 두 가지를 모두 결합하세요.

구현 가이드

바코드로 TAR 아카이브 서명

왜 바코드로 서명하나요?

바코드는 컴팩트하고 스캔이 쉬워 TAR 아카이브에 적합합니다. 타임스탬프, 버전 번호, 사용자 ID 또는 체크섬 값을 삽입해 빠르게 검증할 수 있습니다.

단계

1. 서명 초기화
먼저 TAR 파일에 대한 Signature 인스턴스를 생성합니다:

import com.groupdocs.signature.Signature;

final Signature signature = new Signature("path/to/your/archive.tar");

프로 팁: 100 MB 이상의 큰 TAR 파일은 백그라운드 스레드에서 서명 작업을 실행해 UI 응답성을 유지하세요.

2. 바코드 옵션 구성
BarcodeSignature 클래스가 바코드 내용, 유형 및 배치를 정의합니다. BarcodeOptions 객체에 이러한 설정을 지정합니다:

import com.groupdocs.signature.options.sign.BarcodeSignOptions;
import com.groupdocs.signature.domain.barcodes.BarcodeTypes;

BarcodeSignOptions bcOptions = new BarcodeSignOptions("12345678", BarcodeTypes.Code128);
bcOptions.setLeft(100);  // X position in pixels
bcOptions.setTop(100);   // Y position in pixels

BarcodeOptions를 사용해 바코드의 시각적 모양과 위치를 지정할 수 있습니다.
BarcodeTypesCode128, Code39 등 지원되는 바코드 심볼을 열거한 enum입니다.

무슨 일이 일어나고 있나요?

  • "12345678"은 바코드에 인코딩되는 데이터이며, 실제 ID·타임스탬프·검증 코드로 교체하면 됩니다.
  • BarcodeTypes.Code128은 데이터 용량과 스캔 신뢰성 사이의 균형을 제공합니다.
  • 위치 값(100, 100)은 바코드를 좌상단 모서리에서 100 px 떨어진 곳에 배치합니다.

원할 수 있는 커스터마이징 옵션:

bcOptions.setWidth(200);        // Barcode width in pixels
bcOptions.setHeight(50);        // Barcode height in pixels
bcOptions.setForeColor(Color.BLACK);  // Barcode color
bcOptions.setBackgroundColor(Color.WHITE);  // Background color

3. 문서 서명 및 저장
서명 작업을 실행하고 서명된 아카이브를 저장합니다:

import com.groupdocs.signature.domain.SignResult;

String outputFilePath = "output/path/SignWithBarcode/archive_signed.tar";
SignResult signResult = signature.sign(outputFilePath, bcOptions);

반환된 SignResult 객체는 작업 성공 여부와 서명이 배치된 위치를 알려줍니다.
흔한 실수: sign() 호출 전에 출력 디렉터리가 존재하는지 확인하세요. 라이브러리는 상위 디렉터리를 자동으로 생성하지 않습니다.

QR 코드로 TAR 아카이브 서명

QR 코드를 언제 사용하나요?

구조화된 데이터(JSON, XML) 저장, 검증 URL 삽입, 스마트폰 스캔 지원이 필요할 때 QR 코드가 빛을 발합니다.

단계

1. 서명 초기화
앞과 동일하게 Signature 인스턴스를 생성합니다:

final Signature signature = new Signature("path/to/your/archive.tar");

2. QR 코드 옵션 구성
삽입하려는 데이터를 사용해 QR 코드를 설정합니다:

import com.groupdocs.signature.options.sign.QrCodeSignOptions;
import com.groupdocs.signature.domain.qrcodes.QrCodeTypes;

QrCodeSignOptions qrOptions = new QrCodeSignOptions("12345678", QrCodeTypes.QR);
qrOptions.setLeft(400);  // X position
qrOptions.setTop(400);   // Y position

QrCodeTypes는 생성할 QR 코드 유형을 지정하는 enum이며, 표준 QR, DataMatrix, Aztec 등을 포함합니다.

실제 예시 – 검증 데이터를 담은 JSON 페이로드 삽입:

String verificationData = "{\"version\":\"1.0\",\"timestamp\":\"2025-01-02T10:30:00Z\",\"user\":\"john.doe\"}";
QrCodeSignOptions qrOptions = new QrCodeSignOptions(verificationData, QrCodeTypes.QR);

QR 코드 유형 옵션:

  • QrCodeTypes.QR – 가장 일반적인 표준 QR 코드
  • QrCodeTypes.DataMatrix – 작은 데이터에 더 컴팩트
  • QrCodeTypes.Aztec – 곡면에 적합

3. 문서 서명 및 저장
바코드와 동일한 방식으로 서명 과정을 완료합니다:

String outputFilePath = "output/path/SignWithQRCode/archive_signed.tar";
SignResult signResult = signature.sign(outputFilePath, qrOptions);

성능 참고: QR 코드 생성은 오류 보정 계산 때문에 바코드보다 약간 느리지만, 대부분의 사용 사례에서는 몇 밀리초 차이로 무시할 수 있습니다.

다중 서명으로 TAR 아카이브 서명

왜 다중 서명을 사용하나요?

  • 중복성 – 하나의 서명이 손상돼도 다른 서명으로 검증 가능
  • 다양한 대상 – 스캐너용 바코드, 스마트폰용 QR 코드
  • 계층형 데이터 – 바코드에 빠른 ID, QR 코드에 상세 메타데이터
  • 규정 준수 – 일부 규제는 여러 검증 방법을 요구

단계

1. 서명 초기화
앞과 동일하게 초기화합니다:

final Signature signature = new Signature("path/to/your/archive.tar");

2. 다중 옵션 구성
두 서명 유형을 모두 생성하고 리스트에 결합합니다:

import java.util.ArrayList;
import java.util.List;

// Set up barcode (reusing from earlier example)
BarcodeSignOptions bcOptions = new BarcodeSignOptions("12345678", BarcodeTypes.Code128);
bcOptions.setLeft(100);
bcOptions.setTop(100);

// Set up QR code (different position to avoid overlap)
QrCodeSignOptions qrOptions = new QrCodeSignOptions("12345678", QrCodeTypes.QR);
qrOptions.setLeft(400);
qrOptions.setTop(400);

// Combine them
List<com.groupdocs.signature.options.sign.SignOptions> listOptions = new ArrayList<>();
listOptions.add(bcOptions);
listOptions.add(qrOptions);

프로 팁: 서명 위치를 전략적으로 배치하세요—코너나 방해되지 않는 영역이 TAR 아카이브에 가장 적합합니다.

3. 문서 서명 및 저장
옵션 리스트를 sign() 메서드에 전달합니다:

String outputFilePath = "output/path/SignWithMultipleSignatures/archive_signed.tar";
SignResult signResult = signature.sign(outputFilePath, listOptions);

GroupDocs는 각 서명을 순차적으로 처리해 문서 메타데이터에 삽입합니다. 리스트 순서는 검증에 영향을 주지 않습니다.

실제 사용 사례

1. 소프트웨어 배포 파이프라인

시나리오: 소프트웨어 패키지를 TAR 아카이브로 배포하고 변조되지 않았음을 증명해야 함.
솔루션: JSON 페이로드를 포함한 QR 코드로 각 릴리스를 서명합니다:

String releaseData = String.format(
    "{\"version\":\"%s\",\"buildDate\":\"%s\",\"sha256\":\"%s\"}",
    version, buildDate, checksum
);

이유: 사용자는 QR 코드를 스캔해 설치 전 패키지 무결성을 확인할 수 있어 GPG 키 관리가 필요 없습니다.

2. 자동 백업 시스템

시나리오: 일일 백업 TAR 아카이브에 감사 추적이 필요함.
솔루션: 백업 타임스탬프와 서버 ID를 담은 바코드를 추가합니다:

String backupId = String.format("SRV01-%s", LocalDateTime.now().format(formatter));
BarcodeSignOptions bcOptions = new BarcodeSignOptions(backupId, BarcodeTypes.Code128);

이유: 아카이브를 열지 않고도 시각적으로 백업 진위를 빠르게 확인할 수 있습니다.

3. 문서 관리 시스템

시나리오: 아카이브된 법률 문서에 변조 방지 검증이 필요함.
솔루션: 동일 아카이브에 바코드(빠른 스캔)와 QR 코드(상세 메타데이터)를 모두 사용합니다.

4. 공급망 추적

시나리오: 파일 패키지를 여러 조직을 통해 추적해야 함.
솔루션: 추적 URL이 포함된 QR 코드를 삽입해 검증 API와 연결합니다:

String trackingUrl = "https://verify.yourcompany.com/track/" + uniqueId;
QrCodeSignOptions qrOptions = new QrCodeSignOptions(trackingUrl, QrCodeTypes.QR);

일반적인 문제와 해결책

Issue 1: 서명 후 “Signature Not Found”

증상: sign()은 성공했지만 서명이 보이지 않음.
원인: 잘못된 배치, 원본 파일 덮어쓰기, TAR 뷰어 제한 등.
해결책:

// Always verify the signing succeeded
SignResult result = signature.sign(outputFilePath, bcOptions);
if (result.getSucceeded().size() > 0) {
    System.out.println("Signature added successfully at: " + outputFilePath);
} else {
    System.err.println("Signing failed: " + result.getFailed());
}

// Use absolute paths to avoid confusion
String absolutePath = new File(outputFilePath).getAbsolutePath();

Issue 2: 대용량 TAR 파일에서 OutOfMemoryError

증상: 500 MB 이상 아카이브에서 JVM이 충돌함.
해결책: 힙 크기(-Xmx)를 늘리고 Signature 객체를 즉시 해제하세요:

java -Xmx2G -jar your-application.jar

또는 청크 처리 구현:

// For very large files, consider signing metadata separately
// rather than embedding in the TAR itself

Issue 3: 서명 데이터가 잘려 나감

증상: 긴 문자열이 잘려 나감.
원인: Code128 용량 초과(≈ 80 자).
해결책: 더 긴 페이로드는 QR 코드로 전환:

// Bad: Too much data for Code128
BarcodeSignOptions bcOptions = new BarcodeSignOptions(veryLongString, BarcodeTypes.Code128);

// Good: Use QR code instead
QrCodeSignOptions qrOptions = new QrCodeSignOptions(veryLongString, QrCodeTypes.QR);

Issue 4: 라이선스 검증 오류

증상: LicenseException 또는 프로덕션에서 “Trial version” 경고 발생.
해결책: Signature 인스턴스를 만들기 전에 라이선스를 로드하세요:

import com.groupdocs.signature.License;

License license = new License();
license.setLicense("path/to/GroupDocs.Signature.lic");

// Now create signatures
Signature signature = new Signature("document.tar");

프로 팁: 애플리케이션 시작 시 한 번만 라이선스를 로드하고, 서명 작업마다 로드하지 마세요.

Issue 5: 위치 값이 예상대로 작동하지 않음

증상: 서명이 예상치 못한 위치에 표시됨.
원인: 픽셀과 포인트 혼동.
해결책: GroupDocs는 기본적으로 픽셀을 사용합니다. 정밀 배치를 위해:

bcOptions.setLeft(100);  // 100 pixels from left edge
bcOptions.setTop(100);   // 100 pixels from top edge

// If you need percentage-based positioning:
bcOptions.setHorizontalAlignment(HorizontalAlignment.Center);
bcOptions.setVerticalAlignment(VerticalAlignment.Center);

통합 패턴

Pattern 1: REST API 서비스

서명을 마이크로서비스로 노출:

@RestController
@RequestMapping("/api/signature")
public class SignatureController {
    
    @PostMapping("/sign")
    public ResponseEntity<SignatureResponse> signFile(
            @RequestParam("file") MultipartFile file,
            @RequestParam("signatureType") String type) {
        
        try {
            // Save uploaded file temporarily
            File tempFile = File.createTempFile("upload-", ".tar");
            file.transferTo(tempFile);
            
            // Sign based on type
            Signature signature = new Signature(tempFile.getAbsolutePath());
            
            SignOptions options = type.equals("barcode") 
                ? createBarcodeOptions() 
                : createQROptions();
            
            String outputPath = generateOutputPath();
            SignResult result = signature.sign(outputPath, options);
            
            // Return signed file
            return ResponseEntity.ok(new SignatureResponse(outputPath, result));
            
        } catch (Exception e) {
            return ResponseEntity.status(500).body(null);
        }
    }
}

Pattern 2: 배치 처리 파이프라인

여러 아카이브를 파이프라인에서 서명:

public class BatchSigner {
    
    public void signArchiveBatch(List<File> archives) {
        ExecutorService executor = Executors.newFixedThreadPool(4);
        
        archives.forEach(archive -> {
            executor.submit(() -> {
                try {
                    signSingleArchive(archive);
                } catch (Exception e) {
                    logger.error("Failed to sign: " + archive.getName(), e);
                }
            });
        });
        
        executor.shutdown();
        executor.awaitTermination(1, TimeUnit.HOURS);
    }
    
    private void signSingleArchive(File archive) throws Exception {
        Signature signature = new Signature(archive.getAbsolutePath());
        // ... signing logic
    }
}

Pattern 3: 이벤트‑드리븐 아키텍처

아카이브가 생성될 때 서명 트리거:

@Component
public class ArchiveCreatedListener {
    
    @EventListener
    public void onArchiveCreated(ArchiveCreatedEvent event) {
        CompletableFuture.runAsync(() -> {
            signArchive(event.getFilePath());
        });
    }
    
    private void signArchive(String filePath) {
        // ... signing logic
    }
}

성능 고려 사항

Memory Management

문제: 각 Signature 인스턴스가 전체 파일을 메모리에 로드합니다.
모범 사례:

// Bad: Creating multiple instances for same file
Signature sig1 = new Signature("file.tar");
Signature sig2 = new Signature("file.tar");  // Loads again!

// Good: Reuse the instance
try (Signature signature = new Signature("file.tar")) {
    signature.sign(output1, options1);
    signature.sign(output2, options2);  // Same instance, different outputs
}

File Size Optimisation

  • 작은 파일(< 10 MB) – 동기식으로 서명.
  • 중간 파일(10‑100 MB) – 백그라운드 스레드 사용.
  • 큰 파일(> 100 MB) – 메타데이터만 별도로 서명하거나 스트리밍 API 활용 고려.

Signature Type | Time per Document

서명 유형문서당 시간
단일 바코드50‑100 ms
단일 QR 코드100‑200 ms
다중 서명150‑300 ms

최적화 팁: 수천 개 파일을 처리할 경우 배치를 묶고 스레드 풀을 사용하세요(위 배치 처리 패턴 참조).

Library Updates

GroupDocs는 정기적으로 성능 개선을 릴리스합니다. 주요 배포 전에 항상 changelog를 확인하세요.

업데이트 전략:

  1. 스테이징 환경에서 새 버전 테스트
  2. 깨지는 변경 사항 검토
  3. 실제 파일로 벤치마크 수행
  4. 점진적으로 롤아웃

프로덕션을 위한 모범 사례

1. 라이선스 상태 검증

License license = new License();
if (!license.isLicensed()) {
    logger.warn("Running in trial mode - features may be limited");
}

2. 견고한 오류 처리 구현

try {
    signature.sign(outputPath, options);
} catch (Exception e) {
    logger.error("Signature failed", e);
    // Don't just swallow exceptions - log or re-throw
    throw new SignatureException("Failed to sign document", e);
}

3. 의미 있는 서명 데이터 사용

// Bad: Meaningless ID
new BarcodeSignOptions("12345678", BarcodeTypes.Code128);

// Good: Self-documenting data
String signatureData = String.format("DOC-%s-%s", 
    docType, 
    LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME)
);
new BarcodeSignOptions(signatureData, BarcodeTypes.Code128);

4. 서명 형식 버전 관리
임베드된 JSON에 버전 번호를 포함해 향후 검증 로직을 대비하세요:

String qrData = String.format(
    "{\"v\":\"1.0\",\"type\":\"archive\",\"timestamp\":\"%s\"}", 
    timestamp
);

5. 실제 파일로 테스트 – 프로덕션 규모 아카이브로 항상 검증해 메모리·성능 문제를 사전에 발견하세요.

결론

이제 digital signature java를 바코드와 QR 코드를 활용해 구현할 탄탄한 기반을 갖추었습니다. 배운 내용은 다음과 같습니다:

  • 바코드와 QR 코드 서명을 사용해 TAR 아카이브(및 기타 문서) 서명 방법
  • 특정 요구에 맞는 서명 유형 선택 기준
  • 프로덕션에 진입하기 전 흔히 마주치는 문제 해결 방법
  • REST API, 배치 처리, 이벤트‑드리븐 시스템을 위한 실제 통합 패턴
  • 파일 크기에 관계없이 처리할 수 있는 성능 최적화 기법

다음 단계:

  1. search() 메서드로 서명 검증을 탐색해 보세요.
  2. 다른 문서 형식도 시도해 보세요—GroupDocs.Signature는 PDF, DOCX, XLSX, PNG 등을 지원합니다.
  3. 서명 외관(색상, 크기, 테두리 등)을 커스터마이징하세요.
  4. 서명을 프로그램matically 검증하는 API를 구축해 보세요.

GroupDocs.Signature의 힘은 이 가이드를 훨씬 넘어섭니다. 고급 기능(텍스트 서명, 이미지 서명, 메타데이터 추출 등)을 확인하려면 전체 문서를 살펴보세요.

질문이 있거나 구현 사례를 공유하고 싶다면 다른 개발자들과 도움을 주고받을 수 있는 GroupDocs 커뮤니티 포럼에 참여하세요.

자주 묻는 질문

Q: TAR 아카이브 외에 다른 문서를 서명할 수 있나요?
A: 물론입니다! GroupDocs.Signature는 PDF, DOCX, XLSX, PNG 등 50개 이상의 파일 형식을 지원합니다. Signature 생성자에서 파일 확장자만 바꾸면 됩니다.

Q: 서명 후 어떻게 검증하나요?
A: search() 메서드를 사용해 서명을 찾고 검증합니다:

Signature signature = new Signature("signed-document.tar");
BarcodeSearchOptions searchOptions = new BarcodeSearchOptions();
List<BarcodeSignature> signatures = signature.search(BarcodeSignature.class, searchOptions);

Q: 서명이 변조에 대해 안전한가요?
A: 바코드와 QR 코드 서명은 시각적 검증을 제공하지만, 디지털 인증서처럼 강력한 암호학적 보안은 제공하지 않습니다. 최대 보안을 위해 전통적인 PKI와 결합하거나 서명 해시를 외부 데이터베이스에 저장하세요.

Q: 서명에 저장할 수 있는 최대 데이터 양은?

  • Code128 바코드: 약 80개의 알파벳 문자
  • QR 코드(Version 40): 최대 4,296개의 알파벳 문자 또는 7,089개의 숫자 문자

Q: 서명 외관을 커스터마이징할 수 있나요?
A: 네! 색상, 크기, 테두리 등을 제어할 수 있습니다:

bcOptions.setForeColor(Color.BLUE);
bcOptions.setBackgroundColor(Color.YELLOW);
bcOptions.setBorder(new Border());
bcOptions.getBorder().setColor(Color.RED);
bcOptions.getBorder().setWeight(2);

Q: 파일을 두 번 서명하면 어떻게 되나요?
A: 각 sign() 호출은 새로운 서명을 추가합니다. 기존 서명을 교체하려면 먼저 delete() 메서드로 삭제하세요.

Q: 큰 파일을 메모리 부족 없이 처리하려면?
A: JVM 힙(-Xmx)을 늘리고 Signature 객체를 즉시 해제하며, 멀티 기가바이트 아카이브는 메타데이터만 별도 서명하는 방식을 고려하세요.

Q: 서명에 인터넷 연결이 필요합니까?
A: 아니요. 라이브러리를 설치하면 완전히 오프라인에서 작동합니다.


마지막 업데이트: 2026-05-21
테스트 환경: GroupDocs.Signature 23.12 for Java
작성자: GroupDocs

관련 튜토리얼