배경 / 문제
작업관리 시스템에 먼저 도입된 휴면 계정 잠금 기능 이후, 사용자 요청에 따라 잠금 해제 기능을 새롭게 개발하게 되었다.
본 시스템은 로그인 시 6자리 인증번호를 발송 및 검증하는 2차 인증 구조를 갖고 있으며, 이 과정은 회원 세션에 인증번호를 저장하고 검증 시 이를 활용하는 방식이다.
하지만 잠금 해제 기능은 세션을 활용하지 않는 별도 경로로 인증이 필요했다.
이에 따라, 로그인과 분리된 인증번호 발급 및 검증 방식이 요구되었다.
해결 방안 검토
잠금 해제 인증번호를 어디서 관리할지가 핵심 이슈였다. 아래와 같은 방안들을 검토하였다
1.
RDB 저장 방식 
•
테이블 설계 및 로직 개발 등 과도한 공수 발생 예상.
•
인증번호는 휘발성 데이터로 DB 적합성 낮음.
2.
Redis 사용 
•
현재는 단일 서버 환경. 분산 캐시 도입은 과도한 설계.
•
운영 부담 증가 우려.
3.
Map 등 내부 필드 직접 관리 
•
관리 포인트 증가 및 유지보수 어려움.
•
인증번호 만료, 삭제 등 직접 구현은 비효율적.
구현
결론적으로 로컬 캐시 기반의 인증번호 관리로 방향을 정했다.
라이브러리는 Caffeine Cache를 선택했다. 주요 이유는 다음과 같다:
•
ehcache 대비 약 3배 빠른 성능
•
낮은 러닝 커브, 충분한 사용자 생태계
•
로컬 캐시로 충분한 단일 서버 환경
ehcache는 향후 복잡한 캐시 조건이 생길 경우 고려 여지 있음
회고
•
휘발성 인증 데이터는 DB나 외부 시스템보다 로컬 캐시가 훨씬 적합.
•
기능 요구사항에 따라 경량화된 구조 선택이 유지보수성과 성능에 긍정적.
•
캐시 전략은 기능 범위와 시스템 구조에 따라 탄력적으로 설계되어야 함.
•
Caffeine 도입으로 인증 처리 속도 향상과 간결한 코드 구조를 모두 확보할 수 있었음.
code