Redis는 Remote Dictionary Server의 약자로, 키-값(Key-Value) 구조로 데이터를 저장하는 비관계형 데이터베이스(NoSQL)입니다.
쉽게 바꿔서 이해하자면
쉽게 말해, 엄청 빠르게 동작하는 메모리 기반의 키-값 데이터 저장소라고 이해하시면 됩니다.
예를 들어, 우리가 변수에 값을 저장하듯이
user_name = "달수"
Redis는 내부적으로 다음과 같은 식으로 데이터를 저장합니다.
SET user_name "달수"
이처럼 키 = 값 형태로 데이터를 저장하고, 매우 빠르게 꺼내 쓸 수 있습니다.
출처 : https://redis.io/nosql/key-value-databases/
NoSQL이란?
SQL vs NoSQL
NoSQL은 전통적인 관계형 데이터베이스(RDBMS, 예: MySQL)와 다르게, 고정된 스키마 없이 다양한 형태의 데이터를 유연하게 저장할 수 있는 데이터베이스입니다.
그중 Redis는 Key-Value 저장소라는 형태의 NoSQL에 속합니다.
복잡한 조인 없이, 특정 값을 빠르게 읽고 쓰는 데 최적화되어 있습니다.
Redis의 장단점
Redis는 다양한 장점을 가지고 있습니다. 여러 특징 중 단 하나만 기억한다면 , 이것입니다.
Redis는 데이터를 메모리(RAM)에 저장하는 인메모리(in-memory) 방식이기 때문에, 처리 속도가 매우 빠릅니다.
“Redis는 데이터를 메모리(RAM)에 저장합니다.”
이게 바로 핵심입니다.
인메모리란 컴퓨터의 메인 메모리 RAM에 데이터를 올려서 사용하는 방법을 말합니다.
왜 메모리에 데이터를 올릴까요? 이유는 명확하게도 속도 때문입니다. SSD,HDD 같은 물리적인 디스크 저장공간에서 데이터를 가져오는 것보다 RAM에 올려진 데이터를 가져오는데 걸리는 속도가 수백배(HDD 기준) 이상 빠릅니다. 메모리(RAM)는 전기 신호 수준에서 동작하기 때문입니다. 그래서 Redis는 빠른 속도가 큰 장점입니다.
Redis는 이 빠른 메모리를 활용하기 때문에
✔ 읽기/쓰기 속도가 빠르고
✔ 지연(latency)이 거의 없습니다.
그래서 수많은 기업에서 속도가 중요한 기능에 Redis를 사용합니다.
하지만, 반대로 생각하면 용량이 가장 치명적인 단점입니다.
보통 노트북의 RAM은 8GB, 16GB 정도됩니다. 그래서 메인 데이터베이스로 사용하기에는 무리가 있습니다.
그렇다고 RAM을 10TB씩 구매하자니 비용이라는 큰 걸림돌이 있습니다.
앞서 살펴본 특징중에 단점이 될 수 있는 점으로는 Key-Value 형태의 NoSQL이라는 점입니다. redis가 다양한 형태의 데이터 구조를 지원하기는 하지만 복잡한 데이터를 저장하는 데이터베이스로 사용하기에는 어려움이 있습니다.
처음에는 오라클, MySQL과 같은 데이터베이스라고 생각하고 접근했으나, 찾아보니 Redis는 메인 데이터베이스라기보다는 보조적인 수단으로 사용되는 경우가 많음을 알게 되었습니다.
정리하자면, Redis의 장단점을 고려했을 때 가장 적합한 역할은 ‘캐시 데이터베이스 서버’입니다.
예를 들어, 게임의 랭킹 상위 100명을 보여주는 기능이 있다고 가정해보겠습니다. 이 정보를 제공하기 위해 오라클 같은 관계형 데이터베이스에 랭킹 데이터를 저장하고, ORDER BY 점수 DESC LIMIT 100과 같은 쿼리로 상위 100명을 가져올 수 있습니다.
하지만 사용자가 점점 많아져 수백만 명에 이르게 되면 문제가 발생합니다. 보여주는 건 100명 뿐이지만, 정렬을 위해서는 전체 사용자 데이터를 한 번에 읽고 정렬해야 하기 때문입니다.
즉, ORDER BY는 전체 데이터셋을 대상으로 정렬 연산을 수행하기 때문에, 데이터 양이 많아질수록 디스크에서 읽어야 할 양도 많아지고, 정렬에 필요한 계산량도 증가하여 응답 시간이 느려질 수 있습니다.
이럴 때 Redis와 같은 인메모리 캐시 서버를 활용하면 좋은 해결책이 됩니다. 예를 들어, 상위 100명의 랭킹 정보를 미리 Redis에 저장해 두면, DB에 직접 접근하지 않고도 매우 빠르게 데이터를 제공할 수 있습니다.
즉, 자주 조회되는 랭킹 데이터를 캐시에 올려두는 방식으로 DB 부하를 줄이고 응답 속도도 획기적으로 개선할 수 있습니다.
Redis 주요 사용 사례
다양한 기능이 내장된 Redis는 다양한 곳에 활용됩니다.
캐싱 (Caching)
세션 관리 (Session Management)
실시간 분석 및 통계 (Real-time Analystics)
메시지 큐 (Message Queue)
지리공간 인덱싱 (Geospatial Indexing)
속도 제한 (Rate Limiting)
실시간 채팅 및 메시징 (Real-time Chat And Messaging)
하지만 초보자 관점에서는 복잡하게 보기보다, 캐싱(Cache) 하나만 명확히 이해하는 것이 좋습니다.