[Redis] 스프링에서 레디스 사용하기 — RedisRepository vs RedisTemplate

y001·2025년 4월 19일
0
post-thumbnail

앞선 글에서는 Lettuce 기반의 RedisTemplate을 이용해 Redis 명령어를 사용하는 기본적인 방법을 소개했다. 이번 글에서는 RedisTemplateRedisRepository의 차이를 비교하고, 각각의 장단점과 실무에서의 사용 사례를 정리해본다.


RedisTemplate란?

RedisTemplate은 Spring Data Redis에서 가장 기본적인 Redis 클라이언트 접근 방식이다. 다양한 Redis 명령어(get, set, incr, expire 등)를 자바 코드로 직접 제어할 수 있게 해준다. 내부적으로는 Lettuce를 사용하며, 매우 유연한 구조를 제공한다.

사용 예시

@Autowired
private StringRedisTemplate stringRedisTemplate;

stringRedisTemplate.opsForValue().set("session:user:1", "active");
String status = stringRedisTemplate.opsForValue().get("session:user:1");

RedisRepository란?

RedisRepository는 JPA의 JpaRepository와 유사하게, 객체를 Redis에 저장하고 관리할 수 있도록 추상화된 저장소 인터페이스이다. 복잡한 명령어 없이도 Redis에 객체를 자동으로 저장/조회할 수 있게 해주며, 내부적으로 역시 Lettuce 기반이다.

사용 조건

  • @RedisHash("도메인명") 어노테이션이 필요
  • 엔티티에는 @Id가 지정되어 있어야 함
  • 도메인은 직렬화 가능한 구조여야 함

예시

@RedisHash("UserSession")
data class UserSession(
    @Id val id: String,
    val userId: Long,
    val status: String
)

interface UserSessionRepository : CrudRepository<UserSession, String>

두 방식의 비교

항목RedisTemplateRedisRepository
기반LettuceLettuce
접근 방식명령어 중심 API객체 중심 Repository 추상화
장점유연한 커맨드 조합, 모든 명령 사용 가능CRUD 추상화, 간결한 코드
단점코드 복잡도 증가, 로직 중복 발생Redis Hash에만 대응, 복잡한 제어 어려움
트랜잭션 처리❌ 불가능 (Lettuce의 한계)❌ 불가능 (동일)
적합한 경우캐시 처리, TTL 제어, 키 기반 제어 등사용자 세션, 단순 객체 저장/조회

활용하기

  • 간단한 도메인 객체 저장/조회가 필요할 때RedisRepository가 간편하다.
  • TTL 설정, 커스텀 키 구성, 여러 명령을 조합한 제어 흐름이 필요한 경우RedisTemplate이 유리하다.
  • 두 방법은 서로 대체 관계라기보단 보완 관계로 이해하는 것이 좋다. 상황에 맞게 조합해서 쓰는 것이 이상적이다.

마무리

Spring Data Redis는 Lettuce 클라이언트를 기반으로 다양한 접근 방법을 제공한다.
개발자는 RedisTemplateRedisRepository 두 가지 방식 중
데이터 구조와 요구 기능에 따라 선택적으로 활용하면 된다.

다만, Lettuce 기반 구조의 한계로 인해 두 방식 모두 트랜잭션 처리나 복잡한 연산 흐름에는 부적합하다. 그런 경우에는 Redisson과 Lua를 활용해 원자성 보장과 고급 흐름 제어를 구현하는 것이 권장된다.

0개의 댓글