<aside> 🎯

한 문장 요약: 외부 요청을 받는 입구만 공개하고, 나머지 서버는 역할별로 나눈 뒤 필요한 연결만 허용한다.

</aside>

1. 네트워크를 왜 나누는가?

웹 서버가 공격당했다고 DB와 관리 시스템까지 바로 접근할 수 있어서는 안 된다. **Network Segmentation(네트워크 분리)**은 이런 피해 확산을 줄이기 위해 서버를 구역별로 나누고, 구역 사이의 통신을 제한하는 설계다.

예를 들어 사용자는 웹 서비스에 접속할 수 있지만 DB에 직접 접속할 필요는 없다. Web 서버도 화면과 요청 전달을 담당할 뿐, App을 건너뛰고 DB에 접근할 필요는 없다.

이 글에서는 Web → App → DB의 3-Tier 구조를 기준으로 설계한다. 설명에 사용하는 포트는 Web 80번, App 5000번, MySQL 3306번이다.

2. Public과 Private는 무엇이 다른가?

Subnet은 VPC 안에서 서버를 배치하는 주소 구역이다. Public·Private 여부는 이름이 아니라 Route Table에 적힌 통신 경로로 판단한다.

구역 통신 경로 배치할 대상
Public · 공개 구역 인터넷 연결 장치인 Internet Gateway로 직접 가는 경로가 있음 인터넷용 ALB, 필요 시 Public NAT Gateway
Private · 비공개 구역 Internet Gateway로 직접 가는 경로가 없음 Web·App 서버
Isolated · 격리 구역 VPC 밖으로 나가는 경로가 없음 DB 등 외부 통신이 필요 없는 서버

Route Table을 주소별 길 안내표라고 보면 이해하기 쉽다.

Public Subnet에 넣었다고 모든 EC2가 바로 공개되는 것은 아니다. IPv4 직접 통신에는 공인 IP와 허용된 보안 규칙도 필요하다.

또한 구역만 나눠도 서버 사이의 통신이 자동 차단되지는 않는다. VPC 내부 경로가 있으므로 다음 단계의 접근 규칙을 함께 설정해야 한다.

공식 근거: AWS Subnet과 경로

3. 외부 입구와 내부 서버를 분리하기

그림 1 · 서비스 접속 — 왼쪽에서 오른쪽으로

network-service-diagram.png

읽는 순서: 사용자 → ALB(입구) → Web(화면) → App(기능) → DB(데이터).