Closed GotPrgmer closed 6 months ago
재발급 요청이 들어오게 될 때, 만료 유무를 체크하게 되는데, DB에 넣으면 안되는지 궁금합니다.
조회 속도는 당연히 빠르면 좋은데, 자주 사용하는 API 또는 추천 법안 기능을 만들게 되었을 때, 그것보다 우선순위가 높을지 고민이 되네요. 당연히 Redis를 쓰면 속도가 빠르지만, 한정된 메모리 자원에서 게다가 저희는 프리티어라 메모리가 1MB밖에 안되는 상황에서 모든 회원의 리프레시 토큰을 메모리에 저장하는 것은 비효율적이라고 생각합니다.
동시성 이슈와 병목현상은 자주 사용하는 API에 대한 정보를 Redis에 올려놓는 것은 일리가 있어 보입니다.
결과적으로는 레디스를 사용하려는 주 이유가 리프레시토큰인데, 프리티어 EC2특성상 메모리가 매우 부족한 상황에서 리프레시토큰을 사용하는 근거가 부족하다고 생각합니다. 자주 조회가 될 다른 API 정보(예를 들어 최큰 조회수가 높은 법안, 의원 등에 대한 정보 등)가 우선순위가 높다고 생각하고, Refresh Token을 레디스에 넣는 것은 애매하다고 생각합니다.
레디스 사용안하게 되면 장점
추가로 자주 사용하는 API의 정보를 리프레시토큰 대신에 레디스에 넣는것도 괜찮을거같습니다. 그렇게 해서 메모리 사용량을 측정해서 메모리가 조금 남는다 싶으면 리프레시로 들어가도 될것도 같구요.
추가로 ElastiCache사용하게 되면 EC2메모리 잡아먹진 않을거같긴합니다.
1-1. 1번에서 언급하였습니다. 1-2리프레시토큰을 DB에 저장한다고 하여 매 요청마다 리프레시 토큰을 확인하는 것이 아니기 때문에, api요청이 느려지는 효과는 없다고 봅니다.
중요한 것은 마지막에 언급하셨다싶이, 현재 트래픽에 따른 CPU, 메모리 사용률에 대한 측정을 하는 것이 중요한 부분으로 작용할 것 같습니다.
추가로 ElasticCahce에 대해 말씀해주셨는데, 찾아 보니, 프리티어로 포함이 되는 부분이네요. 좋은 의견인 것 같습니다. EC2 외부의 메모리를 사용해서 더 많은 메모리를 사용할 수 있게 되는 것인지, 외부노드라 네트워크 비용으로 시간이 오히려 더 걸리지는 않는지 등 생각해보면 좋을 것 같습니다.
정훈님이 정리하신 넘버링에 따른 답변입니다.
1.액세스토큰은 기기별로 엑세스토큰을 들고있는게 맞는데, 리프레시토큰을 서버 DB에서 관리하게 되면 굳이 여러개를 만들 필요가 없지 않나요? 어느 기기에서 접속하던 DB에 있는 리프레시토큰을 업데이트하는 로직으로 가면 되는 거 아닌가 생각을 합니다.
Fix/refresh tokens #182 와 연관된 이슈
1. 내용
1.TTL 때문에 레디스 써야한다는 말 -> (수정) 리프레시토큰을 만료시에 Null을 시키지 않아도 됨.(TTL 사용이 보안과 관련이 없음) -> 만료 후에 재발급 요청이 들어오게 되면 어차피 만료 유무를 체크하기 때문에 리프레시토큰을 초기화시키거나 삭제하지 않아도 된다고 생각.
2. 의논 사항 및 기타
수정 사항 -> 현재 사용자별 리프레시토큰이 하나씩만 저장되는데 사용환경에 따라 토큰은 달라지므로 리프레시토큰을 여러개 받도록 해야함 고로 RDB로 새롭게 테이블을 만들던 레디스로 해야하던 하는데 이슈 토큰을 작성하는 현재 시점에서는 레디스로 구현하는게 좋을 듯 싶다.