DevOps & Cloud/AWS

AWS ElastiCache

foreverWon 2025. 12. 10. 13:48
목차

    1. AWS ElastiCache란?

    ElastiCache는 AWS에서 제공하는 관리형 인메모리 캐시 서비스

    즉, 서버에서 직접 Redis나 Memcached를 설치/운영할 필요 없이, AWS가 캐시 서버를 관리해주고 스케일링, 장애 복구, 모니터링 등을 지원해줌

    장점

    • 실시간 성능: 모든 데이터가 메모리에 저장되기 때문에 읽기/쓰기 속도가 빠름
    • 자동 관리: 백업, 패치, 모니터링, 장애 복구 등 AWS가 알아서 해줌
    • 유연한 스케일링: 트래픽이 늘어나면 노드 추가/제거 가능
    • 고가용성: Multi-AZ 배포 지원으로 장애 발생 시 자동 페일오버

    2. ElastiCache를 사용하는 이유

    1. 애플리케이션 서버 메모리 부담 감소
      • 이전에 ECS 태스크에 App + Redis를 같이 띄우면서 OOM 발생
      • → ElastiCache로 분리하면 앱 서버는 더 적은 메모리로 운영 가능
    2. 실시간 데이터 처리
      • 채팅, 세션, 인기 콘텐츠 등 빠른 읽기/쓰기가 필요한 서비스에서 활용
    3. 관리 편의성
      • 서버 직접 운영 없이 AWS가 자동으로 관리
      • 패치, 모니터링, 백업, 장애 복구를 자동 처리

    3. 지원 엔진 비교: Redis OSS vs Memcached vs Valkey

    특징 Redis OSS Memcached Valkey (오타 가능, AWS에서는 잘 안씀)
    데이터 구조 문자열, 리스트, 해시, 셋, 정렬셋 등 다양한 자료구조 문자열(key-value) 단순 거의 Redis와 비슷하지만 AWS 공식 문서에서는 거의 Redis/Memcached만
    영속성 가능 (RDB/AOF) 불가 N/A
    Pub/Sub,
    트랜잭션
    가능 불가 N/A
    고가용성 Redis Cluster + Multi-AZ 지원 단순 샤딩, 복제 제한적 N/A
    사용 사례 세션 관리, 캐시, 메시지 브로커, 리더보드 단순 캐시, 조회 중심 데이터 거의 없음

    현실적으로 AWS에서 선택지는 Redis OSS 혹은 Memcached 둘 중 하나

    대부분 실시간 세션/채팅/같이 보기 서비스라면 Redis를 선택

    4. Redis 선택 기준

    • 세션 공유, Pub/Sub, 트랜잭션이 필요한 경우 → Redis
    • 단순 캐시용, 데이터 구조가 문자열밖에 필요 없는 경우 → Memcached
    • 영속성 필요 여부 → Redis는 디스크 백업 가능
    • 스케일링 방식
      • Redis Cluster로 샤딩 가능
      • Memcached는 노드 단위 수평 확장

    5. ElastiCache Redis 사용 방법

    5-1) 인스턴스 생성

    1. AWS 콘솔 → ElastiCache → Redis → 클러스터 생성
    2. 클러스터 모드: 클러스터 모드 활성화 (샤딩 가능) 또는 단일 노드
    3. 노드 타입 선택 (메모리 용량 기준)
    4. VPC, Subnet 선택 (ECS와 같은 VPC에 배치)
    5. 보안 그룹: ECS Task Security Group에서 Redis 포트(6379) 접근 허용

    5-2) 애플리케이션 연동

    1. Spring Boot Redis 의존성
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    
    1. application.yml
    spring:
      redis:
        host: <ELASTICACHE_ENDPOINT>
        port: 6379
        password: <OPTIONAL_PASSWORD_IF_SET>
    
    • ECS Task에서 애플리케이션이 VPC 내부 Redis 엔드포인트에 접근 가능하도록 보안 그룹 연결 필요

    6. 고려해야 할 사항

    • 비용: Redis 노드 메모리 + I/O 비용
    • 노드 타입/메모리: 애플리케이션 트래픽과 데이터 크기 기준으로 적절히 선택
    • 보안: VPC 내 배치 + 보안 그룹으로 접근 제어
    • 백업/복제: Multi-AZ 배포, 스냅샷 백업
    • TTL 정책: 캐시 데이터 만료 시간 설정 필수
    • 모니터링: CloudWatch로 CPU, 메모리, 연결 수, evictions 확인

    요약

    • ECS App + Redis 같은 태스크 → OOM 발생 → Redis 분리 필요
    • ElastiCache를 쓰면 AWS가 Redis 관리 + 스케일링 + 백업 제공
    • 실시간 세션/같이 보기 서비스 → Redis 선택
    • Memcached는 단순 캐시용, Pub/Sub나 영속성 필요하면 Redis
    • 연동 시 VPC, 보안 그룹, Redis 엔드포인트, Spring Boot 설정 필수
    • Multi-AZ, 백업, TTL, CloudWatch 모니터링 고려

    7. 수정사항

    • ElastiCache 서버리스는 PW가 없음!
    • redis host의 vlaue에 aws 콘솔의 endpoint를 작성하는데 이때 포트번호를 작성하면 안됨! 자동으로 6379로 매핑되기 때문!
    728x90