앞선 글에서는 Lettuce
기반의 RedisTemplate
을 이용해 Redis 명령어를 사용하는 기본적인 방법을 소개했다. 이번 글에서는 RedisTemplate
과 RedisRepository
의 차이를 비교하고, 각각의 장단점과 실무에서의 사용 사례를 정리해본다.
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
는 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>
항목 | RedisTemplate | RedisRepository |
---|---|---|
기반 | Lettuce | Lettuce |
접근 방식 | 명령어 중심 API | 객체 중심 Repository 추상화 |
장점 | 유연한 커맨드 조합, 모든 명령 사용 가능 | CRUD 추상화, 간결한 코드 |
단점 | 코드 복잡도 증가, 로직 중복 발생 | Redis Hash에만 대응, 복잡한 제어 어려움 |
트랜잭션 처리 | ❌ 불가능 (Lettuce의 한계) | ❌ 불가능 (동일) |
적합한 경우 | 캐시 처리, TTL 제어, 키 기반 제어 등 | 사용자 세션, 단순 객체 저장/조회 |
RedisRepository
가 간편하다.RedisTemplate
이 유리하다.Spring Data Redis는 Lettuce 클라이언트를 기반으로 다양한 접근 방법을 제공한다.
개발자는 RedisTemplate
과 RedisRepository
두 가지 방식 중
데이터 구조와 요구 기능에 따라 선택적으로 활용하면 된다.
다만, Lettuce 기반 구조의 한계로 인해 두 방식 모두 트랜잭션 처리나 복잡한 연산 흐름에는 부적합하다. 그런 경우에는 Redisson과 Lua를 활용해 원자성 보장과 고급 흐름 제어를 구현하는 것이 권장된다.