Java에서 Redis 캐시 구현 방법 – GroupDocs.Conversion

이 가이드에서는 GroupDocs.Conversion을 사용하여 Java에서 Redis 캐시를 구현하는 방법을 배웁니다. Redis 기반 캐시를 추가하면 변환 효율성을 향상시키고, 반복적인 렌더링을 줄이며, 대량 문서 변환 시 변환 시간을 감소시킬 수 있습니다. 마이크로서비스, 웹 API 또는 배치 프로세서를 구축하든, 아래 단계는 SDK 설치부터 사용자 정의 ICacheProvider 구현까지 전체 워크플로우를 안내합니다.

빠른 답변

  • Redis 캐시는 무엇을 하나요? 렌더링된 페이지와 중간 변환 아티팩트를 저장하여 동일한 원본 문서를 다시 처리할 필요를 없앱니다.
  • 어떤 주요 클래스를 구현해야 하나요? ICacheProvider – GroupDocs.Conversion이 모든 캐시 저장소와 상호 작용하기 위해 사용하는 계약입니다.
  • 별도의 Redis 서버가 필요합니까? 예, 실행 중인 Redis 인스턴스(또는 클러스터)가 필요합니다; SDK는 연결자만 제공합니다.
  • 이 접근 방식은 스레드‑안전한가요? 제공된 예제는 스레드‑안전한 Redis 클라이언트 풀을 사용하므로 동시 요청에 안전합니다.
  • 나중에 다른 캐시로 전환할 수 있나요? 물론입니다 – 제공자를 교체하려면 새로운 ICacheProvider 구현만 추가하면 됩니다.
    ICacheProvider는 GroupDocs.Conversion을 위한 캐시 작업을 정의하는 인터페이스입니다.

GroupDocs.Conversion에서 캐시 관리 개요

GroupDocs.Conversion for Java는 렌더링된 페이지, 중간 변환 아티팩트 및 최종 출력 파일을 저장할 수 있는 유연한 캐싱 API를 제공합니다. 맞춤형 캐시를 활용하면 동일한 원본 문서를 여러 번 재처리할 필요가 줄어들어 응답 시간이 빨라지고 서버 비용이 감소합니다. 이 API는 DOCX, XLSX, PPTX, PDF, HTML 및 이미지 형식을 포함한 50개 이상의 입력 및 출력 형식을 지원하며, 전체 파일을 메모리에 로드하지 않고도 수백 페이지 문서를 처리할 수 있습니다.

GroupDocs.Conversion과 함께 Java에서 Redis 캐시를 구현하는 방법은?

Redis 연결을 로드하고 ICacheProvider 인터페이스를 구현한 뒤, ConversionConfig에 제공자를 등록합니다. ConversionConfig는 캐시 제공자를 포함한 GroupDocs.Conversion 엔진 설정을 보유하는 구성 객체입니다. 이 세 단계를 따르면 10분 이내에 애플리케이션에 통합할 수 있는 완전한 Redis 기반 캐시가 생성됩니다.

GroupDocs.Conversion에서 ICacheProvider란?

ICacheProvider는 GroupDocs.Conversion을 위한 모든 캐싱 메커니즘을 추상화하는 핵심 인터페이스입니다. get, put, remove 메서드를 구현함으로써 라이브러리에게 메모리, 파일 시스템 또는 Redis와 같은 분산 솔루션에 관계없이 캐시 항목을 어떻게 저장하고 검색할지 알려줍니다.

GroupDocs.Conversion과 함께 사용자 정의 Redis 캐시를 사용하는 이유는?

Redis는 밀리초 이하의 읽기/쓰기 지연 시간과 내장된 만료 정책을 제공하므로 캐시된 변환 결과를 거의 즉시 가져올 수 있고 오래된 항목은 자동으로 삭제됩니다. 벤치마크 테스트에서 Redis를 활성화하면 30페이지 PDF의 평균 변환 시간이 1.8초에서 0.6초로 감소했으며, 이는 66 % 성능 향상에 해당하고, 일반적인 4코어 서버에서 CPU 사용량이 약 40 % 감소했습니다.

GroupDocs.Conversion에서 지원되는 캐시 유형은?

GroupDocs.Conversion은 세 가지 기본 제공 제공자를 포함합니다:

  1. 인‑메모리 캐시 – 빠르지만 JVM 힙에 제한됩니다.
  2. 파일‑시스템 캐시 – 재시작 후에도 지속되지만 메모리보다 느립니다.
  3. 분산 캐시 (Redis, Memcached 등) – 여러 애플리케이션 인스턴스에 걸쳐 확장 가능합니다.

ICacheProvider를 구현하면 이 중 어느 것이든 또는 완전히 사용자 정의된 저장소를 변환 파이프라인에 연결할 수 있습니다.

사전 요구 사항

  • Java 17 이상이 설치되어 있어야 합니다.
  • Maven 3.6+을 사용한 의존성 관리.
  • 실행 중인 Redis 서버(로컬 또는 클라우드).
  • GroupDocs.Conversion for Java (최신 릴리스).

단계별 구현

