
최근에 유튜브를 보다가 정말 재밌는 영상을 찾았습니다. 진격의 거인으로 AWS 네트워킹을 설명한 영상이었는데, 거대한 벽과 거인을 비유로 삼아 네트워킹 개념을 풀어내는 방식이 너무 신선했습니다. 보자마자 “이거 꼭 글로 풀어보고 싶다”는 생각이 들었습니다.
요즘 AI가 워낙 시장을 주도하다 보니 CS의 중요성이 떨어진 것 아니냐는 시각도 종종 보입니다. 하지만 실제로 개발을 하다 보면 막히는 문제의 상당수가 CS 기초 부족에서 비롯되곤 합니다. 특히 네트워크는 눈에 보이지 않는 추상적인 영역이라 더더욱 개념을 제대로 잡기 어려운 것 같습니다.
그래서 이번 글에서는 영상의 비유 속에 숨어 있는 네트워크 CS 개념들을 함께 짚어보며 놓치기 쉬운 네트워크 기초를 되새겨보겠습니다.
거인을 막는 벽, VPC
네트워크 격리는 신뢰 경계를 만드는 행위입니다. 주소 공간, 전송 경로, 정책을 분리해 멀티 테넌시, 보안을 적용합니다. AWS의 VPC는 이 격리를 소프트웨어 정의 네트워킹 (SDN)으로 구현한 결과물이고, CS 관점에서는 LAN/VLAN/VRF/오버레이 개념이 응축되어 있습니다.
아마도 같은 이미지
네트워크 격리?
VPC의 정체
필수 구성
EX) 로컬 환경에서 서브넷 2개 만들고 라우터 통해서 통신
# 네임스페이스(가상의 네트워크 공간) 3개: router, host1, host2
sudo ip netns add router
sudo ip netns add host1
sudo ip netns add host2
# 가상 케이블(veth)로 연결: router-host1, router-host2
sudo ip link add veth-h1 type veth peer name veth-r1
sudo ip link add veth-h2 type veth peer name veth-r2
sudo ip link set veth-h1 netns host1
sudo ip link set veth-h2 netns host2
sudo ip link set veth-r1 netns router
sudo ip link set veth-r2 netns router
# IP를 다른 대역으로 부여(서브넷 분리)
sudo ip netns exec host1 ip addr add 10.0.1.10/24 dev veth-h1
sudo ip netns exec router ip addr add 10.0.1.1/24 dev veth-r1
sudo ip netns exec host2 ip addr add 10.0.2.10/24 dev veth-h2
sudo ip netns exec router ip addr add 10.0.2.1/24 dev veth-r2
# 인터페이스 up + 기본 게이트웨이(router)
for ns in host1 host2 router; do sudo ip netns exec $ns ip link set lo up; done
sudo ip netns exec host1 ip link set veth-h1 up
sudo ip netns exec host2 ip link set veth-h2 up
sudo ip netns exec router ip link set veth-r1 up
sudo ip netns exec router ip link set veth-r2 up
sudo ip netns exec router sysctl -w net.ipv4.ip_forward=1 >/dev/null
sudo ip netns exec host1 ip route add default via 10.0.1.1
sudo ip netns exec host2 ip route add default via 10.0.2.1
# host1 -> host2 통신: 라우터를 경유해야만 가능
sudo ip netns exec host1 ping -c 2 10.0.2.10

성벽 안의 효율적인 도시 계획
벽 안의 도시를 건설해야 합니다. 서브네팅은 벽 내부의 땅을 용도에 맞게 구역을 나누는 계획입니다.
IP 주소 : 모든 건물의 고유 번호
사용 가능 주소: 한 구역(/20 = 12비트 호스트)에 지을 수 있는 건물의 수는 2^12−2 (구역 대표 주소, 방송 주소 제외) = 4,094개
Public IP / Private IP + NAT
VLSM (Variable Length Subnet Mask) : 효율적인 도시 계획 기술
EX) 하나의 /16을 가용영역(AZ) 으로 쪼개기
웹 / 앱 / DB / 관리망을 2개의 가용영역(AZ)에 대칭해서 배치할 때
1. 상위 대역 확보: 10.0.0.0/16
2. AZ별 블록 나누기: AZ-a는 10.0.0.0/17, AZ-b는 10.0.128.0/17
3. 역할별 서브넷(각 AZ에 4개씩): /20(4094호스트) 기준
AZ-a
Web-a: 10.0.0.0/20 (퍼블릭, 0.0.0.0/0 → IGW)
App-a: 10.0.16.0/20 (프라이빗, 0.0.0.0/0 → NAT-a)
DB-a : 10.0.32.0/20 (프라이빗, 외부로 매우 제한)
Mgmt-a: 10.0.48.0/20 (프라이빗, 점프/모니터링만)
AZ-b
Web-b: 10.0.128.0/20
App-b: 10.0.144.0/20
DB-b : 10.0.160.0/20
Mgmt-b: 10.0.176.0/20
AWS 주의: 각 서브넷에서는 일부 IP가 플랫폼 예약(게이트웨이·DNS 등).
Router 설계
Web 서브넷: 0.0.0.0/0 → IGW
App/DB/Mgmt: 0.0.0.0/0 → NAT (AZ별)
내부 통신: VPC 내부 라우팅으로 상호 통과(필요 시 SG/NACL로 통제)

