Notice
Recent Posts
Recent Comments
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

개발지식 먹는 하마 님의 블로그

[내일배움캠프 72일차] 이메일 인증 코드를 Redis로 관리하는 이유 본문

TIL

[내일배움캠프 72일차] 이메일 인증 코드를 Redis로 관리하는 이유

devhippo 2025. 6. 2. 21:06

인증 코드를 어떤 DB에서 관리할 것인가

이메일로 인증 코드를 발급하는 기능을 구현하기 전, 인증 코드를 어떤 DB에서 관리할 것인가에 대한 설계 과정이 필요하였다.


인증 코드는 휘발되어도 괜찮은 데이터인가?

개인적으로 인증 코드가 너무 자주 휘발되는 것은 당연히 프로그램의 신뢰성을 떨어뜨릴 것이다.

그러나, 인증코드는 어차피 짧은 시간 동안만 유효하고
혹여 서버 오류로 발급된 코드가 누락되더라도 다시 발급받으면 되는 데이터라고 생각했다.

따라서, 인증코드를 휘발되어도 괜찮은 데이터라고 판단하였다.


로컬 캐시 Vs 글로벌 캐시

인증코드가 휘발되어도 괜찮다는 판단을 내린 후 무엇으로 이를 관리할지 고민을 했을 때, Redis를 생각하였다.

  • 인메모리 기반으로 인증코드를 빠르게 조회할 수 있다.
  • TTL 기능으로 만료 키 삭제에 대한 별도의 로직이 필요 없다.

분산 구조에 대해 확장성이 뛰어나다는 점과 다중 서버 환경에서 일관성을 유지할 수 있다는 장점도 있지만 
현재 프로젝트는 분산 시스템은 고려하지 않고 있었기 때문에 우선 해당 장점은 고려하지 않았다.

 

??? : 로컬 캐시를 사용해 보는 건 어떤가요

인증코드를 Redis를 사용해서 관리하려고 한다는 계획을 밝혔을 때,
한 팀원 분이 그렇다면 로컬 캐싱을 사용하는 것은 어떤가라고 의견을 제시해 주셨다.

로컬 캐시(ehcache, caffeine cache)에 대한 내용을 찾아봤을 때,
Redis 선택 시 고려했던 TTL 같은 기능도 있었고 글로벌 캐시보다 조회속도가 더 빠르다는 장점이 있었다.
위와 같이 인증코드의 특성상 휘발되어도 괜찮기 때문에 로컬 캐시를 사용해도 괜찮을 것 같다는 생각이 들었다.

 

??? : 여러분은 CI 관점을 놓치고 있습니다

기술 사용에 대한 의사결정이 타당한지 튜터님의 의견을 구하였다.
튜터님께서는 우리가 고려한 내용이 모두 맞지만 지속적인 배포(CI) 관점을 놓치고 있다는 조언을 해주셨다.

 

지속적인 배포의 관점에서
로컬 캐시와 글로벌 캐시가 어떤 시점에 데이터가 휘발되는지를
놓치고 있다.


최근에는 지속적인 배포를 중시한다.
어떤 기업은 1시간에 6번을 배포하는 경우도 있다.

이때, 로컬 캐시를 사용하게 되면 배포를 할 때마다 데이터가 휘발된다.
반면, 글로벌 캐시는 Redis 서버가 다운되지 않는다면 배포를 할 때마다 데이터가 휘발되지는 않는다.


따라서 우리는 처음 생각했던 방법인 글로벌 캐시 Redis로 발급된 인증코드를 관리하기로 하였다.