아카이브/Mine Villages
Game Villages 로그인 로직 고민
verdantjuly
2024. 4. 3. 16:44
728x90
0. 분산환경
분산 환경을 쓰기 때문에 서버 세션만을 사용할 수는 없다. 저장소를 이용해 인증 허가 수단을 공유해야 한다.
1. Redis
빠른 입출력 가능
로그인 실패 횟수를 Redis에 저장 (Key : illegal_UserId, Value : count)
> 일정 횟수 이상일 경우 모든 세션 파기, 사용자에게 알림
로그인 시도 일시와 ip를 Redis에 저장 (Key : illegalAt_UserId, Value : datetime, ip)
> 사용자가 정상접근 하는 경우 로그인 실패횟수 / 로그인 시도 일시 삭제
Key : UUID, Value : UserId로 이루어진 세션키를 이용
2. MySQL
비용이 들고 느림.
비정상적인 접근 시 해당 계정의 최근 접속 정보 (ip, 접속일시)를 한 번에 조회할 수 있음.
일정 횟수 이상일 경우 사용자에게 알림.
논점
Redis 2번 vs MySQL 1번 조회의 문제.
휘발성 정보와 비휘발성 정보의 문제.
기술적 의사결정
로그인 정보 및 비정상적인 접근 기록은 해당 문제가 해결되면 휘발되는 정보이고
로그인 요청마다 MySQL을 조회하게 되면 비용이 증가하므로
Redis에 다양한 필요 정보들을 저장하고 관리하기로 함.