Redis는 Remote Dictionary Server의 약자로 Key-Value 형태의 데이터를 In-Memory 방식으로 저장하는 데이터 저장소입니다. 빠른 속도와 다양한 데이터 구조를 지원하며, 캐싱, 세션 관리, 메시지 브로커 등의 용도로 널리 사용됩니다.
Redis는 단순한 Key-Value 저장소가 아니라 다양한 데이터 타입을 지원합니다.
| 데이터 타입 | 설명 | 예시 |
|---|---|---|
| String | 기본적인 Key-Value 저장 방식 | SET key "value" |
| List | 순서가 있는 리스트 | LPUSH list_key "value" |
| Set | 중복 없는 데이터 집합 | SADD set_key "value" |
| Sorted Set | 점수를 기반으로 정렬된 데이터 집합 | ZADD sorted_set 1 "value" |
| Hash | Key-Value 쌍을 저장하는 해시 테이블 | HSET hash_key field "value" |
EXPIRE key 60 → 60초 후 해당 키 삭제PUBLISH channel message → 특정 채널에 메시지 전송MULTI → 여러 명령을 하나의 트랜잭션으로 실행 가능EXEC → 트랜잭션 실행Spring Boot에서는 Spring Data Redis를 통해 Redis를 쉽게 연동할 수 있습니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
spring:
redis:
host: localhost
port: 6379
@Service
@RequiredArgsConstructor
public class RedisService {
private final StringRedisTemplate redisTemplate;
public void setValue(String key, String value) {
redisTemplate.opsForValue().set(key, value);
}
public String getValue(String key) {
return redisTemplate.opsForValue().get(key);
}
}
@Cacheable 어노테이션과 함께 사용 가능Sorted Set을 활용하여 점수 기반 랭킹 시스템 구현 가능ZADD leaderboard 100 "player1" → 플레이어 점수 저장Pub/Sub 기능을 활용하여 이벤트 알림 및 비동기 처리 가능| 특징 | Redis | RDBMS |
|---|---|---|
| 속도 | 매우 빠름 (In-Memory) | 상대적으로 느림 (디스크 기반) |
| 데이터 구조 | Key-Value 기반 | 테이블 및 관계형 데이터 |
| 트랜잭션 | 지원하지만 제한적 | ACID 완전 지원 |
| 데이터 영속성 | 기본적으로 휘발성, 옵션으로 영속성 지원 | 디스크 저장, 영속성 보장 |
| 확장성 | 수평 확장(Sharding 가능) | 주로 수직 확장 |
Redis는 단순한 캐싱 용도뿐만 아니라 세션 관리, 메시지 브로커, 순위 시스템 등 다양한 방식으로 활용할 수 있다.
Spring Boot와 쉽게 연동할 수 있어 성능 최적화에 큰 도움이 된다.
하지만 데이터의 영속성이 기본적으로 보장되지 않으며 트랜잭션이 제한적이므로 RDBMS와 적절히 조합해서 사용하는 것이 중요하다는 점을 배웠다.