728x90
Redis란?
Redis는 Remote Dictionary Server의 약자로, 오픈 소스 데이터 구조 서버입니다.
데이터를 Key-Value 형태로 저장하며, 다양한 종류의 데이터 구조를 지원합니다.
Redis 특징
- 지속성(Persistence)
- 메모리 기반 DB이지만 시스템이 다운되더라도 데이터를 디스크에 저장하여 지속성을 제공합니다.
- 데이터 복제(Replication)
- Master-Slave 구조를 통해 장애 복구(Failover) 및 백업을 지원합니다.
- 트랜잭션 지원
- Redis 트랜잭션으로 작업 중 하나라도 실패 시 이전 상태로 복구합니다.
- Pub/Sub 모델 지원
- 퍼블리시/구독 모델 기반의 실시간 데이터 처리를 지원합니다.
- 빠른 속도
- 메모리 기반 DB이므로 HDD 기반 DB보다 속도가 빠릅니다.
- 싱글 스레드 기반
- 싱글 스레드로 동작하여 레이스 컨디션을 방지합니다.
데이터베이스가 있음에도 Redis를 사용하는 이유
1. 접근 속도
- 메모리에 접근하는 속도가 디스크에 접근하는 속도보다 훨씬 빠릅니다.
- 이를 통해 SNS와 같이 대규모 요청이 들어오는 환경에서 데이터베이스 부하를 줄일 수 있습니다.
- Redis는 이러한 환경에서 캐시 서버 역할을 합니다.
2. 캐싱
- 캐싱은 자주, 반복적으로 요청되는 데이터를 임시로 저장하여 빠르게 제공하는 기술입니다.
- 데이터베이스 접근 대신 Redis를 통해 데이터를 가져와 성능을 향상시킵니다.
3. 다양한 데이터 구조 지원
다양한 데이터 구조로 여러 활용 사례에 대응합니다.
- String: 간단한 Key-Value 저장
- List: 메시지 큐, 작업 대기열
- Set: 중복 없는 데이터 저장
- Sorted Set: 우선순위 큐, 랭킹 시스템
- Hash: 복잡한 객체 저장
- Bitmap, HyperLogLog: 비트 연산 및 통계 작업
클러스터링
- 여러 Redis 서버를 클러스터로 묶어 데이터를 분산 저장/처리하는 구조입니다.
- 이를 통해 성능 향상, 확장성, 고가용성을 제공합니다.
클러스터링 필요성
- 단일 서버의 메모리 크기와 처리 능력 한계를 해결합니다.
- 서버 장애 시 데이터를 지속적으로 사용할 수 있도록 고가용성 제공을 합니다
사용이 간단하고 유연함
- 직관적인 명령어 기반 API 제공합니다
- 다양한 언어 클라이언트를 지원하여 애플리케이션 통합이 용이합니다
Redis에 대한 궁금증
1. 데이터는 일관성 있게 저장되는가?
- Redis는 싱글 스레드 이벤트 루프 기반으로 동작하며, 한 번에 하나의 작업을 처리합니다.
모든 읽기/쓰기 작업은 순서대로 대기 큐에서 처리됩니다. - 시간이 많이 걸리는 작업은 Redis를 사용하는 데 적합하지 않으며, 간단한 작업에 활용됩니다.
- 트랜잭션을 지원하며, 작업 실패 시 이전 상태로 롤백하여 데이터 불일치를 방지합니다.
2. Redis 서버가 다운되면 어떻게 되는가?
- Redis는 Master-Slave 구조로 데이터 복제를 지원합니다.
- 마스터 노드: 모든 요청을 처리하는 메인 노드.
- 슬레이브 노드: 마스터의 데이터를 비동기적으로 복제하며, 주기적으로 동기화.
- Failover 지원: 마스터가 다운되면 슬레이브 노드가 자동으로 승격되어 마스터 역할을 수행합니다.
3. 데이터는 영속성으로 저장해야 하는데 가능한가?
Redis는 두 가지 영속성 방식을 제공합니다:
- AOF(Append-Only File)
- 모든 쓰기 명령을 로그 파일에 저장.
- 장애 발생 시 로그 파일을 재실행하여 데이터 복구 가능.
- RDB(Snapshotting)
- 특정 주기마다 데이터를 디스크에 스냅샷 형태로 저장.
- 빠른 복구 가능하지만 저장 주기 사이의 데이터는 복구되지 않을 수 있음.
AOF와 RDB의 조합
- RDB: 빠른 복구를 위한 기본 옵션.
- AOF: 세밀한 데이터 일관성을 제공.
- 두 방식을 조합하여 영속성과 복구 속도를 최적화합니다.
Redis를 사용할 때 주의해야할 점
- Redis는 메모리에 데이터를 저장하기 때문에 메모리 크기가 저장 가능한 데이터의 한계를 결정합니다.
- 싱글 스레드 기반 처리를 하기 때문에 CPU 바운드 작업이나 오래 걸리는 명령어는 영향을 끼칠 수 있습니다.
- 클러스터 운영을 할 때 복제와 데이터 분산 관리가 복잡할 수있습니다.
728x90
'데이터베이스' 카테고리의 다른 글
데이터베이스의 정의와 특징 (0) | 2024.07.05 |
---|