EC2 내 같은 도커 네트워크에 속해있는 스프링 서버 컨테이너와 Redis 컨테이너가 있다.
EC2 의 퍼블릭 IP 는 3.34.0.38 이고, 스프링 서버는 8080:8080, Redis 는 6380:6379 으로 포트가 매핑되어있다고 가정하자.
스프링 서버의 yml 파일 내 Redis 연결 방법은 크게 2가지로 다음과 같다.
1. 외부 네트워크(EC2 등)를 경유하여 Redis 컨테이너로 접근하는 경우
data:
redis:
host: 3.34.0.38
port: 6380 // 외부 네트워크 포트
이 경우 접근 흐름은 다음과 같다.
외부 네트워크의 6380 포트 → (Docker 포트 매핑) → Redis 컨테이너의 6379 포트
외부 네트워크를 경유하는 경우, 같은 도커 네트워크에 있더라도, 외부 네트워크를 거쳐서 Redis 에 접근하기 때문에 불필요한 네트워크 경유가 발생하여 성능 저하가 일어날 수 있다.
2. 도커 내부 네트워크에서 직접 접근하는 경우
동일한 도커 내부 네트워크에서는 컨테이너에 직접 접근할 수 있다. 직접 접근하기 위해선 Redis 컨테이너 이름과, 해당 컨테이너 내부에서 동작하는 Redis 의 포트를 지정해주면 된다.
data:
redis:
host: redis
port: 6379 // Redis 컨테이너 내부에서 사용하는 포트
이 경우 접근 흐름은 다음과 같다.
도커 내부 네트워크 → Redis 컨테이너의 6379 포트 (직접 연결)
이 경우 네트워크 오버헤드 없이 직접 연결되므로 성능이 좋다. 이 방식은 같은 도커 네트워크에 있는 컨테이너끼리 통신할 때 최적의 방법이다.