반응형

임베디드 레디스를 이용해 테스트를 해보자

레디스를 로컬 환경에서 사용 할 때에 it.ozimov.redis에서 제공하는 Redis Server를 통해 테스팅을 할 수 있다.

스프링부트 Dependency 설정

  • spring-boot-starter-data-redis
    • 레디스 클라이언트 연결을 위한 추가
  • embedded-redis
    • 임베디드 레디스 서버를 사용하기 위해 추가
    • scopetest로 되어있으니, 필요에 따라 제거해도 상관없다. 다만, test로 되어있을 경우, src.main환경에서는 사용할 수 없으니 주의.
  • lombok
    • 필수는 아니지만, 예제 작성 편의를 위해 사용
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<dependency>
    <groupId>it.ozimov</groupId>
    <artifactId>embedded-redis</artifactId>
    <version>0.7.2</version>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <scope>provided</scope>
</dependency>

스프링 어플리케이션 설정

  • src.main.resources > application.yml
    • 레디스 클라이언트를 위한 설정정보
  • src.test.resources > application.yml
    • 레디스 서버가 바라볼 설정정보
spring:
  redis:
    host: localhost
    port: 16379

임베디드 레디스 서버 실행 정의

  • test/ 아래 config 파일 설정
package com.derveljun.blogredis.config.test;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import redis.embedded.RedisServer;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.io.IOException;

@Slf4j
// @Profile({"local", "dev", "test"}) -> test 소스내에서는 불필요
@Configuration
public class TestRedisConfig {

    private RedisServer redisServer;

    public TestRedisConfig(@Value("${spring.redis.port}") int redisPort) {
        redisServer = new RedisServer(redisPort);
    }

    @PostConstruct
    public void startRedis() throws IOException {
        redisServer.start();
    }

    @PreDestroy
    public void stopRedis() {
        redisServer.stop();
    }

}

레디스 클라이언트 빈 등록

package com.derveljun.blogredis.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;


@Configuration
@EnableRedisRepositories
public class RedisConfiguration {

    private String redisHost;
    private int redisPort;

    public RedisConfiguration(@Value("${spring.redis.host}") String redisHost,
                              @Value("${spring.redis.port}") int redisPort) {
        this.redisHost = redisHost;
        this.redisPort = redisPort;
    }

    @Bean
    public LettuceConnectionFactory redisConnectionFactory (RedisProperties redisProperties){
        return new LettuceConnectionFactory(redisHost, redisPort);
    }

    @Bean
    public RedisTemplate<?, ?> redisTemplate(LettuceConnectionFactory connectionFactory) {
        RedisTemplate<byte[], byte[]> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);
        return template;
    }

}

예제를 위한 도메인 생성

  • User.java
package com.derveljun.blogredis.domain;

import lombok.*;
import org.springframework.data.annotation.Id;
import org.springframework.data.redis.core.RedisHash;

import java.util.UUID;

@RedisHash("user")
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class User {

    @Id
    private UUID id;

    private String name;

}
  • UserRepository.java
package com.derveljun.blogredis.domain;

import org.springframework.data.repository.CrudRepository;

import java.util.UUID;

public interface UserRepository extends CrudRepository<User, UUID> {

}

예제 Github 위치

 

Derveljun/derveljun-blog-redis

Contribute to Derveljun/derveljun-blog-redis development by creating an account on GitHub.

github.com

 

 

 

 

 

반응형

WRITTEN BY
데르벨준

,