Redis란

박세건·2024년 7월 18일
0

기술 학습

목록 보기
5/11
post-thumbnail

Redis: 고성능 메모리 기반 데이터베이스

📌 Redis란 무엇인가?

Redis(Remote Dictionary Server)는 메모리에 데이터를 저장하는 NoSQL 데이터베이스로, 키-값(Key-Value) 구조로 데이터를 관리합니다.
빠른 읽기/쓰기 성능과 다양한 데이터 구조를 지원하며, 캐싱, 세션 관리, 메시지 큐 등 다양한 분야에서 사용됩니다.


💡 Redis가 나온 이유

과거에는 관계형 데이터베이스(RDBMS)가 주로 사용되었으나, 속도와 확장성에 한계가 있었습니다.
특히 대규모 트래픽 처리실시간 데이터 처리가 필요한 상황에서는 더 빠른 데이터 접근이 필요했습니다.
Redis는 메모리 기반으로 동작하여 기존 데이터베이스보다 훨씬 빠른 속도로 데이터에 접근할 수 있도록 설계되었습니다.


🚀 Redis의 주요 특징

✅ 1. 메모리 기반으로 빠른 성능 제공

  • 모든 데이터를 메모리에 저장하여 초고속 읽기 및 쓰기가 가능함.
  • 디스크에 데이터를 주기적으로 저장하여 데이터의 영구성도 보장(RDB, AOF).

✅ 2. 다양한 데이터 구조 지원

  • 문자열(String), 리스트(List), 셋(Set), 정렬된 셋(Sorted Set), 해시(Hash) 등 다양한 데이터 구조를 지원.

✅ 3. 싱글 스레드 아키텍처로 예측 가능한 성능 제공

  • 단일 스레드로 동작하여 잠금 이슈를 최소화하며, 동시성 처리에서도 안정적인 성능 제공.

✅ 4. 데이터 영구성 보장 (Persistence)

  • RDB (Redis Database File): 일정 주기로 메모리 데이터를 디스크에 저장 (스냅샷 방식).
  • AOF (Append-Only File): 모든 쓰기 명령어를 로그 파일에 기록하여 재시작 시 복구.

✅ 5. Pub/Sub 기능을 통한 메시지 브로커 역할

  • 발행/구독(Publish/Subscribe) 모델을 지원하여 비동기 통신실시간 알림을 구현 가능.

✅ 6. 고가용성과 확장성

  • Redis Sentinel을 통한 자동 장애 복구고가용성(HA) 지원.
  • Redis Cluster를 통해 데이터 분산 및 수평적 확장 가능.

⚡ Redis의 데이터 영구성 (Persistence)

Redis는 기본적으로 메모리에 데이터를 저장하지만, RDBAOF 방식을 통해 데이터의 영구성도 제공합니다.

🗂️ RDB (Redis Database File)

  • 스냅샷 방식으로 주기적으로 전체 데이터를 디스크에 저장 (파일명: dump.rdb).
  • 복구 속도가 빠르며, 파일 크기가 작아 백업에 유리함.
  • 단점: 마지막 스냅샷 이후의 데이터는 복구 불가(일부 데이터 손실 가능).

📝 AOF (Append-Only File)

  • 모든 쓰기(Write) 명령어를 파일에 기록하여 재시작 시 명령어 재실행으로 데이터를 복구 (파일명: appendonly.aof).
  • 데이터 손실이 거의 없음(Persistence 보장).
  • 단점: RDB보다 파일이 크고 속도가 느림.

💡 RDB와 AOF의 조합 (일반적인 사용 방법)

  • Redis는 먼저 RDB 파일을 사용해 대략적인 데이터(스냅샷 시점까지)를 복구함.
  • 이후 AOF 파일을 사용해 RDB에 포함되지 않은 최신 데이터를 추가로 복구하여 최신 상태를 보장.

💾 Redis의 데이터 구조와 명령어

1. 문자열(String)

  • 단일 키에 문자열 값을 저장 (최대 512MB).
  • 명령어: SET, GET, INCR, APPEND
SET user:name "Alice"
GET user:name
INCR user:score

2. 리스트(List)

  • 순차적으로 데이터 저장(연결 리스트 구조).
  • 명령어: LPUSH, RPUSH, LPOP, RPOP
LPUSH messages "Hello"
LPUSH messages "World"
LPOP messages

3. 셋(Set)

  • 중복을 허용하지 않는 유일한 값들의 집합.
  • 명령어: SADD, SPOP, SMEMBERS
SADD users "Alice"
SADD users "Bob"
SMEMBERS users

4. 정렬된 셋(Sorted Set)

  • 값과 함께 점수(Score)를 저장하며 점수 순으로 정렬됨.
  • 명령어: ZADD, ZRANGE, ZRANK
ZADD leaderboard 100 "Alice"
ZADD leaderboard 200 "Bob"
ZRANGE leaderboard 0 -1

5. 해시(Hash)

  • 필드(Field)-값(Value) 쌍으로 구성된 맵(Map) 형태 데이터.
  • 명령어: HSET, HGET, HGETALL
HSET user:1000 name "Alice"
HSET user:1000 age 25
HGETALL user:1000

⚖️ Redis와 다른 데이터베이스의 차이점