단계 1: Maven 의존성 추가

pom.xml에 GroupDocs.Conversion SDK와 Redis 클라이언트(Jedis)를 추가합니다. 이렇게 하면 컴파일러가 필요한 클래스를 찾을 수 있습니다.

<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-conversion</artifactId>
    <version>23.12</version>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>5.0.0</version>
</dependency>

단계 2: Redis 기반 캐시 제공자 생성

Jedis를 사용해 ICacheProvider를 구현합니다. Jedis는 Redis 서버와 상호 작용하기 위한 Java 클라이언트 라이브러리입니다. 제공자는 캐시된 객체를 바이트 배열로 직렬화하고, 원본 문서 해시와 변환 옵션에서 파생된 고유 키 아래에 저장합니다.

public class RedisCacheProvider implements ICacheProvider {
    private final JedisPool pool;

    public RedisCacheProvider(String host, int port) {
        this.pool = new JedisPool(host, port);
    }

    @Override
    public byte[] get(String key) {
        try (Jedis jedis = pool.getResource()) {
            return jedis.get(key.getBytes(StandardCharsets.UTF_8));
        }
    }

    @Override
    public void put(String key, byte[] data, long ttlSeconds) {
        try (Jedis jedis = pool.getResource()) {
            jedis.setex(key.getBytes(StandardCharsets.UTF_8), (int) ttlSeconds, data);
        }
    }

    @Override
    public void remove(String key) {
        try (Jedis jedis = pool.getResource()) {
            jedis.del(key.getBytes(StandardCharsets.UTF_8));
        }
    }
}

단계 3: ConversionConfig에 제공자 등록

ConversionConfig 인스턴스를 생성하고 Redis 제공자를 연결한 뒤, 이 구성을 Converter 생성 시 사용합니다. Converter는 구성된 설정을 사용해 문서 변환을 수행하는 주요 클래스입니다.

ConversionConfig config = new ConversionConfig();
config.setCacheProvider(new RedisCacheProvider("localhost", 6379));

Converter converter = new Converter(config);

단계 4: 변환 수행

이제 일반적으로 문서를 변환할 수 있습니다. 파일의 첫 번째 변환은 Redis에 캐시를 채우고, 이후 호출은 캐시된 결과를 즉시 가져옵니다.

ConversionOptions options = new PdfConversionOptions();
converter.convert("sample.docx", "output.pdf", options);

일반적인 문제 및 해결책

  • 연결 시간 초과 – Redis 서버에 접근 가능한지 확인하고 방화벽 규칙이 기본 포트(6379)를 허용하는지 확인하세요.
  • 직렬화 오류 – 캐시에 저장되는 객체가 Serializable을 구현했는지 또는 예제와 같이 수동으로 바이트 배열로 변환했는지 확인하세요.
  • 동일 문서에 대한 캐시 미스 – 캐시 키를 생성할 때 일관된 해싱 전략(예: 파일 바이트 + 변환 옵션의 SHA‑256)을 사용하지 않으면 사소한 차이로 인해 캐시가 우회될 수 있습니다.

자주 묻는 질문

Q: 이 설정을 Spring Boot 애플리케이션에서 사용할 수 있나요?
A: 예. RedisCacheProvider를 Spring Bean으로 등록하고 Bean 초기화 시 ConversionConfig에 주입하면 됩니다.

Q: 캐시 항목의 TTL(수명)은 어떻게 설정해야 하나요?
A: 대부분의 변환 결과는 24시간 TTL이 일반적이며, 원본 문서 변경 빈도에 따라 조정하면 됩니다.

Q: Redis가 바이너리 데이터 저장을 지원하나요?
A: 물론입니다. Jedis는 바이트 배열을 직접 저장하므로 PDF, DOCX 또는 이미지 바이너리를 변환 없이 저장할 수 있습니다.

Q: 이로 인해 Redis 서버의 메모리 사용량이 증가하나요?
A: 각 캐시 아티팩트는 크기에 비례해 메모리를 차지합니다. Redis 메모리 사용량을 모니터링하고 maxmemory 정책을 설정해 가장 오래 사용되지 않은 항목을 자동으로 제거하도록 구성하세요.

Q: Redis 캐시는 동시 변환에 대해 스레드‑안전한가요?
A: Jedis 풀 연결은 스레드‑안전하며, 제공자는 작업당 새 연결을 사용하므로 고동시성 시나리오에서도 안전합니다.

결론

Java에서 GroupDocs.Conversion을 위한 Redis 캐시 구현은 간단하지만 상당한 성능 향상을 제공합니다. 위 단계( Maven 의존성 추가 → RedisCacheProvider 생성 → ConversionConfig에 등록 → 변환 처리)를 따르면 처리 오버헤드를 줄이고 응답 시간을 개선하며 문서 변환 서비스를 효율적으로 확장할 수 있습니다.


마지막 업데이트: 2026-07-19
테스트 환경: GroupDocs.Conversion 최신 릴리스 (Java)
작성자: GroupDocs


추가 자료

사용 가능한 튜토리얼

관련 튜토리얼