본문 바로가기
프로젝트/USports

[USports] Redis + Login

by JayAlex07 2023. 12. 5.

[USports] Redis + Login

 

Redis

https://jejoonlee.tistory.com/376

 

스프링 캐시

스프링 캐시 캐시 임시로 데이터를 저장하는 공간이다 인메모리가 될 수 있고, 서버에 캐시를 만들 수 있다 빠른 처리 속도로 성능을 향상할 수 있다 이미 조회한 데이터를 임시로 저장하고, 다

jejoonlee.tistory.com

예전에 레디스에 관련해서 살짝 다뤘던게 기억이 난다.

레디스는 NoSQL로 Key-Value로 데이터를 저장하는 메모리 데이터 스토어다.

해당 기능을 사용했을 때에 Key와 Value를 넣으면서, 해당 메모리에 대한 만료 기간도 넣을 수 있었다.


 

로그인과 레디스?

 

로그인을 할 때에 access token을 클라이언트에 준다

  • access token은 해당 어플리케이션 내에 데이터를 사용할 수 있도록 주어지는 열쇠같은 존재이다
  • 하지만 열쇠가 탈취되면, 위험하여 access token의 만료 기간을 짧게 두게 된다
  • 즉 access token의 만료 기간이 짧으면, 로그인을 더 자주 하여, 새로운 access token을 받아야 하는 번거로움이 있다

 

refresh token

  • access token과 같은 JWT 토큰이다
  • 하지만 refresh token은 access token이 만료 되었을 때에, access token은 재발급하기 위해 만들어진 토큰이다
  • 즉 access token이 만료되면, refresh token을 통해 자동으로 access token을 로그인 없이 재발급 받을 수 있다

 

refresh token은 어디에다 둘까?

  • access token은 계속 가지고 다니는 열쇠라고 생각하면된다.
  • 반대로 refresh token은 다른 곳에 저장을 해야 하는데, 저장하는 곳이 주로 REDIS 다!
  • refresh token은 access token보다 만료 기간이 길다 (예. refresh token이 3주라는 만료기간이 있으면 access token은 1일이라는 만료기간이 있을 것이다)
  • 주로 refresh token을 저장할 때에 key값으로 유저 이름 또는 이메일로, value에 refresh token을 넣게 된다
    • 만약 refresh token이 redis에 있으면? access token이 만료되었을 때, 재발급 받을 수 있다
    • 없다면? 로그인을 다시 해야한다

 

구현 로직

  1. 로그인을 하면 access token과 refresh token이 만들어진다
  2. refresh token은 redis에 key로는 유저 이름으로, value는 refresh token으로 저장이 된다
    • 여기서 refresh token의 만료 시간만큼, redis에서도 해당 매모리에 대한 만료 시간을 지정해준다
  3. access token을 사용하여 어플리케이션 내 데이터를 활용한다
  4. access token이 만료 되었을 때 (refresh token 만료기간이 남아 있음)
    • redis 내 refresh token을 찾는다
    • refresh token을 통해서, 유저의 이름 또는 정보를 가지고 온다
    • access token과 refresh token을 새로 생성한다
    • 여기서 다시 refresh token을 redis에 새로 넣어준다 (그만큼 만료기간도 늘어나는 것)
  5. access token이 만료 되었을 때 (refresh token 만료기간 만료)
    • redis 내 refresh token을 찾아본다
    • refresh token이 없으면 해당 유저는 다시 로그인을 해야 하는 것이다
  6. 로그아웃
    • refresh token을 redis에서 삭제를 한다
    • access token의 만료 기간이 남아있을 수 있어, 해당 토큰을 redis에 저장을 해준다
    • 그 토큰은 블랙리스트로, 해당 토큰을 이용할 때에, 사용을 못 하게 막아준다

https://jejoonlee.tistory.com/408

 

[USports] Login 구현

[USports] Login 구현 MemberController 로그인 로그인을 하면 access token과 refresh token을 받게 된다 MemberDto에 UserDetail을 넣어 활용했다 memberService.loginMember()에서는 간단하게 비밀번호가 일치하는지 그리고

jejoonlee.tistory.com

'프로젝트 > USports' 카테고리의 다른 글

[USports] Websocket 소개  (0) 2023.12.18
[USports] Member OAuth2  (0) 2023.12.09
[USports] Member 단위 테스트  (1) 2023.12.07
[USports] Email 전송  (1) 2023.12.06
[USports] Login 구현  (1) 2023.12.05