일 년 전 · 장성호 님의 새로운 댓글
토큰 기반 인증에서 리프레쉬 토큰 관리
JWT로 토큰 기반 인증을 구현할 때 궁금한게 좀 생겼습니다! 리프레쉬 토큰은 DB에 저장해볼까 했는데 그러면 토큰 기반 인증이 아니라 세션 기반 인증인 것 같아서 고민입니다. DB에 저장하는 순간 Stateless 장점도 없어지는 것 같구… Stateless로 구현한다해도 로그아웃 때문에 블랙리스트 관리해야한다는데, 이러면 결국 Stateful인거 같구… 다른 분들은 어떻게 구현하시는지 궁금합니다! 일단 이렇게 고민해봤습니다. --- <1번 시나리오 - 리프레쉬 토큰을 DB에 저장하지 않는 시나리오> 1. 액세스 토큰이랑 리프레쉬 토큰은 클라이언트가 저장하고 서버는 저장하지 않는다. 2. 클라이언트 요청이 왔을 때 리프레쉬 토큰이 만료되지 않았으면 액세스 토큰을 발급해주고, 만료됐으면 액세스 토큰을 발급해주지 않는다. (401 또는 403) 장점 - DB에 접근할 이유가 없으므로 Stateless 하다. 단점 - 로그아웃을 했을 때 토큰 자체는 무효화시킬 수 있는 방법이 없다. <2번 시나리오 - 리프레쉬 토큰을 DB에 저장하는 시나리오> 1. 액세스 토큰이랑 리프레쉬 토큰은 클라이언트와 서버가 각각 저장한다. 2. 클라이언트 요청이 왔을 때 리프레쉬 토큰이 만료되지 않았으면 액세스 토큰을 발급해주고, 만료됐으면 액세스 토큰을 발급해주지 않는다. (401 또는 403) 장점 - 로그아웃을 했을 때 토큰 자체는 무효화시킬 수 있다. 단점 - DB를 접근해야하므로 Stateful 하다. => 클러스터링이나 샤딩이 도입되면 복잡도가 올라간다. --- 1번 시나리오 단점을 극복하려고 블랙 리스트를 Redis에 관리한다는 글들을 종종 봤습니다. 블랙 리스트를 도입 안했을 때 문제는 실제로 겪어본 적이 있어서 공감은 가는데, 이러면 사실상 세션 쓰는거랑 똑같지 않나라는 생각이 듭니다. 인증시 결국 Redis 같은 DB에 접근해서 직접 확인하는 거니까요. 한편으로는 서비스가 매우 많이 커지면 세션이 부담돼서 토큰 기반 인증으로 전환한다는데, 파면 팔수록 점점 세션 기반 인증으로 바뀌는 것 같아서 고민입니다.
개발자
#인증
#토큰
#db
#stateless
#stateful
답변 1
댓글 1
조회 175
일 년 전 · 익명 님의 새로운 댓글
JWT vs 세션 사용
안녕하세요, 프로젝트를 진행하던 중에 JWT와 세션 사용에 대한 선택을 결정해야 했는데요. 일단, 클라이언트의 상태를 stateless하게 관리하고 서버의 부하를 줄이기 위한 선택으로 jwt를 도입하게 되었습니다. 근데 문득 궁금점이 생기더라구요. 1. jwt 토큰의 refresh 토큰 관리, logout 등의 기능을 위해 redis를 도입했는데, 세션도 서버의 메모리가 아니라 redis를 사용하게 되면 결국 서버의 부하를 줄여줄 수 있으니, jwt를 굳이 도입하는 이유가 있을까요? 1-1. 스스로 고민해본 결과로는 결국 정보를 jwt 토큰에 저장하느냐, 세션을 사용해서 세션의 정보를 DB에 저장하느냐 그 차이인 것 같은데 맞는지 궁금합니다. 그래서, 결국 redis를 사용하더라도 redis 자체의 부하를 줄여주지 못하는 건가 싶습니다.
개발자
#jwt
#세션
#redis
#인증
#인가
답변 3
댓글 2
추천해요 8
조회 2,265
2년 전 · 커리어리 AI 봇 님의 새로운 답변
수집형 게임을 만드려고 하는데 서버쪽으로 질문이 있습니다.
제가 게임서버쪽을 잘 몰라 일단 대충만 정리해봤습니다. 일단 구현 내용입니다. 1. 계정은 구글과 연동한다. 2. 모든 데이터는 서버쪽에서 갖고 있는다. 3. 클라에서 뽑기 요청을 하면 서버에서 검사를 하고 확률을 계산해 수집품을 정한다. 4. 결과를 DB에 저장하고 클라쪽으로 전송한다. 5. 클라의 결과를 바꾼다. 6. 게임을 접속하면 주기적으로 서버와 통신해 수집품 목록을 갱신한다. 기본 기능은 이런데 플레이팹을 써야할지 파이썬을 써야할지 고민입니다. 파이썬은 장고를 어느 정도 쓸 줄 알아 편할 것 같지만 요금이 얼마나 나올지 알 수가 없어 두렵고 플레이팹은 10만명까지는 무료이기한데 공부를 해야하고 이런 stateless 방식에 효율적인지 알 수가 없네요. 계속 공부하고 있긴한데 고수님들의 조언 부탁드립니다. 그럼 미리 감사드립니다. 꾸벅 (_ _)
개발자
#백엔드
#게임개발
답변 1
댓글 0
조회 601
2년 전 · 삭제된 사용자 님의 답변 업데이트
Flutter 코린이 질문
안녕하세요 지금 플러터로 개발에 발을 담근 코린이 인데요 다른이아니라 Stateless나 Stateful위젯 클래스를 빌드를 하면 Widget build(BuildContext context){ return … } 이 빌드 위젯이 쓰일때가 있는데요 여기서 build가 들어가는 위젯에는 왜 ()괄호 안에 String xxx 같은 변수 타입을 지정하면 빨간줄이 뜨는지 설명 해 주실 고수님들 계실까요? 그리고 해결이 된다면 저 build위젯 안에 String xxx 로 ${xxx} 를 이용하여 재사용 할 수 있는 방법도 알려주실 수 있으신지 여쭤봅니다..!
개발자
#프론트엔드
#flutter
답변 3
댓글 0
추천해요 3
조회 616