💭 Minji's Archive

[s2n] (내가 헷갈렸던) AWS 인프라 + Docker 네트워크 + RDS 네트워크 전체 흐름 정리

November 25, 2025

지금 구조는 다음과 같다. EC2 안에 도커를 올리고, 이 도커가 RDS에 접속하면, “컨테이너의 IP”가 아니라 “EC2의 IP”(예: 10.0.0.0)로 접속하게 된다. 그래서 RDS에게 컨테이너는 따로 존재하지 않고, 모든 요청을 EC2가 보내는 것처럼 보인다.


왜 RDS는 EC2의 IP를 보게 될까?

  • EC2는 집이고, Docker 컨테이너는 집 안의 방이다.
  • 즉 집 밖(RDS)에서 볼 때 집 안의 방 사람의 IP는 보이지 않는다.

네트워크 흐름 Docker 컨테이너는 기본적으로 “bridge mode”로 동작한다.

  1. 컨테이너 내부 IP: 컨테이너 내부는 자기만의 네트워크를 갖고 있다. (예를 들어 172.0.0.0) 여기서 외부로 나가려고 하면, 컨테이너는 “docker0”이라는 가상 브릿지로 나간다.

  2. docker0(172.0.0.0): EC2에 항상 존재하는 Docker 가상 네트워크 스위치. 컨테이너 -> docker0 -> EC2로 트래픽을 남김.

  3. EC2 NAT(Network Address Translaton): EC2는 컨테이너의 패킷을 받아서 출발지 IP를 ‘EC2 자신’의 IP로 바꾼 뒤 인터넷/VPC로 내보낸다. 즉 원래 패킷이 172.0.0.0 -> RDS라면 NAT 이후 RDS가 실제로 보는 패킷은 10.0.0.0 -> RDS와 같다. RDS가 보는 IP는 항상 EC2의 ens5의 프라이빗 IP이다.


RDS 입장에서

  • RDS는 컨테이너라는 개념이 없고, EC2가 접속했다고만 기록한다.
  • 그래서 전 포스트에서 계속 삽질했던 것…

전체 흐름 내 노트북 ssh -> EC2 -> Dovker 컨테이너 -> NAT -> RDS

  • 내 노트북은 EC2에 SSH로 들어간다. (단순히 EC2에 터미널 접속. RDS에는 아무 영향 없음)
  • EC2 안에서 Docker 컨테이너가 실행됨 (컨테이너는 EC2 안에 하위 네트워크로 존재함)
  • 컨테이너가 RDS 접속 시도 (컨테이너 -> docker0 -> EC2 NAT -> RDS)
  • RDS는 EC2의 IP만 보게 됨 (그래서 admin@10.0.0.0로 기록됨)