Redis란?

이준엽·2023년 3월 29일
6

Database

목록 보기
1/2
post-thumbnail

Redis 란?

Redis (Remote Dictionary Server)는 오픈 소스, 인 메모리 데이터 구조 저장소로, 데이터베이스, 캐시, 메시지 브로커 등 다양한 용도로 사용된다. Redis는 고성능이며, Key-Value 구조를 기반으로 하는 NoSQL 데이터베이스.

Redis의 주요 특징

  • 인 메모리 데이터 저장소 : Redis는 데이터를 메모리에 저장하고 조회함으로써 빠른 응답 시간을 제공한다. 데이터는 옵션으로 디스크에도 지속적으로 저장할 수 있다.
  • 다양한 데이터 타입 지원 : Redis는 단순한 Key-Value 구조뿐만 아니라 리스트, 세트, 해시, 정렬된 세트(zset) 등과 같은 다양한 데이터 타입을 지원한다.
  • Pub/Sub 메시징 : Redis는 발행/구독 메시징 패턴을 사용하여 애플리케이션 간 메시지 전달이 가능하다.
  • 지속성: Redis는 데이터를 디스크에 저장하는 두 가지 방법(RDB와 AOF)을 제공하여, 시스템이 다운되거나 재시작된 경우에도 데이터를 복구할 수 있다.
  • 고가용성과 분산 처리 : Redis는 마스터-슬레이브 복제, 센티넬, 클러스터링 등의 기능을 제공하여 고가용성과 분산 처리를 지원한다.
  • 클라이언트 라이브러리 지원 : Redis는 다양한 프로그래밍 언어에 대한 클라이언트 라이브러리를 지원하여, 여러 언어로 개발된 애플리케이션에서 쉽게 사용할 수 있다.

신입 백엔드 개발자로서 아직까진 세션정보 공유나 pub/sub을 활용한 메시지 처리정도만 경험해봤는데, 토이프로젝트를 진행하면서 캐시 서버를 구현해보고자 한다.

장점

  1. 고성능: Redis는 인 메모리 데이터 저장소로서, 빠른 응답 시간과 높은 처리량을 제공. 이는 캐싱, 실시간 애플리케이션, 메시지 큐 등에 적합하게 만든다.
  2. 유연한 데이터 구조: Redis는 다양한 데이터 구조를 지원하며, 문자열, 리스트, 세트, 정렬된 세트, 해시 등을 사용할 수 있다. 이를 통해 다양한 문제에 대한 해결책을 쉽게 구현할 수 있습니다.
  3. 지속성: Redis는 선택적으로 데이터를 디스크에 저장할 수 있어, 메모리 내 데이터 손실의 위험을 최소화할 수 있습니다. 지속성 모드에는 RDB 스냅샷 및 AOF(Append Only File) 방식이 있다.
  4. 원자성: Redis의 모든 작업은 원자적으로 수행된다. 이는 여러 클라이언트가 동시에 데이터에 액세스하더라도, 데이터의 일관성이 유지된다는 것을 의미.
  5. 확장성: Redis는 클러스터를 통해 가용성 및 처리량을 높일 수 있다. 데이터를 여러 노드로 분산하거나, 복제를 통해 가용성을 높일 수 있다.

단점

  1. 메모리 용량: Redis는 데이터를 메모리에 저장하므로, RAM 용량이 한정되어 있습니다. 대용량 데이터를 저장하려면 메모리 확장이 필요하며, 이는 비용이 높을 수 있습니다.
  2. 데이터 안전성: Redis의 인 메모리 저장 특성상, 전원 장애 등의 이슈가 발생할 경우 데이터 손실의 위험이 존재합니다. 지속성 옵션을 사용하면 이를 줄일 수 있지만, 여전히 완벽한 데이터 안전성을 보장할 수는 없습니다.
  3. 복잡한 쿼리 및 트랜잭션 지원 부족: Redis는 복잡한 쿼리 및 트랜잭션을 처리하는 데 제한이 있습니다. 관계형 데이터베이스와 같은 풍부한 쿼리 기능을 제공하지 않으므로, 복잡한 데이터 관계를 처리하는 데는 적합하지 않을 수 있습니다.
  4. 일부 구현 복잡성: Redis의 동시성 및 락 관리, 클러스터링 구성 등의 구현은 상대적으로 복잡할 수 있습니다. 개발자가 이러한 기능을 구현하고 유지 관리하기 위해서는 시간과 노력이 필요하며, 특히 대규모 인프라에서는 도전적일 수 있습니다.

Redis는 많은 장점을 가진 빠르고 유연한 인 메모리 데이터 저장소지만, 메모리 용량, 데이터 안전성 및 복잡한 쿼리 처리 등의 한계로 인해 일부 상황에서는 적합하지 않을 수 있다고 한다. 애플리케이션의 요구 사항과 예산을 고려하여, Redis가 적절한 솔루션인지 판단하는 것이 중요한데 역시 여러 상황을 경험해보는 것이 중요한 거 같다.

profile
하루하루 차근차근 발전하는사람이 되자 😤

0개의 댓글