
현재 A1BnB 프로젝트는 사용자의 로그인 시에 JWT Access 토큰과 Refresh 토큰을 발급해준다. 이때, Refresh 토큰은 인메모리 데이터베이스인 Redis 통해 관리하므로 EC2 인스턴스에서 사용할 Redis가 필요한 상황이다.

AWS ElastiCache는 완전 관리형 인메모리 데이터 스토어 및 캐시 서비스로서, 현재 Redis, Memcached를 지원한다. Redis에 관해서는 이전에 다뤘으므로 생략하고,
ElastiCashe의 Redis Cashe에서 지원하는 클러스터 모드에 대해 알아보자.
클러스터 모드는 Redis 데이터베이스를 확장하고 고가용성을 제공하는 기능이다. 활성화 시 Redis의 성능과 용량을 수평적으로 확장할 수 있으며, 이는 고가용성과 대규모 데이터 처리 요구를 충족시키는 데 도움이 된다.
주요 특징은 다음과 같다.
자동 샤딩: 데이터를 자동으로 여러 노드에 분산쉬운 확장성: AWS 관리 콘솔이나 API를 통해 샤드의 수를 쉽게 추가하거나 제거 가능데이터 분산 처리: 데이터가 여러 샤드에 분산되어 저장되므로, 데이터 처리 작업이 분산되어 병렬로 수행. 시스템의 처리량을 향상시키고, 응답 시간을 단축으로 이어짐고사용성: 각 샤드의 마스터 노드에 장애가 발생하면, 자동 장애 조치(failover)가 발생하여 슬레이브 노드가 마스터 노드의 역할을 인계받음. 데이터의 지속적인 가용성과 애플리케이션의 안정적인 운영을 보장
이제 Redis 캐시를 생성해보자!
AWS ElastiCashe -> Redis 캐시 생성
최대한 과금 요소를 베재하기 위한 설정이다.
(서버리스 방식은 Default로 암호화됨을 유의하자.)
생성을 마치면 다음과 같이 엔드포인트를 확인할 수 있다. 참고로 ElastiCashe는 같은 VPC 그룹을 공유하는 EC2 인스턴스가 아니라면 접근이 불가하다.

EC2 인스턴스에서 실행중인 내 스프링 컨테이너에서 ElastiCache를 연결하려면 몇 가지 작업이 필요하다.
먼저 EC2 인스턴스의 보안그룹 인바운드에 6379 포트를 추가하고

redis 캐시의 보안그룹에 EC2 보안그룹을 추가하자.

- yum install -y gcc
- wget http://download.redis.io/redis-stable.tar.gz && tar xvzf redis-stable.tar.gz && cd redis-stable && make
- cp /home/ec2-user/redis-stable/src/redis-cli /usr/bin
일련의 과정에 따라 설치하게 되면.. ElastiCashe와 연결되게 된다!
redis-cli -h {엔드포인트} -p 6379
이제 스프링과의 연동을 위해 설정 파일을 작성하자.
스프링 부트 3.X.X 이상을 이용중이라면 꼭 spring.data.redis로 설정해야한다!
spring.data.redis.host={엔드포인트}
spring.data.redis.port=6379
sudo docker run --name spring-app -p 8080:8080 localhost:5000/spring:latest
Redis의 연결은 로그인 수행을 통해 확인할 수 있다.


로그도 확인해보자.

RedisService의 setRefreshToken 메서드가 동작함을 확인할 수 있다.
public void setRefreshToken(String username, String refreshToken, Long expiration) {
redisTemplate.opsForValue().set(username, refreshToken, expiration, TimeUnit.MILLISECONDS);
}
https://docs.aws.amazon.com/ko_kr/AmazonElastiCache/latest/red-ug/nodes-connecting.html