최근 몇 년 동안 상당한 관심을 얻은 데이터베이스 중 하나가 Redis입니다. 인터넷 검색을 해보니 2017년 이후 점유율이 10% 증가한 29%로 선두 그룹에 합류했더라고요. Redis가 인-메모리 데이터베이스라는 정도는 많은 분들이 알고 있는데요. 이 글에서는 Redis만의 특징과 어떻게 활용할 수 있는지를 살펴보도록 하겠습니다.
『 '데이널'의 컨텐츠에 포함된 정보는? 』
Redis란?
Redis는 'Remote Dictionary Server'를 의미합니다. 이름에서 알 수 있듯이 Dictionary 구조입니다. 파이썬을 사용해 본 사람은 쉽게 생각해 Dictonary 데이터 타입을 생각하면 됩니다. 이는 Key-Value 형태로 데이터베이스에서 작동합니다. 즉, 각 데이터 조각이 고유 식별자 또는 키와 연결되는 형식으로 데이터를 저장합니다.
Key-Value 구조는 Redis가 아니더라도 카산드라(Cassandra)와 같은 NoSQL 데이터베이스가 있습니다. 여기서 Redis를 차별화하는 점은 인-메모리 데이터 저장 구조라는 점입니다. 이 특성으로 인해 매우 빠른 성능을 제공하므로 고속 데이터 액세스가 필요한 사용 사례에 이상적입니다.
Redis의 주요 특징
1. 인-메모리 데이터 저장소
Redis는 데이터를 주로 RAM(메모리)에 저장하므로 빠른 액세스와 검색이 가능합니다. 이는 실시간 상호 작용과 높은 처리량이 필요한 애플리케이션에 적합합니다. 인메모리 구조가 왜 속도가 빠른지는 인메모리(In-Memory) DB의 특징에 대한 글을 참고하시기 바랍니다.
2. 데이터 구조
Redis는 Collection이라는 굉장히 독특한 데이터 처리 방법을 제공합니다. Strings, Lists, Sets, Stored sets, Hashs 등을 포함하여 단순한 키-값 쌍을 넘어 다양한 데이터 구조를 지원합니다. 이러한 다양성을 통해 개발자는 복잡한 데이터 관계를 효율적으로 모델링할 수 있습니다.
3. 지속성
Redis는 주로 메모리 내에서 작동합니다. 그래서 Redis가 shutdown 되면 데이터 사라집니다. 때문에 데이터 지속성을 위한 옵션을 제공하여 시스템 오류가 발생해도 데이터가 손실되지 않도록 보장합니다. 이는 자동 또는 수동으로 파일을 저장하는 방법을 제공합니다.
- 서버 재시작시 모든 데이터 유실
- 복제 기능을 사용해도 사람의 실수는 데이터 복원 불가
- Redis의 캐시 이외의 용도로 사용한다면 적절한 데이터 백업이 필요(아래 표 참고)
RDB | AOF | |
설명 | 데이터베이스(rdb)에 백업 데이터를 저장하는 방식 | 파일에 백업 데이터를 저장하는 방식 |
자동 저장 | redis.conf 파일에서 SAVE 옵션 지정 (시간 기준으로 자동저장 설정) |
redis.conf 파일에서 auto-aof-rewrite-percentage 옵션 지정(데이터의 크기 기준으로 자동저장 설정) |
수동 저장 | BGSAVE 명령어를 이용해 cli 창에서 수동으로 RDB에 데이터 저장 | BGREWRITEAOF 명령어를 이용해 cli 창에서 수동으로 AOF 파일에 재작성 |
3. Pub/Sub 메시징
Redis에는 게시/구독 메시징에 대한 기본으로 지원이 포함되어 있습니다. 애플리케이션의 여러 부분 간에 실시간 통신 패턴을 구현할 수 있습니다.
4. 클러스터링 및 고가용성
Redis는 클러스터링 및 복제를 지원하여 수평 확장 및 내결함성을 지원합니다. 이를 통해 Redis 배포는 증가하는 로드를 처리하고 하드웨어 오류가 발생하더라도 가용성을 유지할 수 있습니다.
Redis 어떻게 사용할까?
1. 캐싱
Redis의 가장 일반적인 사용 사례 중 하나는 캐싱입니다. 자주 액세스하는 데이터를 Redis에 저장함으로써 애플리케이션은 디스크가 아닌 메모리에서 데이터를 가져와서 대기 시간을 줄이고 전반적인 성능을 향상할 수 있습니다.
이는 동일한 데이터에 대해 반복적으로 액세스하는 경우가 많을 때 좋습니다. 그래서 데이터의 재사용 횟수가 1회 이상일 때 사용합니다. 잘 변하지 않을 데이터 일 때 캐시 사용이 효율적이라 할 수 있겠죠. 한번 메모리에 가져오고 나서 업데이트되지 않아야 좋다는 이야기입니다.
2. 세션 저장소
Redis는 웹 애플리케이션에서 세션 데이터를 관리하는 데 매우 적합합니다. 빠른 읽기 및 쓰기 속도로 인해 사용자 세션을 저장하고 원활하고 응답 속도가 뛰어난 사용자 경험을 보장합니다.
우선 사용이 간편합니다. 키-밸류 형태 어떤 데이터든지 저장이 가능합니다. 성능은 평균 작업속도가 1 ms 이하이기 때문에 초당 수백만 건의 작업이 가능합니다.
3. 실시간 분석
높은 처리량의 데이터를 처리하고 정렬된 세트와 같은 데이터 구조를 지원하는 기능을 갖춘 Redis는 실시간 분석 애플리케이션에 자주 사용됩니다. 이를 통해 대기 시간을 최소화하면서 대용량 데이터를 집계하고 분석할 수 있습니다.
4. 큐 및 메시지 브로커
Redis의 게시/구독 기능은 메시지 큐 및 메시지 브로커 구현에 적합합니다. 분산 시스템의 다양한 구성 요소 간의 통신을 용이하게 하거나 처리 작업을 비동기적으로 오프로드하는 데 사용할 수 있습니다.
5. 순위표 및 순위 시스템
Redis의 정렬된 세트를 사용하면 애플리케이션에서 순위표 및 순위 시스템을 쉽게 구현할 수 있습니다. 점수를 값으로 저장하고 사용자 ID를 회원으로 저장함으로써 개발자는 순위를 실시간으로 빠르게 검색하고 업데이트할 수 있습니다.
마무리
Redis 사용해 보려면 서버(또는 노트북)에 Redis를 설치하거나 Redis를 제공하는 클라우드 기반 서비스를 사용해야 합니다. 일단 설치되면 Python, JavaScript/Node.js, Java 등과 같은 다양한 프로그래밍 언어에 사용할 수 있는 다양한 클라이언트 라이브러리를 제공합니다.
Redis는 기존 rdbms처럼 SQL을 통해 데이터 처리(etl)을 제공하지 않고 Python과 같은 언어를 사용해서 작업을 할 수 있습니다. rdbms와 컨트롤과 다른 점이죠. 우리가 Kafka와 같은 실시간 스트리밍 서비스도 Python을 활용하 듯이 같은 원리라고 생각하면 됩니다.
요즘 트렌드가 속도와 다양성에 대한 요구가 많아지면서 Redis는 개발자와 기업 모두에게 선택받고 있습니다. Redis는 광범위한 사용 사례에서 유용성을 입증하고 있습니다. 고성능 웹 애플리케이션을 구축하든, 실시간 분석을 구현하든, 분산 시스템을 설계하든 Redis는 다양한 기능을 제공합니다.
'데이터베이스' 카테고리의 다른 글
결합(복합) 인덱스 어떻게 구성할까? (0) | 2024.05.16 |
---|---|
인덱스가 왜 필요했을까? (0) | 2024.05.13 |
SQL 파싱 과정: 하드파싱(hard parsing) vs 소프트파싱(soft parsing) (0) | 2024.04.11 |
SQL 다중처리(Array Processing) 원리 (0) | 2024.03.21 |
SQL의 LOOP-QUERY와 ONE-SQL 장단점 비교 (0) | 2024.03.19 |