벽도 세웠고 도시도 세웠으니 이제 문지기를 세워봅시다. 아무나 특정 구역에 들어가거나, 핵심 건물(서버)에 접근한다면 도시가 불에 탑니다. 이제 도시의 질서를 유지하기 위해 곳곳에 문지기 (방화벽)을 배치해야 합니다. AWS VPC의 문지기는 Security Group과 Network ACL (NACL)이 있습니다.

벽 안에서만 살다보니 거인놈들이 뭐하는지 궁금합니다. 다른 도시에서 새로 개발한 무기 (SW 업데이트)도 있다고 하는데 어떻게 통신할 수 있을까요? 이를 해결해주는 것이 NAT 입니다.
내부 주소(사설 IP)는 도시 안에서만 통용되는 주소입니다. 이 주소로 외부와 통신하기 위해서는 Pulbic IP로 변경해줘야 합니다.
NAT는 사설망의 주소를 밖과 대화할 수 있게 바꿔주는 중간역 (게이트웨이). IPv4 고갈과 보안 경계 유지를 해결
# 1. 커널 포워딩 켜기
sudo sysctl -w net.ipv4.ip_forward=1
# 2. SNAT (MASQUERADE = 동적 퍼블릭 IP일 때 편함)
sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/16 -o eth0 -j MASQUERADE
# 3. 포워딩 정책(기본 거부 후 필요한 것만)
sudo iptables -A FORWARD -i eth1 -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
# - DNAT: 목적지를 내부 서버로
sudo iptables -t nat -A PREROUTING -d 203.0.113.5 -p tcp --dport 443 -j DNAT --to-destination 10.0.1.20:443
# - SNAT: 응답이 다시 NAT를 경유하도록 출발지도 NAT의 내부 IP로
sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/16 -d 10.0.1.20 -p tcp --dport 443 -j SNAT --to-source 10.0.1.1
(➕) IPv4의 주소 고갈은 IPv6로 해결된 것이 아닌가?
실제로 IPv6 표준 철학이 NAT가 필요 없는 End-to-End 통신 복원입니다.
하지만 IPv6의 보급 지연, 경계 보안 기능 (NAT 자체가 보안을 위한 것은 아니지만 기능이 외부의 임의 접근이 막히는 효과), 주소 은닉 등으로 인해 여전히 NAT가 필요합니다.

도시가 잘 되니 방문객도 많아지고 상인도 많아졌습니다. 이렇게 몰리면 결국 제 기능을 못하고 도시가 또 멸망합니다. 이를 해결하기 위해서는 새로운 도시를 세워서 방문객을 분산해야합니다. (영상에서는 몸빵으로 비유)
로드 밸런싱은 연결을 어디로 보낼지 결정
L4 전송 계층은 IP/포트/프로토콜만 보고 분산 (연결 종단 X)
L7 애플리케이션 계층은 HTTP/gRPC 같은 애플리케이션 레빌을 이해해 헤더/경로 기반으로 분산 (연결 종단 O)
| 구분 | L4 (TCP/UDP) | L7 (HTTP/HTTPS/gRPC) |
|---|---|---|
| 기준 | src/dst IP, src/dst Port, 프로토콜 | URL 경로/메서드/헤더/쿠키/호스트명 |
| 연결 처리 | 패스스루(비종단), 빠름 | 종단(Proxy), 라우팅 유연, 기능 ⬆️ |
| 기능 | 소스 IP 보존 용이, 낮은 지연 | 경로/호스트 기반 라우팅, 헤더 재작성, 쿠키 기반 세션 스티키, WAF 연계, TLS 종료/재암호화 |
| 사용처 | 게임 서버, 메시지 큐, DB 프록시 등 | 웹/모바일 API, gRPC, 다중 도메인/경로 라우팅 등 |
분산 알고리즘
헬스 체크
세션 관리 : 스티키 vs 무상태
TLS 처리 패턴 (종단 지점 설계)

쓰다보니 진격거는 사라지고 어째 네트워크만 잔뜩 설명된 느낌인데 한번에 쭉 정리해보니 정말......어렵네요. 세부적인 내용을 전부 빼고 정말 AWS 한정으로 봤는데도 방대합니다. 학교에서 배웠을 때는 종이컵 전화기 수준부터 배웠던 것 생각하면 어떻게 다 배웠나 싶습니다. 이제 클라우드는 개발자에게 필수 도구로 자리잡은 만큼 관련된 내용도 많이 올려보겠습니다.