Embedded Redis로 테스트 코드 통과하기

김동환·2022년 5월 1일
0

버디스탁 구현 중 새로운 기능 추가건이 들어왔다. 사용자가 앱 비밀번호를 틀린 경우 실패 횟수가 5회가 되면 휴대폰 인증을 다시 시키는 기능이다.

RDS에 실패 횟수를 저장하는것보다는 기존에 사용하는 redis에 5분짜리 데이터로 저장하기로 했다.

기능을 잘 구현하고 push를 했는데, github action에서 실패했다는 슬랙 메세지를 받았다.

원인은 github action에서 redis를 붙을 수 없기 때문이었다. 예전에 테스트 DB를 local mysql로 해놓았을때도 동일한 현상이 발생했다. 테스트 환경을 격리 해야하는데 신경쓰지 못한 부분이었다.

구글링을 통해 스프링에서 Embedded Redis를 지원한다는 것을 찾았고 프로젝트에 적용시켰다. 코드는 밸둥좌, 이동욱님블로그 에서 참고 했다.

pom.xml

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

EmbeddedRedisConfig.java

@Profile("local")
@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();
        }
    }
}

application.yml

spring:
  redis:
    host: localhost
    port: 6378
  config:
    activate:
      on-profile: local

다시 push를 하니 정상적으로 ecs까지 잘 올라갔다!

오늘 느낀점
1. 테스트 환경을 격리시키자 - fcm 서버, 파싱 서버 둘 다 격리 필요
2. 테스트 커버리지를 높이자 - 원래 redis 쓰고 있었는데 그에 대한 테스트 코드가 없어서 오늘 삽질을 하게 됐다.

profile
게으른 개발자

0개의 댓글