24.12.09 TIL Redis

신성훈·2024년 12월 9일
0

TIL

목록 보기
95/162

1. Redis란?

Redis는 오픈 소스 인메모리 데이터 저장소로, 빠른 읽기 및 쓰기 성능을 제공하며 키-값(key-value) 구조를 기반으로 동작합니다.
단순 캐싱 외에도 데이터베이스, 메시지 브로커, 세션 관리 등 다양한 용도로 사용됩니다.


2. Redis의 주요 특징

  1. 빠른 속도
    • 모든 데이터를 메모리에 저장하며, 디스크 I/O를 최소화
  2. 다양한 데이터 구조 지원
    • String, List, Set, Sorted Set, Hash 등 다양한 자료형 지원
  3. 데이터 영속성
    • 메모리 기반 저장소지만 데이터가 디스크에 저장되도록 설정 가능
  4. 분산 환경 지원
    • Redis Cluster를 통해 수평 확장 가능
  5. 다양한 활용
    • 캐싱, 세션 관리, Pub/Sub 메시징, 분산 락 등에 활용

3. Redis의 주요 활용 사례

1) 캐싱

  • 데이터베이스 조회 결과를 Redis에 저장해, 재사용 시 빠르게 접근
  • 예: 자주 조회되는 데이터(상품 목록, 공지사항 등)
String value = redisTemplate.opsForValue().get("key");
if (value == null) {
    value = "some data from database";
    redisTemplate.opsForValue().set("key", value);
}

2) 세션 관리

  • 사용자 세션을 Redis에 저장해, 무상태(stateless) 서버를 구현
  • 예: Spring Session Redis를 사용해 세션 데이터를 관리
spring:
  session:
    store-type: redis

3) 분산 락

  • 여러 서버가 같은 자원에 접근할 때, Redis를 이용해 락을 구현
  • Redisson 라이브러리를 활용해 쉽게 구현 가능
RLock lock = redissonClient.getLock("lockKey");
lock.lock();
try {
    // 작업
} finally {
    lock.unlock();
}

4) Pub/Sub 메시징

  • 발행/구독 모델로 실시간 알림, 채팅 등 구현 가능
// 발행자
redisTemplate.convertAndSend("channel", "message");

// 구독자
@RedisListener(topics = "channel")
public void receiveMessage(String message) {
    System.out.println("Received: " + message);
}

4. Redis 설정 (Spring Boot)

  1. Redis 의존성 추가

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
  2. Redis 설정 (application.yml)

    spring:
      redis:
        host: localhost
        port: 6379
  3. RedisTemplate Bean 등록

    @Configuration
    public class RedisConfig {
        @Bean
        public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
            RedisTemplate<String, Object> template = new RedisTemplate<>();
            template.setConnectionFactory(connectionFactory);
            return template;
        }
    }

5. Redis와 트레이드오프

장점

  • 빠른 성능
  • 다양한 데이터 구조와 활용성
  • 간단한 설정과 사용법

단점

  • 메모리 기반으로 동작하기 때문에 메모리 용량이 제한적
  • 데이터 손실 가능성(영속성을 설정하지 않을 경우)
  • 복잡한 쿼리 처리에는 부적합(SQL 지원 X)

6. 마무리

  • Redis는 빠른 속도와 간단한 구조 덕분에 웹 애플리케이션의 성능 최적화에 유용함을 배웠습니다.
  • 특히 캐싱과 세션 관리는 개발자 입장에서 효율성을 높이는 데 중요한 기술이라고 느꼈습니다.
  • 앞으로 Redis의 Pub/Sub 기능을 활용해 실시간 알림 서비스나 분산 환경에서의 메시지 브로커를 구현해 보고 싶습니다.
profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글