TIL_20250307_Redis

Kim jisu·2025년 3월 7일

TIL

목록 보기
14/43

1. Redis 개요

Redis는 Remote Dictionary Server의 약자로, Java의 Map과 같은 Key-Value Store 방식으로 데이터를 저장하는 NoSQL 데이터베이스입니다.

🔹 Redis의 주요 특징

  • 인메모리 데이터베이스
    • 데이터를 메모리에 저장하여 고속 읽기/쓰기 성능을 제공합니다.
    • 변경이 잦고 빠른 응답이 필요한 데이터(예: 세션 저장, 캐싱)에 적합합니다.
  • NoSQL 데이터베이스
    • 관계형 데이터베이스(RDBMS)와 달리 스키마 없이 Key-Value 형태로 저장됩니다.
    • 다양한 자료형을 지원하며, JSON 문서, 해시, 리스트, 집합(Set) 등을 다룰 수 있습니다.
  • Redis Stack
    • redis/redis-stack-server 이미지를 사용하면(docker로 설치시) 확률형 데이터, JSON 문서, 그래프 등의 확장 기능을 활용할 수 있습니다.
  • Redis Insight
    • Redis의 공식 IDE로, 데이터를 시각적으로 확인하고 관리할 수 있는 도구입니다.

2. Redis와 Spring Boot 연동

Spring Boot에서는 Spring Data Redis를 활용하여 Redis를 쉽게 사용할 수 있습니다.

✅ 방법 1: Repository 인터페이스 사용

Spring Data JPA의 JpaRepository처럼, RedisRepository를 사용하면 자동으로 Redis에 데이터를 저장, 조회, 삭제할 수 있습니다.
간단한 CRUD 작업을 수행하는 데 적합합니다.

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends CrudRepository<User, String> {
}
  • User 엔티티를 Redis에 저장하고, Key 값으로 String 타입의 ID를 사용합니다.
  • JPA의 CrudRepository처럼 간단한 CRUD 작업을 수행할 수 있습니다.

✅ 방법 2: RedisTemplate 사용

보다 세부적인 Redis 작업을 수행하려면 RedisTemplate을 활용할 수 있습니다.

  • Key와 Value 자료형을 직접 지정 가능
  • Redis의 다양한 데이터 구조(해시, 리스트, 집합 등)를 활용 가능

✔ RedisTemplate 설정

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<String, String> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new StringRedisSerializer());
        return template;
    }
}
  • RedisConnectionFactory를 사용하여 Redis와 연결
  • StringRedisSerializer를 사용하여 Key, Value를 문자열로 직렬화

✔ RedisTemplate을 이용한 데이터 저장 및 조회

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    
    private final RedisTemplate<String, String> redisTemplate;

    public UserService(RedisTemplate<String, String> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    public void saveUser(String userId, String name) {
        redisTemplate.opsForValue().set(userId, name);
    }

    public String getUser(String userId) {
        return redisTemplate.opsForValue().get(userId);
    }
}
  • opsForValue()를 사용해 Key-Value 저장 및 조회
  • opsForHash(), opsForList(), opsForSet() 등을 활용해 다양한 자료형 지원

3. Redis의 자료형과 활용

Redis는 Key-Value 구조를 기반으로 다양한 자료형을 제공합니다.
아래는 주요 자료형과 활용 예시입니다.

자료형설명주요 명령어활용 예시
String문자열 저장SET, GET, INCRBY세션 정보, 캐시
HashKey 안에 필드-값 저장HSET, HGET, HDEL사용자 정보 저장
List순서가 있는 리스트LPUSH, RPUSH, LPOP채팅 메시지
Set중복 없는 집합SADD, SREM, SMEMBERS태그, 팔로우 시스템
Sorted Set점수 기반 정렬된 집합ZADD, ZINCRBY, ZRANGE랭킹 시스템

🔹 예제: 인기 게시글 랭킹

ZINCRBY articles:ranks 1 articles:1  # articles:1의 점수를 1 증가
ZREVRANGE articles:ranks 0 9 WITHSCORES  # 상위 10개 인기 게시글 조회
  • 게시글 ID를 Key로 사용하고, 점수를 증가시켜 인기 랭킹 관리 가능
  • ZINCRBY를 사용하여 점수 업데이트

4. Redis를 활용한 Spring Boot 프로젝트 적용 사례

✅ 캐싱 (Session 저장, API 응답 캐싱)
✅ 인기 게시글 랭킹 시스템 (Sorted Set 활용)
✅ 채팅 시스템 (List 활용)
✅ 실시간 투표 시스템 (ZINCRBY 활용)


profile
Dreamer

0개의 댓글