[트러블 슈팅] 갑자기 사라진 Redis
기존에 잘 동작하던 개발 서버에서 Redis와 관련된 API 들이 동작하지 않는 것을 확인하게 되었다.
오류를 확인해보니 Redis 오류인 것을 확인하였다.
2025-02-03T01:31:34.427Z ERROR 1 --- [Eighteen_BE] [http-nio-8080-exec-22] o.a.c.c.C.[.[.[/].[dispatcherServlet] :
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed:
org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis] with root cause
일단 docker에 올려둔 redis를 확인해보려 하니 docker에 올려둔 redis가 보이지 않았다.
혹시 문제가 생겨 내려갔나 확인하기 위해 `docker ps -al` 명령어로 내려간 이미지가 있나 확인해보려 했지만 redis는 존재하지 않았다..
`docker images`를 확인해보고 레디스를 다시 올려보았다.
docker에 redis를 올리고 확인해보니 바로 종료된 것을 확인할 수 있다.
레디스 자체의 문제라고 판단되어 `docker logs redis`를 확인해본 결과 Redis 컨테이너가 REDIS_PASSWORD 환경 변수가 설정되지 않아서 실행되지 않은 것을 확인할 수 있다. Bitnami Redis 이미지는 기본적으로 비밀번호를 요구하며, 비밀번호 없이 실행하고 싶다면 ALLOW_EMPTY_PASSWORD 환경 변수를 설정해야 하는데 설정을 안해줘서 문제가 발생한 것이다.
ALLOW_EMPTY_PASSWORD 설정을 활성화하면서 실행해 보겠다.
docker run --name redis -p 6379:6379 -e ALLOW_EMPTY_PASSWORD=yes -d bitnami/redis:7.2.4
`docker ps`로 확인해보니 다음과 같이 잘 올라간 것을 확인할 수 있다.
근본적인 문제 해결
같은 팀원에게 물어보니 이전에도 같은 경험이 있다고 해서 레디스가 왜 혼자 내려가는지 알아봐야 할 것 같다.
가능성이 제일 높은 원인으로 메모리가 부족한 경우에 비정상적으로 종료될 수 있기 때문에 메모리를 확인해보았다.
메모리는 현재 0.05%만 사용되고 있기 때문에 문제는 없어 보인다.
생각해보니 redis를 방금 막 새로 올렸기 때문에 데이터가 굉장히 적을텐데 0.05%나 차지하고 있다고 생각해볼 수 있을거 같다.
`docker exec -it redis redis-cli`로 redis에 CLI에 접근하여 데이터를 확인해보니 데이터가 1개만 저장되어 있는걸 확인했다.
단순 계산으로 데이터 하나에 3.816MiB를 차지한다면 LIMIT 까지 대략 1,979개의 데이터가 저장되면 비정상적인 종료가 될 수 있다고 판단하였고, 겨우 2000개 정도의 데이터만을 저장하기에는 레디스가 저장할 데이터가 많기 때문에 이 부분을 해결해야 할 것 같다.