✅ Redis란?

졸용·2025년 5월 21일

✅ Redis란?

Redis는 데이터 저장과 캐싱에 모두 강력한 기능을 제공하는 초고속 인메모리 데이터 저장소이다.

REmote DIctionary Server의 줄임말

  • RAM(메모리) 에 데이터를 저장해서 매우 빠른 속도를 자랑한다.
  • 기본적으로는 Key-Value 구조지만, 다양한 자료구조도 지원한다.
  • 오픈소스이며, 많은 시스템에서 캐시, 세션 저장소, 메시지 큐 등으로 사용되고 있다.

✅ 주요 특징

특징설명
🔥 초고속 처리 속도모든 데이터가 메모리에 있으므로 디스크보다 훨씬 빠름
🔑 Key-Value 저장 방식문자열, 리스트, 해시, 집합, 정렬된 집합 등 다양한 자료형 지원
🧠 캐시 용도 최적화TTL(Time To Live) 설정 가능 → 자동 만료 가능
💾 Persistence 지원메모리에 있지만 디스크에도 주기적으로 저장 가능 (옵션)
📡 분산 시스템 지원Redis Cluster, Replication 등 고가용성 아키텍처 가능
📨 Pub/Sub 기능메시지 브로커로도 사용 가능

✅ Redis는 어디에 쓰이나?

사용 사례설명
캐시DB 대신 자주 쓰는 데이터를 Redis에 저장하여 빠르게 제공
세션 저장소사용자 로그인 세션 같은 상태 정보 저장
순위표/좋아요 수빠른 증가 연산/정렬이 필요한 기능에 적합
메시지 큐pub/sub, 스트림 처리 등 실시간 알림용으로 활용
분산락여러 서버 간 자원 충돌을 막기 위해 사용

✅ Redis vs 일반 DB

항목Redis관계형 DB
속도매우 빠름 (메모리 기반)상대적으로 느림 (디스크 기반)
저장방식Key-Value (비정형)Table/Column (정형)
주요 용도캐시, 세션, 큐트랜잭션, 정형 데이터 저장
영속성선택 가능 (RDB, AOF)기본적으로 영속적

✔️ 예시

> SET title "Redis is awesome"
OK
> GET title
"Redis is awesome"

✅ Redis를 Spring에서 쓰는 대표적인 방식

  1. @Cacheable + Redis → API 응답 캐싱
  2. @SessionAttributes + Redis → 로그인 세션 유지
  3. RedisTemplate/ReactiveRedisTemplate → Redis 데이터 직접 제어

✅ 요약

항목내용
정의인메모리 기반 초고속 Key-Value 저장소
주요 용도캐시, 세션, 실시간 데이터 처리
장점빠름, TTL, 다양한 자료형, 분산 시스템 가능
단점메모리 기반 → 비용/용량 제한 가능성 있음


✅ 1. Spring Boot + Redis 설정 예제

✔️ 1.1 의존성 추가 (build.gradle)

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-redis'
    implementation 'org.springframework.boot:spring-boot-starter-cache'
}

✔️ 1.2 Redis 설정 (RedisConfig.java)

@Configuration
@EnableCaching
public class RedisConfig {

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory("localhost", 6379);
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory());
        return template;
    }

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
            .entryTtl(Duration.ofMinutes(10)) // 캐시 유효 시간
            .disableCachingNullValues();

        return RedisCacheManager.builder(connectionFactory)
            .cacheDefaults(config)
            .build();
    }
}

✔️ 1.3 사용 예

@Service
@RequiredArgsConstructor
public class PostService {

    private final PostRepository postRepository;

    @Cacheable(value = "searchPosts", key = "#title")
    public Page<Post> searchPosts(String title, Pageable pageable) {
        return postRepository.findAllByTitleContaining(title, pageable);
    }
}

✅ 2. Redis vs Caffeine 비교

항목RedisCaffeine
저장 위치외부 서버 (네트워크 기반)애플리케이션 JVM 내부 (메모리 기반)
속도빠름 (하지만 네트워크 오버헤드 존재)매우 빠름 (로컬 메모리 접근)
확장성분산 캐시 가능 (멀티 인스턴스 공유 가능)불가능 (인스턴스 로컬 캐시만 가능)
캐시 크기메모리 제한 없음 (서버가 감당 가능한 한)JVM 힙 사이즈에 의존
복잡도설정/운영이 상대적으로 복잡설정 간단, 코드만으로 가능
적합한 경우사용자 수가 많고 인스턴스가 여러 개인 대규모 서비스단일 인스턴스나 소규모 트래픽 환경
TTL, 만료 정책설정 가능 (TTL, LRU 등)매우 정교한 정책 제공 (LFU, LRU 등)
추가 기능pub/sub, persistence 등단순 캐시 기능만 제공

✔️ 어떤 걸 선택해야 할까?

  • Caffeine 추천

    • 트래픽이 낮거나, 단일 서버로 운영되는 서비스
    • 매우 빠른 속도가 필요한 경우
  • Redis 추천

    • 여러 서버에서 캐시를 공유해야 하는 경우 (멀티 인스턴스)
    • 세션 저장, 메시지 큐 등 다양한 기능이 필요한 경우
profile
꾸준한 공부만이 답이다

1개의 댓글

comment-user-thumbnail
2025년 5월 21일

Redis까지!! 아주 든든합니다

답글 달기