상황
문제 : GATEWAY 에 api/v1/user 로 들어오는 요청이 USER-SERVICE 로 흘러가지 않았다.
GATEWAY 에 USER-SERVICE가 분명 올라가 있다
하지만 해당 경로로 요청할 시 GATEWAY 에서는 USER-SERVICE를 찾을 수 없다고 로 log가 나온다.
이유는 api/v1/user 로 들어오는 요청에 대해 gateway에선 USER-SERVICE로 로드밸런싱 해주는데
gateway와 USER-SERVICE는 서로 다른 network에서 실행중이어서 소통이 안됐다.
해결
#1
다른 VM에서 실행 중이던 gateway와 USER-SERVICE를 같은 VM( villion-server )에서 실행해주었다.
#2
하나의 network 를 만들어서 소통이 가능하게 했다.
docker network create test-net
생성 후 아래의 명령어로 container를 실행할 때 네트워크 추가
docker run --name villion-user-service -d --network test-net sesamdocker/villion-user-service
내가 만든 test-net 이라는 network 에 잘 들어왔는지 확인 (잘 들어온 모습)
docker network inspect test-net
정상처리 가능
네트워크에 컨테이너를 추가해야 하는 이유
네트워크에 컨테이너를 추가해야 하는 이유는 컨테이너 간 통신을 가능하게 하기 위해서입니다. Docker에서는 기본적으로 각 컨테이너가 고립된 환경에서 실행되며, 컨테이너 간 통신을 위해서는 같은 Docker 네트워크에 속해야 합니다. 아래는 네트워크 추가가 중요한 이유들입니다.
1. 컨테이너 간 통신 허용
- 같은 네트워크에 속한 컨테이너들만 서로 IP 주소나 컨테이너 이름을 사용해 통신할 수 있습니다. 예를 들어, GATEWAY 컨테이너에서 USER-SERVICE 컨테이너로 요청을 보내려면, 두 컨테이너가 같은 네트워크에 있어야 서로의 이름이나 IP 주소로 통신할 수 있습니다.
2. 서비스 발견 및 로드밸런싱
- 여러 서비스가 서로 통신해야 하는 마이크로서비스 아키텍처에서는 네트워크를 사용해 서비스 간의 위치를 동적으로 발견하고, 필요한 경우 로드밸런싱을 통해 요청을 분산할 수 있습니다.
3. 격리된 네트워크 구성
- Docker 네트워크를 사용하면 컨테이너 간의 통신을 네트워크 단위로 격리할 수 있어, 보안적으로도 안전한 환경을 구축할 수 있습니다. 예를 들어, 개발, 테스트, 프로덕션 네트워크를 분리하여 각 환경에서 필요한 서비스들만 통신할 수 있게 할 수 있습니다.
4. DNS 기능 제공
- Docker 네트워크에서는 컨테이너 이름을 DNS 이름으로 사용할 수 있어, IP 주소 대신 컨테이너 이름을 사용해 통신할 수 있습니다. 이는 서비스 간의 통신을 더 직관적으로 만들어 줍니다.
따라서 GATEWAY와 USER-SERVICE 또는 PRODUCT-SERVICE 같은 컨테이너들이 서로 통신하려면, 동일한 네트워크에 추가하여 네트워크 간 통신이 가능하도록 설정해야 합니다. 이 과정이 없다면, 각 컨테이너는 자신만의 고립된 네트워크에서 실행되어 서로를 찾을 수 없게 됩니다.
'Project > Collabo Project' 카테고리의 다른 글
[Villion] https 적용기 (3) | 2024.09.16 |
---|---|
[Villion] [GCP] 외부에서 구매한 도메인 등록하기 (0) | 2024.09.13 |
[Villion] eureka 배포 (0) | 2024.08.29 |
[Villion] Docker+GCP로 프론트 배포 정리 (1) | 2024.08.28 |
[Villion] FullText Index를 활용한 도서 검색 기능 구현 (0) | 2024.08.15 |