Tiny Star

IT

Redis란?

흰둥아 2025. 4. 28. 18:02

공고보면 기술 스택에 Redis가 있는 경우를 왕왕 봤다.

전 실무에서는 대용량데이터를 넣고 통계돌리는 일이 과반수였기 때문에 Redis를 사용할 일이 없었다.

그래서 개인 프로젝트하면서 사용할건데, 막상 Redis 에 대해 자세히 알지 못해서 찾아서 정리해보려고 한다.

 

 


 

 

1. Redis 란?

Remote Dictionary Server의 약자로 메모리 기반의 Key-Value 저장소이다.

대표적인 In-Memory DataStructure Store로 데이터가 RAM에 저장되어 매우 빠른 읽기/쓰기 속도를 제공한다.

RAM 사용으로 인한 단점은 없을까?
- 비용 문제: 디스크에 비해 비싸기 때문에 대용량 데이터를 저장하려면 비용이 많이 든다.
- 용량 한계: 디스크보다 훨씬 작기 때문에, 너무 많은 데이터를 넣으면 금방 메모리가 가득 찬다.
- 데이터 휘발성: Persistence 설정으로 어느 정도 방지가 가능하지만, 기본적으로 꺼지면 데이터가 사라진다.
- 복잡한 관리: 데이터 크기 관리, eviction(메모리 초과 시 삭제) 정책 설정 등 추가 관리가 필요하다.
In-Memory Data Structure Store?
RAM 안에 다양한 자료구조(문자열, 리스트, 해시, 집합 등)를 저장하는 시스템
- In-Memory: 데이터를 디스크가 아니라 메모리에 저장하는 방식
- Data Structure Store: 단순히 문자열만 저장하는 게 아닌, 다양한 데이터 구조(Data Structrue)를 저장할 수 있는 저장소

 

 

 

 

2. Redis를 사용하는 주요 이유

  • 매우 빠른 속도: 메모리 기반이라 디스크 IO가 없어 빠름
  • 다양한 구조 지원: 간단한 캐시부터 복잡한 메시징 시스템까지 가능
  • 확장성: 클러스터로 확장 가능
  • 간편한 사용법: 명령어가 직관적이고 쉽다

 

Redis 사용 예시

  • 캐시 시스템: DB 부하를 줄이기 위해 조회 결과를 캐싱
  • 세션 관리: 로그인 세션을 Redis에 저장
  • 메시지 브로커: Pub/Sub 기능을 이용한 채팅, 알림 시스템
  • 실시간 순위표: Sorted Set을 이용하여 점수 기반 실시간 랭킹 구현

 

 

 

 

3.주요 특징

항목 설명
In-Memory 데이터를 메모리에 저장하여 디스크보다 빠른 속도를 냄
Key-Value 구조 Key에 다양한 형태의 Value(문자열, 리스트, 해시, 집합, 정렬된 집합 등)를 저장
Persistence 지원 메모리에만 저장하는 것이 아니라 디스크에 주기적으로 저장하여 데이터 유실을 방지할 수 있음 (RDB, AOF)
다양한 데이터 타입 문자열(String), 리스트(List), 해시(Hash), 집합(Set), 정렬된 집합(Sorted Set) 등을 지원
Pub/Sub 지원 메시지 큐처럼 Publish/Subscribe 기능 제공
트랜잭션 명령어들을 하나의 트랜잭션으로 묶어 실행 가능 (MULTI/EXEC)
Replication Master-Slave 복제 지원
High Availability Sentinel, Cluster 모드 제공

 

 

메시지 큐?

프로그램끼리 비동기로 메시지를 주고받기 위한 큐 시스템

(빠른 처리, 비동기 통신, 시스템 간 분리(Decoupling), 부하 완충)

 

✔ 메시지 큐 기본 개념

역할 설명
Producer(생산자) 메시지를 만들어 큐에 집어넣는 쪽 (ex: 주문 요청을 보낸다)
Queue(큐) 메시지를 저장하는 공간 (RAM이나 디스크)
Consumer(소비자) 큐에 쌓인 메시지를 꺼내서 처리하는 쪽 (ex: 주문을 처리한다)

 

✔ 특징:

  • 비동기 처리: 생산자(Producer)는 메시지만 던지고 바로 다른 일 하러 간다. 소비자(Consumer)가 나중에 가져간다.
  • 비접속성(Decoupling): 생산자와 소비자가 서로 몰라도 된다.
  • 내구성: 메시지가 큐에 안전하게 쌓였다가 소비될 수 있다.

 

 

 

 

4. Redis의 데이터 타입

타입 설명 예시
String 가장 기본적인 타입 (ex: 문자열, 숫자) "key1" => "Hello"
List 순서가 있는 문자열 리스트 (Queue처럼 사용 가능) "queue" => ["a", "b", "c"]
Set 중복 없는 집합 "myset" => {"a", "b", "c"}
Hash 필드-값 쌍을 저장하는 구조 "user:1" => {"name": "Alice", "age": "30"}
Sorted Set 점수(score)에 따라 정렬된 집합 "ranking" => [("Alice", 100), ("Bob", 95)]

 

 

 

 

 

5. Redis Persistence (지속성)

방식 설명
RDB (Redis Database Backup) 일정 시간마다 전체 데이터를 스냅샷(snapshot)으로 디스크에 저장
AOF (Append Only File) 모든 쓰기 작업을 로그 파일에 기록하여 복구 가능
혼합 모드 RDB + AOF 병행하여 사용

 

 

 

 

 

6. 기본 명령어

명령어 설명 예시
SET key value 값 저장 SET name "Alice"
GET key 값 조회 GET name
DEL key 키 삭제 DEL name
LPUSH list value 리스트 왼쪽에 값 추가 LPUSH queue "a"
SADD set value 집합에 값 추가 SADD myset "apple"
HSET hash field value 해시 필드 설정 HSET user:1 name "Alice"
ZADD zset score member 정렬된 집합에 추가 ZADD ranking 100 "Alice"

 

'IT' 카테고리의 다른 글

[데이터] Kaggle (캐글)  (0) 2025.05.05
[Spring] @Transactional 트랜잭션 어노테이션  (0) 2025.04.28
[JAVA] MyBatis VS JPA  (0) 2025.04.23
top