아카이브/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에 다양한 필요 정보들을 저장하고 관리하기로 함.