Spring 프로젝트에서 Redis 와 관련된 기능들을 쉽게 다루기 위한 Spring 모듈이다. 다른 모듈과 마찬가지로 의존성을 추가해야 기능을 사용할 수 있다.

build.gradle

dependencies {
		implementation 'org.springframework.boot:spring-boot-starter-data-redis'
}

Spring 에서 Redis 를 사용하기 위한 방법은 두 가지가 있는데, RedisTemplate 을 이용한 방법과 Repository 를 이용하는 방법이다. Repository 는 JPA 와 유사한 방법으로 사용할 수 있다.

Redis Repository

Redis Repository 를 사용하기 위한 객체의 기본 구조는 다음과 같다.

controller - service - repository - entity

controller 와 service 는 다른 프로젝트와 동일하고, Repository 는 Redis 에 접근하는 DB 계층이다. Entity 는 Repository 에서 사용할 자바 객체이다. Entity 에서 Redis 에 저장할 값과 형식을 지정할 수 있다.

XXXRepository.java

import java.util.Optional;

import org.springframework.data.repository.CrudRepository;

import com.dobugs.yologaauthenticationapi.domain.OAuthToken;

public interface OAuthRepository extends CrudRepository<OAuthToken, Long> {

    Optional<OAuthToken> findByRefreshToken(String refreshToken);
}

CrudRepository 를 상속받아 사용할 수 있다. JPA 와 유사하게 메서드명으로 원하는 쿼리를 커스텀할 수 있다.

XXX.java

import org.springframework.data.annotation.Id;
import org.springframework.data.redis.core.RedisHash;
import org.springframework.data.redis.core.index.Indexed;

import lombok.AllArgsConstructor;

@AllArgsConstructor
@RedisHash
public class OAuthToken {

    @Id
    private Long memberId;

    private Provider provider;
    private String accessToken;

    @Indexed
    private String refreshToken;

		@TimeToLive
    private Long expiration;

    public static OAuthToken login(final Long memberId, final Provider provider, final String refreshToken, final Long expiration) {
        return new OAuthToken(memberId, provider, null, refreshToken, expiration);
    }
}

Redis Repository 테스트

JPA 에서 테스트하기 위해 @DataJpaTest 어노테이션을 사용했던 것처럼 Redis 를 테스트하기 위해서는 @DataRedisTest 어노테이션을 사용한다. 이 어노테이션을 사용하면 Redis 와 관련된 빈들만을 가져와 테스트할 수 있다.

Annotation for a Data Redis test that focuses only on Redis components.