Java 애플리케이션을 활용한 Redis 클라이언트 연동 및 데이터 타입 실무

환경 구성 및 의존성 설치

Redis 서버가 로컬 또는 원격 환경에서 실행 중임을 가정하고, Java 기반 프로젝트에서 외부 스토어 접근을 위한 라이브러리 설치를 먼저 수행합니다. Maven 관리를 통해 필요한 종속성을 정의하며, 본 가이드에서는 Jedis와 Redisson 두 가지 주요 클라이언트를 활용하여 비교 분석합니다.

pom.xml 파일 내부의 <dependencies> 영역에 다음 내용을 추가하여 빌드 시점에 패키지를 로드합니다. 최신 안정적인 버전을 선정하여 호환성과 안정성을 확보하였습니다.

<!-- Redisson Client -->
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.23.4</version>
</dependency>

<!-- Jedis Client -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.4.3</version>
</dependency>

<!-- Spring Data Redis Abstraction -->
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>2.7.17</version>
</dependency>

연결 테스트 및 기본 명령어 구현

설정된 라이브러리를 사용하여 실제 네트워크 연결이 성공하는지 검증하고, 문자열, 맵, 집합, 큐 등 다양한 데이터 구조를 다루는 샘플 코드를 작성합니다. 클래스 구조를 명확히 구분하여 각 클라이언트의 특징을 파악할 수 있도록 재구성하였습니다.

다음 예시는 main 메서드 내에서 두 가지 방식을 병행하거나 선택적으로 실행하며, 리소스 누수가 방지되도록 주의 깊게 처리합니다.

package com.example.redis.integration;

import org.redisson.Redisson;
import org.redisson.config.Config;
import redis.clients.jedis.Jedis;

import java.util.HashSet;
import java.util.LinkedList;
import java.util.Map;
import java.util.Set;
import java.util.Queue;

public class RedisOperationDemo {

    public static void main(String[] args) {
        // --- Jedis 를 통한 단순 KV 저장소 테스트 ---
        testJedisStringOperation();

        // --- Redisson 을 통한 분산 컬렉션 테스트 ---
        testRedissonCollections();
    }

    private static void testJedisStringOperation() {
        String host = "localhost";
        int port = 6379;

        // Jedis 인스턴스 생성 및 자동 리소스 정리 권장
        try (Jedis client = new Jedis(host, port)) {
            System.out.println("[Jedis] 커넥션 풀 연결 확인됨.");

            // 특정 키에 대한 문자열 값 기록
            String sessionKey = "user_session_info";
            String sessionValue = "Active_User_ID_1001";
            client.set(sessionKey, sessionValue);

            // 기록된 값 조회 및 출력
            String retrievedData = client.get(sessionKey);
            System.out.println("[Jedis] 조회 결과 (" + sessionKey + "): " + retrievedData);

            String cacheKey = "temp_config_value";
            String cacheVal = client.get(cacheKey);
            System.out.println("[Jedis] 캐시 상태 (" + cacheKey + "): " + (cacheVal != null ? cacheVal : "없음"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void testRedissonCollections() {
        Config config = new Config();
        config.useSingleServer()
              .setConnectionPoolSize(32)
              .setAddress("redis://127.0.0.1:6379");

        RedissonClientManager manager = new RedissonClientManager(config);

        try {
            // 1. Concurrent Map 을 이용한 동적 데이터 매핑
            manager.processConcurrentMap("employee_registry", 
                Map.of("emp_001", "Kim Minho", "emp_002", "Lee Jieun"));

            // 2. Set 을 이용한 중복 제거 데이터 관리
            Set<String> accessLogSet = manager.createUniqueLogSet("web_access_logs");
            accessLogSet.add("login_success");
            accessLogSet.add("logout_fail");
            accessLogSet.add("login_success"); // 중복 입력 시 무시됨
            
            System.out.println("[Redisson] 로그 세트 크기: " + accessLogSet.size());

            // 3. Queue 를 이용한 순차 작업 처리
            Queue<String> taskQueue = manager.initializeTaskQueue("daily_jobs");
            taskQueue.offer("send_email");
            taskQueue.offer("sync_db");
            taskQueue.offer("generate_report");
            
            // 대기 중인 작업 확인
            System.out.println("[Redisson] 대기 작업 현황: " + taskQueue);
            System.out.println("[Redisson] 다음 작업 대상: " + taskQueue.peek());

        } finally {
            // 자원 반환 및 종료 처리
            manager.closeConnections();
        }
    }

    // Redisson 연동을 감싸는 헬퍼 객체 (리팩토링 적용)
    static class RedissonClientManager {
        private final Redisson redisson;

        public RedissonClientManager(Config conf) {
            this.redisson = Redisson.create(conf);
        }

        @SuppressWarnings("unchecked")
        public void processConcurrentMap(String keyName, Map data) {
            org.redisson.api.RMap remoteMap = redisson.getMap(keyName);
            remoteMap.putAll(data);
            System.out.println("[Redisson] 맵 동기화 완료: " + remoteMap.keySet());
        }

        public Set<String> createUniqueLogSet(String setName) {
            return redisson.getSet(setName);
        }

        public Queue<String> initializeTaskQueue(String queueName) {
            return redisson.getQueue(queueName);
        }

        public void closeConnections() {
            redisson.shutdown();
        }
    }
}

태그: java Redis jedis Redisson maven

7월 4일 01:59에 게시됨