Redis란?
Redis는 인메모리 방식의 No-SQL 기반 DBMS로, Key-Value 구조의 데이터를 저장하고 관리합니다. Single-Thread 기반으로 동작하며, 주로 DB, 캐시, 메시지 브로커 용도로 사용됩니다. 대표적인 사용 예로는 세션 관리, 대기열, 실시간 순위표, 캐시 등이 있습니다.
1-1. In-memory (인메모리 저장소)
MySQL, PostgreSQL, Oracle과 같은 DBMS는 데이터를 디스크나 SSD에 저장하는 반면, Redis는 인메모리 방식으로 서버의 주 메모리에 데이터를 저장합니다. 이는 필요한 데이터를 빠르게 조회하고 처리할 수 있게 해주며, 스냅샷을 통해 디스크에 백업하는 기능도 있습니다.
인메모리 방식이지만 스냅샷을 통해 디스크에 데이터를 백업할 수 있습니다. 예를 들어, 기존의 WAS-DB 구조에서 사용자가 많아져 DB로의 요청이 증가하면 DB에 부하가 걸리게 되는데, Redis는 이럴 때 캐시 서버로 활용되어 DB에 접근하지 않아도 데이터를 얻을 수 있게 합니다.
1-2. Redis 특징 및 장단점
- 성능: 초당 10만 ~ 15만 건의 명령을 수행 가능하며, 파이프라이닝을 통해 초당 100만 건의 요청을 수행할 수 있습니다.
- 영속성: 메모리를 활용하면서도 데이터의 영속적인 보존을 지원합니다. 스냅샷 기능을 제공하여 메모리 내용을 *.rdb 파일로 저장하여 해당 시점으로 데이터를 복구할 수 있습니다.
- 단일 스레드: Single-Thread로 동작하며, 하나의 트랜잭션당 하나의 명령만 수행합니다.
- 리스트 처리 성능: MySQL에 비해 10배 정도 빠릅니다.
- 서버 복제: master-slave 구조로 복제를 지원하여 장애 발생 대비 및 읽기 성능을 증대시킵니다.
- 단점: 인메모리 방식이기 때문에 장애 발생 시 데이터 유실의 위험이 있습니다. 스냅샷 및 AOF 기능을 통해 데이터 유실에 대비해야 합니다.
1-3. Redis 용어
- AOF (Append Only File): 모든 쓰기 명령에 대한 로그를 남기고 저장하며, 서버 재시작 시 write/update를 순차적으로 재실행하여 데이터를 복구합니다.
- COW (Copy On Write): Redis가 데이터를 쓰기 위해 사용하는 메커니즘입니다.
- RSS (Resident Set Size): 데이터 포함, Redis가 실제로 사용하고 있는 메모리입니다.
추가 개념들:
- Redis Replication: master-Replica 구조로 단순한 비동기식 복제를 지원합니다.
- Redis Cluster: 분산 처리 및 데이터 샤딩 기능을 제공하여 여러 마스터에 데이터를 분할 저장합니다.
- Redis Sentinel: 장애 복구 시스템으로, 센티널 노드가 다른 노드를 감시하여 마스터가 비정상일 때 자동으로 페일오버합니다.
1-4. Redis 지원 데이터 타입
- String: 일반적인 Key-value 형태입니다.
- Hash: 하나의 key에 여러 개의 value를 저장할 때 사용합니다.
- List: Array 형식의 데이터 구조로, 처음과 끝 데이터를 넣고 빼는 것이 빠릅니다.
- Set: 중복을 허용하지 않는 String의 집합체입니다.
- Sorted Set: 중복된 데이터를 허용하지 않는 Set 구조에 정렬 기능을 추가한 형태입니다.
- Bitmaps: 문자열 유형에 정의된 비트 지향 연산의 집합입니다.
- Streams: 데이터를 실시간으로 처리하기 위한 형식입니다.
RDB 스냅샷
개요
RDBMS 스냅샷은 데이터베이스의 특정 시점 상태를 캡처하여 저장하는 기능입니다. 이를 통해 특정 시점으로 데이터베이스를 복원하거나 백업할 수 있습니다. 스냅샷은 전체 데이터베이스나 특정 테이블에 대해 생성할 수 있으며, 스냅샷 이후의 변경 사항만 기록하여 저장 공간을 절약합니다.
주요 특징
- 포인트 인 타임 복구: 스냅샷은 특정 시점의 데이터베이스 상태를 저장하여, 필요할 때 해당 시점으로 데이터를 복구할 수 있습니다.
- 읽기 전용 스냅샷: 생성된 스냅샷은 일반적으로 읽기 전용으로 사용되며, 데이터 변경이 불가능합니다.
- 빠른 생성: 스냅샷은 전체 데이터베이스를 복제하는 대신, 스냅샷 생성 시점 이후의 변경 사항만 기록하기 때문에 비교적 빠르게 생성됩니다.
- 저장 공간 절약: 변경된 데이터만 기록하므로, 스냅샷을 여러 개 생성해도 저장 공간을 효율적으로 사용할 수 있습니다.
사용 예시
- 데이터 복구: 데이터 손상이나 실수로 인한 데이터 삭제 시 스냅샷을 사용하여 특정 시점으로 데이터를 복원할 수 있습니다.
- 테스트 및 개발: 개발 환경에서 테스트를 위해 실제 데이터를 기반으로 한 스냅샷을 사용하여 데이터베이스의 특정 상태를 재현할 수 있습니다.
- 보고서 생성: 특정 시점의 데이터를 기반으로 보고서를 생성할 때, 해당 시점의 스냅샷을 활용할 수 있습니다.
Redis와 MariaDB는 서로 다른 유형의 데이터베이스 시스템으로, 각기 다른 목적과 용도로 사용됩니다. 아래에서는 두 시스템의 주요 차이점과 각각의 장단점을 설명하겠습니다.
Redis
특징
- In-memory 데이터베이스: 데이터가 메모리에 저장되며, 매우 빠른 읽기/쓰기 성능을 제공함.
- NoSQL 기반: Key-Value 저장소로, 다양한 데이터 타입(String, Hash, List, Set, Sorted Set, Bitmaps, Streams)을 지원.
- Single-threaded: 단일 스레드로 동작하며, 여러 명령을 파이프라이닝하여 성능을 극대화함.
- 용도: 캐시, 세션 저장소, 실시간 분석, 메시지 브로커 등.
- Persistence: AOF(Append Only File)와 RDB(Snapshot) 방식으로 데이터 영속성을 제공.
장점
- 속도: 메모리에 데이터를 저장하므로 매우 빠른 속도.
- 다양한 데이터 타입: 여러 데이터 구조를 지원하여 유연한 데이터 처리 가능.
- 단순성: 간단한 설정과 사용법.
- 복제 및 클러스터링: Master-Slave 복제 및 클러스터링 기능 제공.
단점
- 데이터 유실 위험: 메모리 기반이므로 장애 발생 시 데이터 유실 가능성이 있음.
- 메모리 제한: 메모리 용량에 의존하므로 대용량 데이터 저장 시 비용이 높아질 수 있음.
- 단일 스레드: 멀티 코어를 완전히 활용하지 못함.
MariaDB
특징
- 디스크 기반 데이터베이스: 데이터를 디스크에 저장하여 대용량 데이터 처리에 적합.
- RDBMS: 관계형 데이터베이스로, SQL을 사용하여 데이터 관리.
- 다중 스레드: 멀티 스레드 아키텍처로, 여러 쿼리를 동시에 처리 가능.
- 용도: 전통적인 트랜잭션 처리, 복잡한 쿼리, 데이터 분석 등.
- 확장성: 다양한 스토리지 엔진(InnoDB, MyISAM 등)을 지원하여 용도에 맞는 엔진 선택 가능.
장점
- 영속성: 디스크에 데이터를 저장하므로 데이터 유실 위험이 낮음.
- 표준 SQL 지원: 복잡한 쿼리와 트랜잭션을 처리할 수 있음.
- 확장성: 큰 데이터를 처리할 수 있으며, 다양한 스토리지 엔진 지원.
- 안정성: 높은 안정성과 데이터 무결성 보장.
단점
- 속도: 메모리 기반의 Redis에 비해 속도가 느림.
- 복잡성: 설정과 관리가 상대적으로 복잡.
- 자원 소모: 디스크 I/O와 CPU 자원 소모가 큼.
요약
- Redis: 메모리 기반 NoSQL 데이터베이스로, 빠른 성능과 다양한 데이터 구조 지원. 캐시, 실시간 데이터 처리 등에 적합. 메모리 용량과 데이터 유실에 주의해야 함.
- MariaDB: 디스크 기반 관계형 데이터베이스로, 데이터 영속성과 표준 SQL 지원. 트랜잭션 처리와 대규모 데이터 관리에 적합. 속도는 Redis보다 느리지만 데이터 무결성과 안정성을 제공함.
각 데이터베이스 시스템의 선택은 사용 사례와 요구 사항에 따라 달라집니다. Redis는 성능이 중요한 실시간 애플리케이션에, MariaDB는 데이터 무결성과 복잡한 쿼리가 필요한 애플리케이션에 적합합니다.
'redis' 카테고리의 다른 글
[Redis] Redis - Docker 설치 (0) | 2024.07.02 |
---|---|
[Redis] Redis 세팅 및 명령어 (0) | 2024.06.27 |
[Redis] Google 이메일 인증 ( + Redis ) (0) | 2024.06.27 |