Redis Server 구성 검토

codesheep09·2025년 2월 19일
0

1. Redis Server 구성 목적

  • Redis 에는 사용자 토큰 정보가 저장되어 있다.

  • 기존 Redis Server는 API Server에 Docker Container 로 올라가있다. (Redis Master, Replica 2대)

  • 향후 API Server가 트래픽 부하로 인한 Scale Out이 될 경우
    Redis Server도 같이 생성되면서, 데이터 동기화 문제가 발생한다.

따라서 별도의 Redis Server 구성이 필요하다.


2. 구성 방법 검토

  • 운영의 편의성을 위해 docker-compose 또는 Kubernetes 기반으로 구성한다.
    멀티환경(dev/stage/prod)에서 Redis를 손쉽게 구성 및 유지보수 할 수 있다.
  • 초기구성은 t3.medium 3대(Master 1 + Replica 2)
  • 부하 증가시 Read Replica 추가 또는 t3.large 업그레이드
  • 최종적으로 안정적인 운영 필요시 ElaticCache 전환을 고려할 수 있다.

최종적으로는 ElasticCache 도입을 목표로 하고 있어, 이참에 ElasticCache 전환을 검토한다.


3. ElasticCache 전환 검토

  1. AWS 구성 (ElastiCache for Redis)

    • AWS 콘솔에서 ElastiCache > Redis 선택 후 replication group 생성
    • 인스턴스 타입, 네트워크, 보안 그룹, 파라미터 그룹 등 설정 후 생성
    • 엔드포인트와 포트를 확인
  2. Spring Boot 3.x.x 애플리케이션단 구현

    • spring-boot-starter-data-redis 의존성 추가
      implementation 'org.springframework.boot:spring-boot-starter-data-redis'
    • application.yml에 Redis 엔드포인트, 포트, 인증 정보, SSL 설정
      spring:
        redis:
          host: your-elasticache-endpoint.amazonaws.com
          port: 6379
          password: your_redis_auth_password  # 설정한 경우
          ssl: true  # TLS/SSL 사용 시 활성화
      ⚠️ 주의: AWS ElastiCache Redis는 VPC 내에서 운영되므로, 애플리케이션도 같은 VPC 또는 피어링 연결되어야 함.
    • RedisTemplate 또는 캐시 매니저 설정을 통한 데이터 작업 구현
    • JWT 토큰 저장, 조회, 삭제 기능 구현
  3. 추가 고려사항

    기본적으로 application.yml 변경만으로도 동작하지만, 아래 항목을 체크해야 함.

    1. ElastiCache는 Redis Sentinel을 지원하지 않음

      • EC2 내에서 Redis Master-Replica를 Docker로 구성했다면, Sentinel을 이용해 자동 Failover를 처리했을 가능성이 있음.
      • ElastiCache는 AWS 내부적으로 자동 Failover를 제공하지만, Sentinel 기반 클라이언트 설정은 지원하지 않음.
      • 즉, Sentinel 설정이 애플리케이션에 포함되어 있다면 제거해야 함.
    2. Read Replica 연결 방식 변경 필요

      • 현재 Spring Boot 애플리케이션에서 Master/Replica 정보를 개별적으로 등록하는 방식이라면,
      • ElastiCache에서는 별도의 Read Replica 엔드포인트를 제공하지 않기 때문에 Master 엔드포인트만 사용해야 함.

      ✅ 기존 Master/Replica 개별 지정 방식

      spring:
          redis:
              master:
                  host: 127.0.0.1
                  port: 6379
              replicas:
                  - host: 127.0.0.2
                    port: 6380
                  - host: 127.0.0.3
                    port: 6381

      ➡ ElastiCache에서는 Read Replica를 직접 지정할 수 없고, Master 엔드포인트를 통해 자동 라우팅됨.

      ✅ ElasticCache 변경시

      spring:
          redis:
              host: my-redis-cluster.xxxxxx.cache.amazonaws.com
              port: 6379

      ➡ AWS가 내부적으로 Load Balancing을 수행하여 Replica로 자동 분산 처리함.

    3. 네트워크 보안 그룹 설정 (VPC & 보안 그룹)

      • ElastiCache는 VPC 내부에서 운영되므로 애플리케이션 서버(EC2)도 같은 VPC 또는 피어링된 네트워크 내에 있어야 함.

      • AWS 콘솔에서 ElastiCache의 보안 그룹을 확인하고, EC2가 해당 Redis 포트(기본 6379)로 접근할 수 있도록 보안 그룹에서 허용해야 함.

        ✅ AWS 보안 그룹 설정 방법

        1. ElastiCache의 보안 그룹을 확인 (AWS Console → ElastiCache → Clusters → Security Groups)
        2. EC2가 사용 중인 보안 그룹에서 Redis 포트(6379)로 ElastiCache에 접근 허용
    4. Redis Cluster 모드 활성화 여부 확인
      ElastiCache는 Cluster Mode 활성화 여부에 따라 동작 방식이 다름.

      • Cluster Mode 비활성화 (기본값): 단일 엔드포인트 (xxxxxx.cache.amazonaws.com) 제공 → 기존 설정 유지 가능.
      • Cluster Mode 활성화: 다중 샤드 엔드포인트를 제공 → 클라이언트에서 Cluster-aware 설정 필요.

      ➡ 기본적으로 Cluster Mode 비활성화 상태로 운영하는 것이 일반적이므로, 별도 설정이 필요하지 않을 가능성이 높음.


