[회고] Stateless한 인증번호 인증

태그
Review
3 more properties

배경 / 문제

작업관리 시스템에 먼저 도입된 휴면 계정 잠금 기능 이후, 사용자 요청에 따라 잠금 해제 기능을 새롭게 개발하게 되었다.
본 시스템은 로그인 시 6자리 인증번호를 발송 및 검증하는 2차 인증 구조를 갖고 있으며, 이 과정은 회원 세션에 인증번호를 저장하고 검증 시 이를 활용하는 방식이다.
하지만 잠금 해제 기능은 세션을 활용하지 않는 별도 경로로 인증이 필요했다.
이에 따라, 로그인과 분리된 인증번호 발급 및 검증 방식이 요구되었다.

해결 방안 검토

잠금 해제 인증번호를 어디서 관리할지가 핵심 이슈였다. 아래와 같은 방안들을 검토하였다
1.
RDB 저장 방식
테이블 설계 및 로직 개발 등 과도한 공수 발생 예상.
인증번호는 휘발성 데이터로 DB 적합성 낮음.
2.
Redis 사용
현재는 단일 서버 환경. 분산 캐시 도입은 과도한 설계.
운영 부담 증가 우려.
3.
Map 등 내부 필드 직접 관리
관리 포인트 증가 및 유지보수 어려움.
인증번호 만료, 삭제 등 직접 구현은 비효율적.

구현

결론적으로 로컬 캐시 기반의 인증번호 관리로 방향을 정했다.
라이브러리는 Caffeine Cache를 선택했다. 주요 이유는 다음과 같다:
ehcache 대비 약 3배 빠른 성능
낮은 러닝 커브, 충분한 사용자 생태계
로컬 캐시로 충분한 단일 서버 환경
ehcache는 향후 복잡한 캐시 조건이 생길 경우 고려 여지 있음

회고

휘발성 인증 데이터는 DB나 외부 시스템보다 로컬 캐시가 훨씬 적합.
기능 요구사항에 따라 경량화된 구조 선택이 유지보수성과 성능에 긍정적.
캐시 전략은 기능 범위와 시스템 구조에 따라 탄력적으로 설계되어야 함.
Caffeine 도입으로 인증 처리 속도 향상과 간결한 코드 구조를 모두 확보할 수 있었음.
code