Redis Repositories

뾰족머리삼돌이·2024년 10월 19일
0

Spring Data Redis

목록 보기
10/12

앞선 포스팅에서는 RedisTemplate을 이용한 상호작용 방법을 알아볼 수 있었다.
템플릿 객체를 Configuration에 등록하고 Bean으로 주입받아 사용하거나, 직접 생성하는 방식으로 사용할 수 있었다.

이러한 사용방식은 Redis를 애플리케이션에 적극적으로 사용하는 경우,
중복되는 코드작성을 야기할 수 있고 Redis에 저장될 객체들을 관리하는데 어려움을 겪을 수 있다.

Spring Data에서는 이러한 문제개선을 위해 Repository 추상화를 제공하고 있으며, 이는 Redis 사용에도 적용된다.

Redis와 Repository

Spring Data의 Repository 추상화의 핵심클래스는 Repository 다.
보통은 CRUD기능을 지원하는 하위클래스인 CrudRepositoryListCrudRepository를 사용하는게 일반적이다.

페이징 기능을 원한다면 PagingAndSortingRepositoryListPagingAndSortingRepository를 고려해볼 수 있다

또한, Spring Data JPA에서 그랬듯이 메서드 명칭을 이용한 쿼리파생도 그대로 사용할 수 있다.

@RedisHash("people")
public class Person {

  @Id String id;
  String firstname;
  String lastname;
  Address address;
}

Spring Data Redis의 도메인 객체는 @RedisHash@Id 애노테이션을 이용해 설정할 수 있다.
이때, @Id 애노테이션은 org.springframework.data.annotation.Id 를 사용해야한다.

한 도메인 클래스를 JPA와 Redis 양쪽에서 사용할 수 있을까?

결론부터 말하자면 가능하다. 다만, JPA와 Redis를 함께 사용하는 경우 Bean 생성을 위한 로직이 각각 실행되므로 중복되는 Bean 명칭으로 인한 오류가 발생한다.

이 경우, 별도의 패키지로 Repository를 구분하여 관리해주거나 Filter를 이용한 작업처리가 필요하다.

만약, Spring Boot 환경이 아니라면 별도의 Java 설정파일을 작성해야한다.

@Configuration
@EnableRedisRepositories
public class ApplicationConfig {

  @Bean
  public RedisConnectionFactory connectionFactory() {
    return new LettuceConnectionFactory();
  }

  @Bean
  public RedisTemplate<?, ?> redisTemplate(RedisConnectionFactory redisConnectionFactory) {

    RedisTemplate<byte[], byte[]> template = new RedisTemplate<byte[], byte[]>();
    template.setConnectionFactory(redisConnectionFactory);
    return template;
  }
}

0개의 댓글

관련 채용 정보