Backend/Redis

Redis에 토큰 저장하기

olsohee 2024. 1. 29. 12:45

Redis

Redis는 디스크가 아닌 메모리에 데이터를 저장하는 인메모리 방식의 데이터베이스이다.

* 메모리(RAM, Random Access Memory): 빠른 액세스를 위해 데이터를 임시로 저장하는 저장소이다. 메모리에 올라간 데이터는 컴퓨터 전원이 꺼지면 휘발된다.

* 디스크(HDD, SSD): 데이터를 영구적으로 저장하는 저장소이다. 디스크에 저장되어 있는 데이터는 CPU가 처리하는 속도가 메모리보다 느리다. 그러나 저장할 수 있는 용량이 메모리보다 훨씬 크고, 전원이 꺼지더라도 저장된 데이터가 휘발되지 않는다.

* 인메모리 데이터베이스: 디스크가 아닌 메모리에 데이터를 저장하는 데이터베이스이다. IMDB(In-Memory Database) 또는 MMDB(Main Memory DBMS)라고 한다.

* 디스크 방식은 디스크에 저장된 데이터를 대상으로 쿼리를 수행하지만, 인메모리 방식은 메모리에 색인을 넣어 필요한 정보를 색인을 통해 빠르게 검색할 수 있다.

 

MySQL과 같은 기존 DB는 HDD, SSD와 같은 보조기억장치에 데이터를 저장한다. 따라서 많은 양의 데이터를 오래 저장하기에 적합하다. 반면 인메모리 데이터베이스는 주기억장치인 RAM에 데이터를 저장한다.

 

그렇다면 보조기억장치에 데이터를 저장하는 것과 RAM에 데이터를 저장하는 것의 차이는 무엇일까? 특정 프로그램을 실행하면, 아래와 같이 컴퓨터는 보조기억장치에 저장된 데이터를 RAM으로 불러와 CPU가 해당 데이터를 처리하는 과정으로 실행된다.

즉, RAM에 데이터를 저장하면 보조기억장치에서 데이터를 Load하는 비용이 절약된다. 따라서 인메모리 데이터베이스의 읽기 및 쓰기 연산은 기존 디스크 기반 데이터베이스 보다 훨씬 빠른 성능을 보인다.

 

단, 인메모리 방식의 데이터베이스는 보조기억장치와 다르게 전원이 끊어지면 데이터가 전부 지워지는 휘발성 메모리로, 저장된 데이터가 영속적이지 않다.

 

인메모리 방식이라는 것 외에도 Redis는 Key-Value 형태의 데이터베이스이라는 특징을 갖는다. 따라서 적은 메모리로도 데이터 저장이 가능하고, Key를 알고 있다면 조회 성능이 O(1)까지 나올 수 있다.

Refresh Token을 Redis에 저장하는 이유

대게 Refresh Token을 저장할 때 Redis를 사용하는 경우가 많은데, Redis에 Refresh Token을 저장하면 다음과 같은 이점이 있다.

  • Redis는 RDB와 다르게 데이터 만료일을 지정할 수 있다.
    • 이를 TTL(Time To Live)이라고 하는데, 이를 토큰 만료일과 똑같이 맞춰두면 토큰이 만료될 때 Redis에서도 저장된 토큰이 삭제된다. 따라서 일정 시간 이후 삭제되어야 하는 토큰을 저장하기에 적합하다.
    • 만약 RDB에 토큰을 저장하면, 주기적으로 만료된 토큰을 RDB에서 삭제해주어야 한다. 
  • Redis는 접근 속도가 빠르다.
    • 대체로 30분 ~ 2시간 단위로 갱신되는 Access Token을 새로 발급받기 위해서는 Refresh Token이 필요하다.
    • 즉 Refresh Token은 Access Token 발급을 위해 빈번하게 호출된다.
    • 이렇게 빈번하게 호출되는 Refresh Token을 인메모리 데이터베이스에 저장하면 접근 속도가 빠르다.

Reference