4. Redis 🆚 Valkey❓ 🤔

AWS 에서 Valkey 사용을 적극적으로 권장하고 있다. (저렴한 비용)
그래서 두 가지 비교를 해보았다.

💠 기본개요

특징ElastiCache for RedisElastiCache for Valkey
설명Redis 기반의 인메모리 데이터 스토어Valkey 기반의 인메모리 데이터 스토어 (Redis의 오픈소스 포크)
오픈소스 기반Redis (오픈소스 버전)Valkey (Redis 포크)
AWS 관리형 서비스 지원✅ 지원✅ 지원
호환성Redis API 완벽 지원Redis 7.0과 대부분 호환, 일부 기능 제한
라이선스Redis 소스 코드 기반AWS에서 Redis 소스 코드 포크 (Redis 소스 코드 사용 제한 대응)

💠 주요 차이점

특징ElastiCache for RedisElastiCache for Valkey
출시 시점오래전부터 제공됨2024년 출시
라이선스 이슈Redis의 새로운 라이선스 정책 영향 가능AWS가 직접 관리, 라이선스 이슈 없음
성능 최적화Redis 엔진 최적화 적용AWS 맞춤형 최적화 적용
신규 기능 지원Redis 최신 기능 반영Redis 7.0 기반, 이후 기능은 AWS가 자체 개발
기업 지원Redis, AWS에서 지원AWS에서만 지원

💠 선택 기준

사용 목적추천 서비스
Redis의 최신 기능을 사용해야 하는 경우ElastiCache for Redis
AWS에서 장기적으로 안정적인 Redis 대안을 찾는 경우ElastiCache for Valkey
오픈소스 Redis와 최대한 동일한 환경을 유지해야 하는 경우ElastiCache for Redis
AWS에서 직접 관리하고 라이선스 이슈 없이 사용할 서비스가 필요한 경우ElastiCache for Valkey

💠 결론

  • ElastiCache for Redis: 기존 Redis 환경을 유지하면서 최신 Redis 기능을 사용하고 싶다면 적합.
  • ElastiCache for Valkey: AWS에서 관리하는 안정적인 Redis 포크를 원하고, 장기적으로 AWS 생태계를 활용할 계획이라면 적합.

즉, Redis 최신 기능이 필요하다면 Redis, 장기적인 안정성과 AWS 지원이 중요하다면 Valkey가 유리합니다.


5. Redis Sentinel 🆚 Redis Cluster 비교

항목Redis SentinelRedis Cluster
목적고가용성(High Availability) 보장확장성(Scalability) 및 고가용성 제공
구성 방식Master-Slave 복제 (failover 지원)Sharding(파티셔닝) 및 복제 지원
Failover 지원✅ 가능 (자동 장애 조치)✅ 가능 (마스터 장애 시 슬레이브가 승격됨)
데이터 샤딩❌ 지원 안 함✅ 지원
데이터 저장 방식모든 노드가 동일한 데이터를 가짐데이터가 여러 노드로 분산 저장됨
읽기 부하 분산✅ 슬레이브 노드를 통해 가능✅ 여러 노드에 분산됨
쓰기 확장성❌ 단일 마스터에서만 가능 (수직 확장 필요)✅ 여러 마스터에서 분산 처리 가능 (수평 확장 가능)
클라이언트 복잡성기존 Redis 클라이언트와 동일클라이언트가 클러스터 모드를 지원해야 함
트랜잭션 지원 (MULTI, EXEC)✅ 가능⚠️ 같은 키 슬롯 내에서만 가능
Cross-Slot 명령어 지원✅ 가능❌ 기본적으로 지원 안 함 (Lua 스크립트도 제한됨)
구성 및 운영 난이도✅ 쉬움 (단순한 마스터-슬레이브 구성)❌ 상대적으로 복잡함 (노드 간 데이터 분산 필요)

🔹 선택 기준

선택 기준SentinelCluster
작은 규모의 서비스✅ 적합❌ 불필요
고가용성(H/A) 필요✅ 가능✅ 가능
수직 확장(Scale-up) 필요✅ 가능❌ 지원 안 함
수평 확장(Scale-out) 필요❌ 지원 안 함✅ 가능
트랜잭션(MULTI/EXEC) 필요✅ 가능❌ 제한적 (같은 슬롯 내에서만 가능)
Cross-Slot 명령어 필요✅ 가능❌ 불가능

🔹 결론

  • 작은 규모의 서비스에서 고가용성이 필요하다면 → Redis Sentinel
  • 대량의 데이터를 처리하고 확장이 필요하다면 → Redis Cluster
  • 데이터 샤딩이 필요 없고 안정성이 중요하다면 → Redis Sentinel
  • 쓰기 부하가 크고 여러 마스터 노드가 필요하다면 → Redis Cluster

✅ 추천

  • 초기에는 Sentinel을 사용하다가, 확장성이 필요해지면 Cluster로 전환하는 것이 일반적입니다.
  • 단, 한 번 Cluster로 가면 Sentinel 방식으로 되돌리기가 어렵기 때문에 처음부터 확장성을 고려하는 것이 중요합니다.

🚀 즉, 서비스 규모와 요구 사항에 따라 선택하면 됩니다!

profile
IT 관련 내용들을 정리하는 공간입니다.

0개의 댓글