특징RedisMemcachedRDBMS (MySQL, PostgreSQL)
저장 방식메모리 기반 (옵션으로 디스크 저장)메모리 기반 (디스크 저장 불가)디스크 기반
데이터 구조문자열, 리스트, 셋, 해시 등 다양한 구조 지원단순 문자열 저장테이블, 관계형 구조
데이터 영구성RDB, AOF로 영구성 보장비영구성 (서버 재시작 시 데이터 소멸)영구성 보장
동작 방식싱글 스레드로 예측 가능한 성능멀티 스레드 기반멀티 스레드 기반
확장성Redis Cluster를 통한 수평적 확장Sharding으로 확장Scale-Up(수직적 확장)
사용 목적캐싱, 세션 관리, 메시지 큐, 실시간 분석단순 캐싱복잡한 트랜잭션과 관계형 데이터 관리

💡 Redis는 단순 캐시 시스템인 Memcached와 달리 데이터 영구성을 제공하며, 고속 읽기/쓰기와 다양한 데이터 구조를 지원해 더 광범위하게 사용됨.


🟢 Redis의 장단점

장점

  • 초고속 성능: 메모리 기반으로 매우 빠른 읽기/쓰기 속도 제공.
  • 다양한 데이터 구조: 문자열, 리스트, 셋, 해시 등 다양한 구조 지원.
  • 확장성: Redis Cluster로 여러 노드에 데이터를 분산하여 확장 가능.
  • 데이터 영구성: RDB와 AOF를 통해 데이터 손실 최소화.

⚠️ 단점

  • 메모리 한계: 모든 데이터를 메모리에 저장하므로, 대용량 데이터에서는 비용이 증가.
  • 싱글 스레드 한계: 단일 스레드로 작동하므로 CPU 코어를 모두 사용하지 못함.
  • 복잡한 쿼리 미지원: SQL과 같은 복잡한 쿼리를 사용할 수 없음.

📝 Redis의 사용 사례 (Use Cases)

1. 캐싱(Caching)

  • 웹 페이지 로딩 속도 개선: Redis를 사용하여 자주 요청되는 웹 페이지의 HTML 데이터를 캐시에 저장해 데이터베이스 부하를 줄임.
  • 예: 전자상거래 사이트에서 상품 목록을 Redis에 캐싱하여 사용자가 더 빠르게 제품을 탐색할 수 있음.

2. 세션 관리(Session Management)

  • 사용자 로그인 상태 유지: Redis를 사용하여 사용자의 로그인 세션인증 토큰을 관리해 세션 유지와 빠른 접근을 보장.
  • 예: 소셜 미디어 플랫폼에서 사용자가 로그인 시 세션 데이터를 Redis에 저장하여 로그인 상태를 유지함.

3. 메시지 큐(Message Queue)

  • 비동기 작업 처리 및 서비스 간 통신: Redis의 리스트(List) 구조를 사용해 비동기 작업의 대기열(Queue)을 구현.
  • 예: 이메일 발송 서비스에서 사용자의 요청을 Redis 큐에 추가하고 백그라운드에서 순차적으로 처리함.

4. 실시간 분석(Real-time Analytics)

  • 실시간 사용자 데이터 집계 및 통계: Redis의 정렬된 셋(Sorted Set)을 사용해 실시간 순위 및 점수 계산.
  • 예: 게임 플랫폼에서 실시간 플레이어 랭킹을 Redis에 저장하고, 사용자가 순위를 요청할 때 즉시 응답함.

5. Pub/Sub 시스템

  • 실시간 알림 및 이벤트 처리: Redis의 Publish/Subscribe 기능을 통해 서비스 간 비동기 이벤트를 처리.
  • 예: 채팅 애플리케이션에서 사용자가 메시지를 보낼 때 Redis가 채널을 통해 메시지를 구독자에게 즉시 전달.

6. 분산 락(Distributed Lock)

  • 동시성 제어 및 데이터 충돌 방지: Redis의 SETNX 명령어를 사용해 분산 환경에서도 락(Lock)을 구현.
  • 예: 전자상거래 사이트에서 상품 재고를 동시에 업데이트하지 않도록 Redis 락을 사용해 동시성 문제를 해결함.

7. 임시 데이터 저장(Temporary Storage)

  • 일시적인 데이터와 제한 시간 설정: Redis의 EXPIRE 명령어로 특정 시간이 지나면 자동으로 데이터가 삭제되게 설정.
  • 예: 회원가입 시 전송된 인증 코드를 5분 동안만 저장하여 보안성을 유지함.

📦 Redis 설치 및 사용 방법

Redis 설치 (Ubuntu 예시)

sudo apt update
sudo apt install redis-server
sudo systemctl start redis

Redis CLI 사용

# Redis CLI 실행
redis-cli

# 데이터 설정 및 조회
SET user:name "Alice"
GET user:name

# 데이터 삭제
DEL user:name

💡 결론

Redis는 고속 성능, 다양한 데이터 구조, 데이터 영구성을 제공하여 캐싱, 세션 관리, 메시지 큐, 실시간 데이터 처리 등 다양한 분야에서 사용됩니다.
특히 RDBAOF를 함께 사용하면 빠른 복구데이터 손실 최소화라는 장점을 모두 얻을 수 있어 고가용성과 확장성이 필요한 서비스에 적합합니다. 🚀

profile
멋있는 사람 - 일단 하자

0개의 댓글