https://chaereemee.tistory.com/41
Redis를 활용한 인증번호 캐싱 시스템 구현
아이디 찾기의 리팩토링 을 해보려고 한다. 기존 방식의 문제점 인증 번호를 데이터베이스 테이블에 저장하고, 최신 데이터를 조회하여 인증번호를 검증하는 방식은 테스트하며 구현하기
chaereemee.tistory.com
이번엔 Redis를 사용한 인증번호 캐싱 시스템을 AWS ElastiCache를 통해 리팩토링한 과정을 기록하고자 한다.
이전 포스팅에서는 Docker를 통해 로컬 환경에서 Redis를 사용했지만, 이제 실제 운영 환경에서는 AWS ElastiCache를 적용해 더 안정적이고 효율적인 시스템을 구축하게 되었다.
🫥 문제였던 것
1) redis-cli 버전 문제로 TLS 연결 실패 ➡️ 최신 버전의 redis-cli로 업데이트
(⤵️ 아래 진행 과정에서 설명)
Redis의 TLS(Transport Layer Security)는 보안을 위해 중요한 요소이다.
하지만, 초기에는 로컬에서 사용하던 redis-cli 버전이 TLS를 지원하지 않아 TLS 연결이 어려웠다.
최신 버전의 redis-cli 업그레이드한 후에야 TLS 연결이 가능해졌다.
2) 로컬 Spring Boot에서 EC2를 통한 ElastiCache 연결
AWS ElastiCache를 처음 도입할 때, 로컬 개발 환경에서 ElastiCache에 직접 연결하려고 시도했다.
하지만 AWS ElastiCache는 VPC 내부에 위치해 있어 로컬에서 직접 접근할 수 없었고,
이를 해결하기 위해 SSH 터널링을 사용해 EC2 인스턴스를 프록시로 활용하는 방식으로 진행하다가
...
결국 로컬에서의 Spring Boot 애플리케이션을 EC2에 배포하여
ElastiCache Redis와의 통신도 성공했다.
3) t2.micro 인스턴스 성능 한계 ➡️ t3.medium 인스턴스 업그레이드
처음에는 비용 절감 차원에서 t2.micro 인스턴스를 사용해 봤지만,
Spring Boot 애플리케이션을 구동하기에 성능이 부족했다.
t3.medium으로 업그레이드하면서 더 원활한 서비스 운영이 가능해졌다.
진행 과정 (성공💙)
보안 그룹 설정
ElasticCache에 접근하려는 보안 그룹에서 Redis 포트(6379)에 대한 인바운드 규칙을 허용해야 한다.
프로토콜 : TCP
포트 : 6379
소스 : 클라이언트(EC2)의 IP 주소 또는 해당 보안 그룹
VPC 설정
EC2 인스턴스와 ElastiCache Redis가 동일한 VPC 안에 있는지 확인해야 한다.
(만약, 서로 다른 VPC에 있다면 VPC 피어링이 설정되어 있어야 한다.)
Redis CLI를 통한 연결
redis-cli 명령어를 사용하여 Redis 서버와 연결해야 한다.
redis-cli -h (ElastiCache Redis 엔드포인트) -p 6379
근데! 하지만! 그러나! however! but! nevertheless!!
서버리스 Redis 는 기본적으로 TLS 연결을 요구할 수 있다.
따라서 redis-cli로 서버리스 Redis에 접근하려면 TLS를 활성화 하고 연결해야한다.
TLS를 사용하지 않는 경우 기본적으로 연결이 차단되거나 작동하지 않을 수 있다.
redis-cli --tls -h (ElastiCache Redis 엔드포인트) -p 6379
--tls 옵션을 사용하려고 했을 때
"
Unrecognized option or bad number of args for: ‘–tls’
"
라는 오류 메시지가 발생했다면 사용 중인 redis-cli 버전이 TLS를 지원하지 않기 때문이다
TLS를 지원하는 최신 버전의 redis-cli를 설치해야 한다.
Spring Boot 애플리케이션 코드에도 TLS 설정이 필요하다. Spring에서 Lettuce 클라이언트를 사용해 Redis와 통신할 수 있으며, TLS 설정은 다음과 같이 구성했다.
Serverless Redis의 특성을 아시나요
보안 및 성능 최적화를 위해 일부 Redis 명령어 사용을 제한한다고 한다!
특히 KEYS * 와 같은 명령어는 성능 문제를 일으킬 수 있기에
대체 명령어로 SCAN 0을 사용한다.
결론
로컬 개발 환경에서 Docker로 Redis를 사용하던 방식에서 벗어나, 실제 운영 환경을 위해 AWS ElastiCache를 통해 더 안정적이고 확장성있는 Redis 환경을 구축할 수 있었다.
특히, 서버리스 Redis는 AWS가 관리하는 덕분에 서버 관리 부담이 없고, Redis 성능을 그대로 활용할 수 있었다.
'팀프로젝트_PetHarmony' 카테고리의 다른 글
EC2 Redis (1) | 2024.10.06 |
---|---|
Redis를 활용한 인증번호 캐싱 시스템 구현 (0) | 2024.09.30 |
Redis 도입 시도 ➡️ 보류 (2) | 2024.09.26 |
🔍 데이터베이스 최적화 및 페이지네이션 적용 (4) | 2024.09.23 |
🔍 데이터베이스 수준 랜덤 샘플링으로 성능 개선 (6) | 2024.09.21 |