
가장 먼저 spring-boot-starter-data-redis 의존성을 추가해야 한다.
설정 파일은 application.yaml을 사용하며, Redis 서버의 접속 정보를 입력한다.
spring:
data:
redis:
host: localhost
port: 6379
별도의 설정을 하지 않으면 기본적으로 localhost:6379로 연결을 시도함.
JPA에 익숙하다면 가장 빠르게 적응할 수 있는 방식임. Java 객체를 Redis의 Hash 구조로 저장한다.
도메인 모델 설정
@RedisHash 어노테이션을 통해 Redis에 저장될 키의 접두사를 지정한다.
@RedisHash("item")
public class Item implements Serializable {
@Id
private Long id;
private String name;
private Integer price;
}
Repository 인터페이스
CrudRepository를 상속받는 것만으로 save(), findById(), deleteById() 등의 메서드를 즉시 사용할 수 있다.
동작 원리: 데이터를 저장하면 Redis에 item:{id} 형태의 Hash 키와, 전체 ID 목록을 관리하는 item이라는 Set 키가 생성됨.
장점: 사용법이 직관적이고 crud에 특화되어 있어 crud만 한다면 생산성에 도움이 됨
특정 자료형(List, Set, SortedSet 등)을 직접 다루거나 키 설계에 자유도를 높이고 싶을 때 사용한다.
StringRedisTemplate
문자열 중심의 작업을 할 때 별도 설정 없이 바로 주입받아 사용할 수 있는 빈(Bean)임. opsForValue(), opsForSet() 등의 메서드로 Redis 명령어를 호출한다.
ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
ops.set("key", "value"); // SET 명령
Custom RedisTemplate 설정
객체를 JSON 형태로 직렬화하여 저장하고 싶다면 직접 RedisTemplate을 빈으로 등록해야 함.
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, ItemDto> itemRedisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, ItemDto> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
// Key는 문자열, Value는 JSON으로 직렬화 설정
template.setKeySerializer(RedisSerializer.string());
template.setValueSerializer(RedisSerializer.json());
return template;
}
}
Repository 방식: 단순 CRUD 위주의 작업이나 JPA 스타일의 개발 환경에 적합함. 내부적으로 Hash 자료형을 사용함.
Template 방식: Redis의 다양한 데이터 구조(Set, Sorted Set 등)를 활용해야 하거나, 직렬화 방식을 커스터마이징해야 할 때 필수적임.
프로젝트의 요구사항에 맞춰 두 방식을 적절히 혼합하여 사용하는 것이 효율적임.