Java에서 Redis를 사용할 때 CRUD Repository와 RedisTemplate은 각각 다른 수준의 추상화를 제공하는 방식입니다.
주요 차이점은 다음과 같습니다:
✅ 1. CRUD Repository (Spring Data Redis)
RedisRepository, CrudRepository, PagingAndSortingRepository 등과 같이 Spring Data가 제공하는 Repository 인터페이스를 사용하는 방식입니다.
🔹 장점
- 높은 추상화 수준: 단순한 CRUD 작업을 인터페이스로 정의하기만 하면, 구현 없이 자동으로 동작.
- 개발 속도 빠름: 반복적인 로직 줄일 수 있음 (
findById,save,delete등 기본 제공). - Spring Data의 기능을 활용 가능 (예: 쿼리 메서드, 페이징 등).
🔹 단점
- 세밀한 제어 어려움: 복잡한 데이터 구조나 커스텀 로직은 구현하기 어려움.
- 직렬화 방식 고정: 기본적으로 JDK 직렬화를 사용하고, 커스터마이징 하려면 설정 필요.
🔹 예시
public interface UserRedisRepository extends CrudRepository<User, String> {
Optional<User> findByUsername(String username);
}
✅ 2. RedisTemplate
Spring에서 제공하는 저수준 API로, 키-값 저장소로서 Redis를 유연하게 다룰 수 있음.
🔹 장점
- 유연성: Hash, List, Set 등 다양한 자료구조 지원.
- 복잡한 로직 가능: 파이프라이닝, 트랜잭션, Lua 스크립트 등 사용 가능.
- 직렬화 제어 용이: JSON, String, ByteArray 등 원하는 형태로 자유롭게 직렬화 가능.
🔹 단점
- 코드가 길어짐: CRUD도 직접 작성해야 하므로 보일러플레이트 코드 증가.
- 추상화 부족: 비즈니스 로직에 Redis 코드가 많이 들어올 수 있음.
🔹 예시
@Autowired
private RedisTemplate<String, User> redisTemplate;
public void saveUser(User user) {
redisTemplate.opsForValue().set(user.getId(), user);
}
public User getUser(String id) {
return redisTemplate.opsForValue().get(id);
}
🆚 요약 비교
| 항목 | RedisRepository (CRUD 방식) |
RedisTemplate |
|---|---|---|
| 추상화 수준 | 높음 | 낮음 |
| 사용 편의성 | 쉬움 (자동 구현) | 직접 구현 필요 |
| 커스터마이징 가능성 | 제한적 | 매우 높음 |
| 자료구조 지원 | 제한적 (주로 String 기반) | 다양함 (Hash, List, Set 등) |
| 직렬화 설정 | 설정 필요 | 자유로움 |
| 사용처 | 단순 CRUD, 캐싱 중심 | 복잡한 구조/로직 필요한 경우 |
🧠 언제 어떤 걸 써야 할까?
- 단순한 CRUD 중심의 캐시:
RedisRepository - 복잡한 자료구조나 세밀한 제어가 필요한 경우:
RedisTemplate
원하는 기능에 따라 두 가지를 혼합해서 사용하는 것도 일반적입니다.