Pink Spider/Boot에서 redis 사용하는 2가지 방법

Created Wed, 26 Mar 2025 11:11:03 +0900 Modified Mon, 08 Dec 2025 08:41:47 +0900
705 Words 3 min

Java에서 Redis를 사용할 때 CRUD RepositoryRedisTemplate은 각각 다른 수준의 추상화를 제공하는 방식입니다. 주요 차이점은 다음과 같습니다:


✅ 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

원하는 기능에 따라 두 가지를 혼합해서 사용하는 것도 일반적입니다.