Redis란?
Redis(Remote Dictionary Server)는 오픈 소스 기반의 고성능 키-값 저장소이며,
메모리 내 데이터 구조 저장 및 검색을 위한 데이터베이스로 사용한다.
단순한 문자열 저장뿐만 아니라 다양한 데이터 구조(리스트, 해시, 셋, 정렬된 셋 등)를
지원한다.
Redis를 사용하는 이유
1. 빠른 성능
레디스는 모든 데이터를 메모리에 저장하므로 디스크 I/O 오버헤드가 없다.
이로 인해 매우 빠른 읽기와 쓰기 작업을 수행할 수 있다.
또한 단일 쓰레드 모델을 사용하여 데이터베이스 작업을 순차적으로 처리하므로
복잡한 동시성 문제를 피할 수 있다.
2. 다양한 데이터 구조 지원
일반적인 키-값 저장소가 단순한 문자열 저장만 지원하는 반면에
Redis는 문자열, 리스트, 해시, 셋, 정렬된 집합 등 다양한 데이터 유형을 저장하고 조작할 수 있다.
3. 캐싱 기능
Redis는 주로 데이터베이스 쿼리나 계산 결과를 캐싱하는데 사용된다.
많은 쿼리 작업을 레디스에 저장하여 데이터베이스에 대한 부하를 줄일 수 있다.
Redis는 인 메모리 DB 이므로 빠른 응답시간을 제공하여 애플리케이션 성능을 향상시킨다.
4. 메시지 브로커
Redis는 Pub/Sub 모델을 지원하여 메시지 브로커로 사용될 수 있다.
다양한 컴포넌트나 서비스 간의 비동기 통신을 위해 사용되며, 실시간 채팅, 이벤트 기반 시스템,
실시간 분석, 알림 시스템 등을 구현할 수 있다.
5. 세션 저장소
레디스는 세션 데이터를 저장하는데 사용될 수 있다. 세션 클러스팅과 부하 분산을 지원하여
대규모 웹 애플리케이션에서 확장성과 고 가용성을 제공할 수 있다.
6. 대기열 관리
Redis는 메시지 큐 시스템으로도 사용될 수 있다. 작업 처리를 비동기적으로 관리하기 위해
레디스의 리스트 데이터 구조를 활용하여 작업을 대기열에 추가하고, 워커 프로세스가
해당 작업을 처리하는 방식으로 사용할 수 있다. 이를 통해 작업의 순서와 우선순위를 조절하고,
작업 처리량을 제어할 수 있다.
7. 실시간 데이터 분석
Redis는 스트림 데이터 구조를 활용하여 이벤트 시퀀스를 저장하고, 소비자가 실시간으로
이벤트를 처리하고 분석할 수 있다. 이를 통해 대시보드, 실시간 알림 로그 분석 등 다양한
실시간 데이터 처리에 활용된다.
8. 분산 환경 지원
Redis는 마스터-슬레이브 복제, 클러스터링 등의 기능을 제공하여 데이터의 가용성과 확장성을 높일 수 있다.
여러 서버에 데이터를 분산 저장하고 복제하여 고가용성을 보장하고, 수평적인 확장이 가능하다.
9. 간편한 사용 및 다양한 언어 지원
Redis는 간단하고 직관적인 명령어를 제공하며, 다양한 프로그래밍 언어에서 접근할 수 있는 클라이언트 라이브러리를 지원한다.
이를 통해 Redis를 편리하게 사용할 수 있으며, 다양한 환경과 언어로 개발된 애플리케이션과 통합할 수 있다.
Redis의 영속성
Redis는 빠른 읽기와 쓰기 성능을 제공하지만, 메모리에 저장되기 때문에
서버가 종료되면 데이터가 손실될 위험이 있다.
이러한 단점을 보완하기 위해 다음과 같은 방법들을 제공하고 있다.
1. RDB(Redis DataBase) 스냅샷
주기적으로 Redis 데이터베이스의 스냅샷을 디스크에 저장하는 방법이다.
이러한 스냅샷은 데이터베이스의 현재 상태를 스냅샷 파일로 저장하여, 필요시
데이터를 복구하는데 사용한다.
2. AOP(Append Only File) 로그
AOF 로그는 모든 변경 사항을 로그 파일에 기록하는 방법이다.
Redis 서버가 다시 시작될 때 이 로그를 재실행하여 데이터를 복구한다.
AOF 로그는 스냅샷과 함께 사용할 수 있다.
Redis의 단점
1. 데이터 영속성
Redis는 기본적으로 메모리 기반의 데이터베이스 이기 때문에 서버 재시작이나 장애 상황에서
데이터를 영구적으로 보존하지 못한다. 따라서 위에 알아본 대로 영속성을 보장하기 위해서는
RDB(스냅샷) 또는 AOF(로그)와 같은 영속성 설정을 활성화해야 한다. 그러나 이는 I/O 작업을
동반하므로 일부 성능 저하가 발생할 수 있다.
2. 복잡한 쿼리 지원 부족
Redis는 단순한 키-값 저장소로 설계되어 있기 때문에 SQL과 같은 질의 언어를 사용하여 데이터를
조작하기 어렵다. 따라서 단순한 데이터 조작과 집계 작업에 최적화되어 있으며, 데이터 모델이
간단한 경우에 가장 효과적이다.
3. 데이터 사이즈 제한
Redis는 단일 서버의 메모리에 데이터를 저장하므로, 데이터 사이즈에 제한이 있다. 서버의 메모리 용량을 초과하는
큰 규모의 데이터를 저장하려면 클러스터링이나 샤딩과 같은 분산 환경을 구성해야 한다. 또한 메모리의 용량 한계로
인해 데이터의 크기를 제한해야 할 수도 있다.
4. 트랙잭션의 제한
Redis는 기본적으로 원자성을 보장하기 위한 트랙잭션을 지원하지만, ACID (원자성, 일관성, 격리성, 지속성) 트랙잭션을 완전히
지원하지는 않는다. 여러 개의 명령어를 하나의 트랙잭션으로 묶을 수 있지만, 트랜잭션 도중에 다른 클라이언트가 데이터를 수정할 수 있으며, 일부 명령어가 실패하더라도 롤백되지 않고 실행될 수 있다.
레디스의 정의와 어떤 상황에서 레디스를 사용하면 좋은지, 또 레디스의 단점은
어떤 것들이 있는지 알아봤다.
참고: 레디스 소개와 특징 및 장점 그리고 실제 활용 사례
'Back-end' 카테고리의 다른 글
템플릿 메서드 패턴 알아보기 (0) | 2025.04.03 |
---|---|
테스트와 TDD(Test Driven Development) (0) | 2025.03.31 |
데이터베이스를 최적화하는 방법들 (0) | 2025.03.01 |