본문 바로가기

아카이브/Mine Villages

Game Villages 로그인 로직 고민

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