25.03.12 TIL Redis

신성훈·2025년 3월 12일

TIL

목록 보기
146/162

1. Redis란?

Redis는 Remote Dictionary Server의 약자로 Key-Value 형태의 데이터를 In-Memory 방식으로 저장하는 데이터 저장소입니다. 빠른 속도와 다양한 데이터 구조를 지원하며, 캐싱, 세션 관리, 메시지 브로커 등의 용도로 널리 사용됩니다.

Redis의 주요 특징

  • 인메모리 데이터 저장소: 모든 데이터를 메모리에 저장하여 매우 빠른 읽기,쓰기 성능 제공
  • 다양한 데이터 구조 지원: String, List, Set, Sorted Set, Hash 등
  • 영속성 지원: 데이터의 지속성을 위해 RDB(Snapshot), AOF(Append Only File) 방식 제공
  • 분산 시스템: 레플리케이션, 클러스터링을 통해 확장 가능
  • 멀티스레드 지원: Redis 6부터 I/O 멀티스레딩 지원으로 성능 향상

2. Redis의 데이터 구조

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"
HashKey-Value 쌍을 저장하는 해시 테이블HSET hash_key field "value"

3. Redis의 주요 기능

1) TTL (Time-To-Live)

  • 특정 키의 유효시간을 설정하여 자동 삭제 가능
  • EXPIRE key 60 → 60초 후 해당 키 삭제

2) Pub/Sub (Publish/Subscribe)

  • 메시지 브로커 역할 수행
  • PUBLISH channel message → 특정 채널에 메시지 전송

3) Transactions (트랜잭션)

  • MULTI → 여러 명령을 하나의 트랜잭션으로 실행 가능
  • EXEC → 트랜잭션 실행

4) Persistence (데이터 영속성)

  • RDB (Snapshot): 일정 시간마다 스냅샷을 저장
  • AOF (Append Only File): 모든 명령을 로그로 기록하여 복구 가능

4. Spring에서 Redis 사용하기

Spring Boot에서는 Spring Data Redis를 통해 Redis를 쉽게 연동할 수 있습니다.

의존성 추가

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

Redis 설정 (application.yml)

spring:
  redis:
    host: localhost
    port: 6379

Redis 사용 예제

@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);
    }
}

5. Redis 활용 사례

1) 캐시(Cache) 저장소

  • 데이터베이스의 부하를 줄이고 빠른 응답을 위해 사용
  • @Cacheable 어노테이션과 함께 사용 가능

2) 세션(Session) 저장소

  • 사용자 로그인 세션을 Redis에 저장하여 서버가 재시작되어도 유지

3) 순위(Ranking) 시스템

  • Sorted Set을 활용하여 점수 기반 랭킹 시스템 구현 가능
  • ZADD leaderboard 100 "player1" → 플레이어 점수 저장

4) 메시지 큐(Message Queue) 역할

  • Pub/Sub 기능을 활용하여 이벤트 알림 및 비동기 처리 가능

6. Redis와 RDBMS 비교

특징RedisRDBMS
속도매우 빠름 (In-Memory)상대적으로 느림 (디스크 기반)
데이터 구조Key-Value 기반테이블 및 관계형 데이터
트랜잭션지원하지만 제한적ACID 완전 지원
데이터 영속성기본적으로 휘발성, 옵션으로 영속성 지원디스크 저장, 영속성 보장
확장성수평 확장(Sharding 가능)주로 수직 확장

7. 마무리

Redis는 단순한 캐싱 용도뿐만 아니라 세션 관리, 메시지 브로커, 순위 시스템 등 다양한 방식으로 활용할 수 있다.
Spring Boot와 쉽게 연동할 수 있어 성능 최적화에 큰 도움이 된다.
하지만 데이터의 영속성이 기본적으로 보장되지 않으며 트랜잭션이 제한적이므로 RDBMS와 적절히 조합해서 사용하는 것이 중요하다는 점을 배웠다.

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글