나는 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 지식도 함께 공부하면 더 효율적인 개발을 할 수 있을것이다. 화이팅!
'스프링부트 > 트러블 슈팅' 카테고리의 다른 글
Serializing PageImpl instances as-is is not supported (0) | 2024.08.13 |
---|---|
Error creating bean with name 'securityConfig' defined in file (1) | 2024.03.18 |
[Docker] dockerhub에 push가 왜 안되니? (0) | 2024.02.15 |
Docker file 작성 및 빌드와 테스트 (1) | 2024.02.15 |
Attempt to recreate a file for type 오류 해결하기 (0) | 2024.01.09 |