포트폴리오/Eighteen

[트러블 슈팅] 갑자기 사라진 Redis

do_hyuk 2025. 2. 3. 12:06

기존에 잘 동작하던 개발 서버에서 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 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`로 확인해보니 다음과 같이 잘 올라간 것을 확인할 수 있다.


근본적인 문제 해결

같은 팀원에게 물어보니 이전에도 같은 경험이 있다고 해서 레디스가 왜 혼자 내려가는지 알아봐야 할 것 같다.

 

가능성이 제일 높은 원인으로 메모리가 부족한 경우에 비정상적으로 종료될 수 있기 때문에 메모리를 확인해보았다.

`docker stats` 명령어

 

메모리는 현재 0.05%만 사용되고 있기 때문에 문제는 없어 보인다.

생각해보니 redis를 방금 막 새로 올렸기 때문에 데이터가 굉장히 적을텐데 0.05%나 차지하고 있다고 생각해볼 수 있을거 같다.

 

`docker exec -it redis redis-cli`로 redis에 CLI에 접근하여 데이터를 확인해보니 데이터가 1개만 저장되어 있는걸 확인했다.

 

단순 계산으로 데이터 하나에 3.816MiB를 차지한다면 LIMIT 까지 대략 1,979개의 데이터가 저장되면 비정상적인 종료가 될 수 있다고 판단하였고, 겨우 2000개 정도의 데이터만을 저장하기에는 레디스가 저장할 데이터가 많기 때문에 이 부분을 해결해야 할 것 같다.