Redis를 처음 사용한 건 Refresh Token 저장 때문이었습니다.
JWT 기반 인증 구조를 구성하면서 Refresh Token을 어디에 저장할지 고민했고, 많은 예제에서 Redis를 사용하고 있었기 때문에 별다른 의심 없이 그대로 도입했습니다.

간략히 위와 같은 흐름으로 도입했었습니다.
당시에는 Redis가 왜 필요한지 깊게 생각하지 않았습니다. 그저 key-value 형태로 데이터를 저장하는 NoSQL 데이터베이스 정도로만 이해하고 있었고, Refresh Token을 저장하는 용도 외에는 활용할 수 있다는 생각도 하지 못했습니다.
이때의 Redis는 단순히 "빠른 저장소" 정도의 인식이었습니다. 관계형 데이터베이스 대신 사용할 수 있는 또 하나의 데이터베이스라고 생각했고, 실제로도 Refresh Token을 저장하고 조회하는 용도로만 사용했습니다.
하지만 Redis를 다시 공부하면서, 내가 Redis를 꽤 단편적으로 이해하고 있었다는 걸 알게 되었습니다. Redis는 단순한 NoSQL 저장소가 아니라 인메모리 기반의 자료구조 저장소였고, 캐시, 세션, 큐, 랭킹 시스템 등 다양한 상황에서 활용되는 도구였습니다.
이 글에서는 Refresh Token 저장소로만 사용하던 Redis에 대해, 공부하면서 새롭게 이해하게 된 내용들을 정리해보려 합니다.

Redis를 이해하려면 먼저 "인메모리"라는 개념부터 알아야 합니다. 인메모리는 데이터를 디스크가 아니라 메모리(RAM)에 저장하는 방식을 의미합니다.
일반적인 데이터베이스는 데이터를 디스크에 저장합니다. 디스크는 전원이 꺼져도 데이터가 유지되는 장점이 있지만, 데이터를 읽고 쓰는 속도가 메모리에 비해 상대적으로 느립니다. 반면 인메모리 방식은 데이터를 RAM에 저장하기 때문에 훨씬 빠른 속도로 접근할 수 있습니다.
즉, Redis는 데이터를 디스크가 아니라 메모리에 저장하는 데이터 저장소입니다. 이 구조 때문에 Redis는 일반적인 데이터베이스보다 빠른 성능을 제공할 수 있습니다. 대신 메모리에 저장되기 때문에 영구 저장소보다는 캐시, 세션, 토큰과 같은 일시적인 데이터를 처리하는 데 더 적합합니다.
Redis가 빠른 가장 큰 이유는 메모리에 데이터를 저장하기 때문입니다. RAM은 디스크보다 훨씬 빠르게 데이터에 접근할 수 있고, 별도의 디스크 I/O 과정이 필요하지 않습니다.
일반적인 데이터베이스의 경우 데이터를 조회할 때 디스크 접근이 발생합니다. 이 과정은 상대적으로 시간이 오래 걸리며, 요청이 많아질수록 성능에 영향을 줍니다. 반면 Redis는 메모리에 저장된 데이터를 바로 조회할 수 있기 때문에 매우 빠른 응답 속도를 제공합니다.
또한 Redis는 단순한 구조로 데이터를 저장하기 때문에 추가적인 연산 비용이 적습니다. 복잡한 조인이나 쿼리 파싱 과정 없이 key 기반으로 바로 접근할 수 있어 성능상 이점이 큽니다.
이러한 이유로 Redis는 캐시, 세션 저장소, 토큰 저장소와 같이 빠른 조회가 중요한 상황에서 자주 사용됩니다.
RAM은 메모리 기반 저장소이기 때문에 CPU가 데이터를 바로 읽고 쓸 수 있습니다. 디스크는 데이터를 읽거나 쓰기 위해 물리적인 이동(헤드 이동, 회전 등)이 필요하고, 이 과정이 RAM보다 훨씬 느립니다. 그래서 같은 데이터를 다룰 때 RAM은 디스크보다 접근 속도가 훨씬 빠릅니다.
처음에는 Redis를 단순한 key-value 저장소라고 생각했지만, 실제로는 다양한 자료구조를 지원하는 데이터 저장소였습니다. Redis는 value에 단순 문자열뿐만 아니라 List, Set, Hash, Sorted Set 같은 자료구조를 저장할 수 있습니다.
이 구조 덕분에 Redis는 단순히 데이터를 저장하는 용도를 넘어 다양한 방식으로 활용할 수 있습니다. 예를 들어 List는 큐처럼 사용할 수 있고, Set은 중복 제거 용도로 사용할 수 있으며, Sorted Set은 점수 기반 랭킹 시스템을 구현할 때 사용할 수 있습니다.
즉 Redis는 단순한 저장소가 아니라 자료구조 기반으로 데이터를 처리할 수 있는 도구에 가깝습니다. 이 점은 일반적인 데이터베이스와 Redis를 구분하는 중요한 특징이었습니다.
이 부분은 추후에 구현을 해보며 더 공부해보겠습니다.
이제 다시 처음으로 돌아가 보면, Refresh Token 저장소로 Redis를 사용하는 이유도 자연스럽게 이해할 수 있습니다. Refresh Token은 일정 시간이 지나면 만료되는 일시적인 데이터입니다. 또한 빠른 조회가 필요하고, 만료된 데이터는 자동으로 정리되는 것이 이상적입니다.
Redis는 TTL(Time To Live) 기능을 제공하기 때문에 데이터를 저장할 때 만료 시간을 함께 설정할 수 있습니다. 이렇게 설정된 데이터는 시간이 지나면 자동으로 삭제되기 때문에 별도의 정리 작업이 필요하지 않습니다.
또한 메모리 기반 저장소이기 때문에 토큰 조회 속도가 빠르고, 데이터 구조도 단순하여 인증 흐름에서 효율적으로 사용할 수 있습니다. 이러한 특징 때문에 Refresh Token 저장소로 Redis가 자주 사용된다는 것을 이해하게 되었습니다.
처음에는 Redis를 단순한 NoSQL 데이터베이스라고 생각했습니다. 하지만 Redis는 인메모리 기반으로 동작하며, 다양한 자료구조를 제공하는 데이터 저장소였습니다. 단순히 데이터를 저장하는 역할이 아니라, 성능과 데이터 처리 방식까지 고려된 도구였습니다.
이제는 Redis를 사용할 때 단순히 "빠르니까 쓴다"가 아니라, 어떤 데이터를 어떤 방식으로 처리하기 위해 Redis를 사용하는지 고민하게 되었습니다. Refresh Token 저장소로만 사용하던 Redis를 다시 이해하면서, Redis의 활용 범위가 훨씬 넓다는 것을 알게 되었습니다.