스프링부트/트러블 슈팅

[Docker] Springboot 3.X 와 Redis 그리고 docker...

Choony 2024. 2. 18. 00:48

나는 docker compose 파일을 통해 ec2에서 Nginx, springboot, redis 총 3개의 컨테이너를 띄웠다.

 

Redis는 로그인과 로그아웃 기능을 위해 필히 스프링부트와 연동이 되어야하는 상황이었다.

 

일단

docker ps

 

명령을 통해 Nginx, springboot, Redis 가 모두 돌아가는 것을 확인하였고, 

 

docker exec -it <redis container name or id> redis-cli

 

명령어를 통해 레디스에 접근하고 ping 명령어를 통해 제대로 작동하는지 여부또한 체크하였다.

 

근데!! 포스트맨을 통한 로그인 API를 테스트하려고 할 때마다 자꾸 레디스와 연결이 안되는 오류가 발생하였다.

 

구글링을 해보니 간단히 해결법을 찾았다.

spring:
  data:
    redis:
      host: redis
      port: 6379

 

이건 Springboot의 application.yml 파일 내용이다. 평소에 로컬에서만 진행하다보니 host에 localhost를 적어서 수행하던게 큰 문제였다. 

도커 컨테이너는 독립적이라 각자의 ip를 가지고있다. 그러니 저 host부분이 localhost라면 스프링 컨테이너를 가리키는 것이다.

 

나는 compose 파일을 통해 Redis와 Springboot를 띄웠으므로 동일한 네트워크상에 위치하여 호스트네임으로 통신할 수 있다.

Redis의 경우 'redis'로 설정해놨기 때문에 application.yml 의 host부분에 redis라고 설정하면 제대로 연결이 되는것을 볼 수 있었다.

 

 

 

이렇게 네트워크 지식의 중요성을 함께 깨닫는 중이다. 개발만 해서 뭐하냐... CS 지식도 함께 공부하면 더 효율적인 개발을 할 수 있을것이다. 화이팅!