Redis(Remote Dictionary Server)는 BSD 라이선스 기반의 오픈소스 NoSQL 데이터베이스입니다. Redis는 인메모리(In-Memory) 데이터베이스로서, 키-값(Key-Value) 저장 방식을 기반으로 동작하며, 다양한 자료구조를 지원하기 때문에 데이터 구조 저장소(Data Structure Store)라고도 불립니다.
그럼 각 개념을 하나씩 자세히 살펴보겠습니다.
핵심 개념 이해하기
1. 키-값 데이터스토어(Key-Value Datastore)
키-값 데이터스토어는 고유한 키(Key)에 대응하는 값(Value)의 형태로 데이터를 저장하고 조회하는 데이터 저장 패러다임입니다. 키는 데이터베이스에 저장된 값을 유일하게 식별하는 역할을 하며, Redis를 하나의 거대한 해시 테이블(Hash Table)이라고 생각하면 이해하기 쉽습니다.
2. 인메모리 데이터베이스(In-Memory Database)
인메모리 데이터베이스는 모든 데이터를 주기억장치(RAM)에 저장하는 데이터베이스입니다. 즉, 데이터베이스를 조회하거나 데이터를 수정할 때 디스크가 아닌 메인 메모리에만 접근합니다. 메모리 접근 속도가 디스크 접근 속도보다 훨씬 빠르기 때문에, Redis는 디스크 기반의 다른 데이터베이스들보다 압도적으로 빠른 성능을 보여줍니다. 물론 적절한 설정을 통해 메모리의 데이터를 디스크에 영속화(Persistence)할 수도 있습니다.
3. 데이터 구조 저장소(Data Structure Store)
Redis에서 키는 항상 문자열(String) 타입이지만, 값은 문자열, 해시(Hash), 셋(Set), 정렬된 셋(Sorted Set), 리스트(List), 하이퍼로그로그(HyperLogLog), 지리공간 인덱스(Geospatial Index) 등 다양한 자료형을 사용할 수 있습니다.

Redis는 매우 유연하고 확장성이 뛰어난 데이터스토어로, 데이터베이스, 메시지 브로커(Message Broker), 캐시 서버(Cache Server) 등으로 활용할 수 있습니다. Redis는 싱글 스레드(Single Threaded) 방식으로 동작하여 한 번에 하나의 요청만 처리하지만, 배치 명령(Batch Command)을 사용하면 서버로 전송되는 요청 수를 줄여 성능을 최적화할 수 있습니다.
Redis에서 메인 메모리의 데이터를 영속화하는 방법은 두 가지가 있습니다. 첫 번째는 모든 데이터를 하드디스크의 플랫 파일(flat file)에 덤프(dump)하는 방식이고, 두 번째는 실행된 모든 명령어를 파일에 기록하는 방식입니다. Redis 서버가 재시작될 때 덤프 파일에서 데이터를 불러오거나, 기록된 명령어들을 순차적으로 실행하여 일관성 있고 사용 가능한 상태로 복구합니다.
Redis의 주요 특징
Redis 데이터스토어의 핵심 기능은 다음과 같습니다.
- 원자적 연산(Atomic Operations): Redis의 모든 연산은 원자적으로 처리됩니다. 따라서 두 개 이상의 클라이언트가 동시에 CRUD 작업을 수행하더라도, 모든 클라이언트는 항상 갱신된 최신 값을 받게 됩니다.
- 다양한 데이터 타입 지원: 문자열, 리스트, 셋, 정렬된 셋, 비트맵(Bitmap) 등 다양한 데이터 타입을 지원하여 여러 시나리오에서 유연하게 활용할 수 있습니다.
- 매우 빠른 속도: 모든 데이터를 메인 메모리에 저장하기 때문에 극도로 빠릅니다. 또한 파이프라이닝(Pipelining)을 지원하여 클라이언트 CLI와 클라이언트 라이브러리가 단일 명령으로 여러 값을 처리하는 다중 연산을 수행할 수 있습니다.
- 풍부한 클라이언트 라이브러리: C, C++, C#, Clojure, Java 등 대부분의 프로그래밍 언어를 클라이언트 라이브러리를 통해 지원합니다.
- 마스터/슬레이브 복제(Master/Slave Replication): 단 한 줄의 설정만으로 마스터/슬레이브 복제를 구성할 수 있습니다.
함께 학습하면 좋은 Redis 개념
Redis의 중요한 개념들을 다루는 관련 글 목록은 다음과 같습니다.
- 키(Keys) 명령어
- 문자열(String) 명령어
- 리스트(List) 명령어
- 셋(Set) 명령어
- 해시(Hash) 명령어
- 지오(Geo) 명령어
- Jedis 라이브러리를 활용한 Redis Keys 튜토리얼
- Jedis 라이브러리를 활용한 Redis List 튜토리얼
- Jedis 라이브러리를 활용한 Redis Set 튜토리얼
- Jedis 라이브러리를 활용한 Redis Hash 튜토리얼
- Jedis 라이브러리를 활용한 Redis Geo 튜토리얼
- Jedis 라이브러리를 활용한 Redis Pub/Sub 튜토리얼
이 글이 도움이 되었다면 댓글로 의견을 남겨주시고, 주변에도 널리 공유해 주세요!