서비스에 대한 테스트를 진행할 때 Redis 서버가 실행 중이지 않아 테스트 시 Redis 서버를 구동시켜야 하는 불편함이 있다.
테스트 환경에 대한 내장 Redis를 구축하여 원활한 테스트를 진행하고자 한다.
Build.gradle
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-redis', version: '2.4.10'
implementation group: 'it.ozimov', name: 'embedded-redis', version: '0.7.3'
EmbeddedRedisConfig.java
import java.io.IOException;
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;
@Slf4j
@Profile("test")
@Configuration
public class EmbeddedRedisConfig {
@Value("${spring.redis.port}")
private int redisPort;
private RedisServer redisServer;
@PostConstruct
public void redisServer() throws IOException {
redisServer = new RedisServer(redisPort);
redisServer.start();
}
@PreDestroy
public void stopRedis() {
if (redisServer != null) {
redisServer.stop();
}
}
}
의존성 관리
spring-boot-starter-web의 spring-boot-starter-logging을 dependency로 참조하고 있다. 여기서
embedded-redis에서 Slf4j의 구현체인 Logback이 추가되어 Multiple Binding 에러가 발생
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-redis', version: '2.4.10'
implementation (group: 'it.ozimov', name: 'embedded-redis', version: '0.7.3') {
exclude group: 'org.slf4j', module: 'slf4j-simple'
}
윈도우에서 레디스는 메모리 할당에 문제가 있어 직접 제한을 걸어줘야한다.
로그를 보면 —maxheap flag를 주면 된다고 한다.
@PostConstruct
public void redisServer() throws IOException {
redisServer = RedisServer.builder()
.port(redisPort)
.setting("maxmemory 128M")
.build();
redisServer.start();
}
'Spring' 카테고리의 다른 글
QueryDsl - 중복 필터 where문 적용 (0) | 2024.02.10 |
---|---|
Spring Cloud Config URL 조회 시 보안 (0) | 2023.11.04 |
Spring Cloud Config Watch (1) | 2023.10.11 |
Spring Gateway 에러 핸들링 (0) | 2023.09.19 |
MSA에서 로그인 되어 있는 회원 정보 조회 (0) | 2023.09.18 |