개발/AWS

[AWS-ElastiCache] Valkey(Redis) 를 사용해 이메일 인증 코드 관리하기 - 1 (프리티어)

jaein 2025. 11. 14. 18:44

프로젝트에 다음 기능을 신규로 도입했다.

  • 회원가입 및 회원탈퇴 시, 사용자의 이메일로 인증번호를 발송하고 이를 검증하는 이메일 인증 기능
  • 비밀번호 변경 시, 사용자의 이메일로 비밀번호 재설정이 가능한 URL을 발송하는 기능

 

 

처음에는 단순하게 userId, 인증코드, 만료시간, 상태 정도만 DB에 저장하면 되겠지? 라고 생각했다.
그러나 이 방식을 실제로 적용하는 것은 여러 단점이 명확했다.

  1. 인증코드를 확인할 때마다 DB 조회가 반복적으로 발생해 불필요한 I/O 비용이 쌓인다.
  2. 인증 완료 데이터, 만료된 데이터 등이 지속적으로 쌓여 관리 대상이 된다.
  3. 이 불필요 데이터들을 정리하기 위해 주기적 삭제 작업(CRON, Batch Job) 같은 별도 관리 로직을 붙여야 한다.

즉, 단순한 인증코드 검증 작업에 DB를 사용하는 것은 장기적으로 비효율적이라는 판단이 들었다.

 

 

 

 

 

이런 경우에는 고속 처리가 가능한 Redis 와 같은 인메모리 저장소를 사용하는것이 훨씬 효율적이다.

Redis는 데이터를 디스크가 아닌 메모리에 저장하므로, 빠른 실시간 처리가 가능하다는 장점도 있지만,

가장 강력한 기능은 '자동 만료시간 (TTL(Time To Live))' 을 설정할 수 있다는 것이다.

 

SET auth:user123 987654 EX 180

 

위 명령어 처럼 데이터를 저장할 때 만료시간을 걸어줘서 자동 삭제 기능을 사용할 수 있다.

이 TTL 기능 덕분에 불필요한 데이터나 Cron job 을 전혀 신경 쓰지 않아도 된다.

 

 

 

 

 

 

 

 

 

(Redis의 오픈소스 라이선스 이슈로 인해 실제 작업에는 Redis를 포크한 Valkey를 사용하게 되었다)

 

 

 

 

 

 

AWS ElastiCache 의 Valkey 세팅 방법은 아래와 같다.

나는 테스트 용도로 붙여 볼 계획이어서 프리티어 사양으로 세팅했다.

선택에 따라 과금이 발생할 수 있으니 주의해서 설정해야 한다.

 

 

 

ElastiCache에서 '지금 시작' 버튼을 누르고

 

엔진 - Vlakey

배포 옵션 - 노드 기반 캐시

생성 방법 - 클러스터 캐시

 

 

 

 

클러스터 모드 - 비활성화

 

 

 

 

다중 AZ - off

자동 장애 조치 - off

 

 

 

 

노드 유형 - cache.t4g.micro

복제본 개수 - 0

 

 

 

서브넷 그룹 있으면 기존꺼 사용, 없으면 생성

 

 

 

 

 

전송 중 암호화 - 사용 시 ioredis 연결 코드에 tls: {} 옵션 필수

보안 그룹 - 연결할 EC2(API 서버)가 사용중인 보안 그룹 추가

 

 

 

 

 

 

자동 백업 사용 - off

 

 

 

 

 

 

 

 

 

이렇게 클러스터를 생성하면 기본저긴 환경 준비는 끝난다.

다음 글에서는 실제 서버 코드에서 Valkey를 어떻게 적용했는지 작성할 예정이다.