클라우드 환경에서도 여전히 네트워크 구성을 해야 하며, IP 주소 체계를 이해하기 위해 CIDR을, 네트워크 장비 및 데이터 흐름을 이해하기 위해 OSI 7 계층 모델을 알아야 한다.
CIDR은 IP 주소 범위를 표현하는 방식으로, 두 가지 요소로 구성
1. Base IP : 사용 가능한 첫 번째 IP 주소
2. Subnet Mask : 고정된 주소 영역을 나타내며, 보통 /24처럼 간단히 표기
- 사전 지식 :
네트워크 주소 구성 = 4개의 옥텟(1바이트 = 8비트) = 총 4바이트 (32비트)
10.0.0.0~10.0.0.255→10.0.0.0/24
기존 네트워크는 A, B, C 클래스로 나뉘었으나,
CIDR 방식에서는 Classless (클래스 구분 없음)으로 표현 가능
💡 AWS 네트워크의 시작 = VPC 설정
- AWS에서 네트워크를 구성하려면 먼저 VPC의 CIDR 정의
- 서브넷을 설정하여 네트워크를 세분화하는 데 사용

VPC 및 서브넷 구성: 사용할 가용 IP 대역 정의 = 몇 개의 IP 를 사용할 것 인지
ex) AWS VPC 에서 네트워크를 설정하고 (몇개 쓸게요) 서브넷으로 네트워크 영역을 나눌때 CIDR 사용
라우팅 규칙 설정: Route Table 규칙 내 특정 서브넷에 대한 트래픽을 어디로 보낼지 Destination 정의 및 서브넷 명시
ex ) 본 Route Table 은 10.1.10.0/24 서브넷에 적용하고, 0.0.0.0/0 에 대한 요청은 IGW 로 보낸다.
- VPC 설정 :
10.1.0.0/16(전체 네트워크)- 서브넷 분할 :
10.1.1.0/24,10.1.2.0/24- 라우팅 테이블 :
10.1.10.0/24서브넷에서0.0.0.0/0(인터넷 전송)
네트워크 장비(스위치, 라우터 등)는 OSI 모델의 특정 계층에서 동작하며, 이 계층을 이해하면 네트워크 구성 및 트러블슈팅이 쉬워진다.
L3 장비 (라우터): IP 주소 기반 네트워크 경로 결정
L2 장비 (스위치): MAC 주소 기반 내부 네트워크 연결
L1 장비 (케이블, 신호 전송)
[ 사진 출처 : What is OSI Model | Real World Examples ]
| 계층 | 이름 | 주요 역할 | 예시 |
|---|---|---|---|
| 7 | Application (응용 계층) | HTTP 요청 처리 | HTTP, SMTP, WebSocket, OAuth |
| 4 | Transport (전송 계층) | IP + Port 기반 통신 | TCP (신뢰성), UDP (비신뢰성) |
| 3 | Network (네트워크 계층) | IP 기반 패킷 전송 | IP, ICMP |
| 2 | Data Link (데이터 링크 계층) | MAC 주소 기반 전달 | Ethernet, ARP |

TCP vs UDP
TCP 는 잘받았는지 여부를 SYN 로 서버가 확인하는데, UDP 는 확인하지 않는다 (만약 확인한다면 역 DDoS)
- TCP : 신뢰성 높은 데이터 전송 (예: 웹사이트 접속)
- UDP : 빠른 전송, 신뢰성 없음 (예: 유튜브 영상 스트리밍)


| 장비 | OSI 계층 | 주요 기능 |
|---|---|---|
| Switch (스위치) | L2 (Data Link) | MAC 주소 기반 내부 네트워크 연결 |
| Router (라우터) | L3 (Network) | IP 주소 기반 외부 네트워크 연결 |
| L4 Load Balancer | L4 (Transport) | IP + Port 기반 트래픽 분산 |
| L7 Load Balancer | L7 (Application) | HTTP 요청 기반 트래픽 분산, DDoS 방어 |

💡 클라우드 환경에서도 네트워크 장비 개념이 그대로 적용
- AWS에서는 실제 물리 장비가 없어도 라우팅 테이블, VPC, 서브넷, 로드 밸런서 설정을 통해 네트워크를 구성
AWS 클라우드 서버를 사용하려면 먼저 IP 주소를 할당할 네트워크를 만들어야 한다.
이를 위해 AWS VPC (Virtual Private Cloud)를 생성하며, 이는 서버들이 사용할 IP 대역을 결정하는 과정이다.
VPC는 기본적으로 Private Network이므로, 외부와 연결하려면 IGW (Internet Gateway) 및 Route Table 설정이 필요하다.
또한, 내부 서버가 외부와 통신하려면 NAT Gateway/Instance를, 외부에서 내부 서버에 접근하려면 Bastion 서버를 활용해야 한다.
- 과거 물리 서버 환경
90년대에는 물리적 공간에 서버를 배치하고, 직접 네트워크를 구성해야 했다.
- 물리적 공간
- 물리적 서버 (서버 개수만큼 직접 설치)
- 물리적 네트워크 관리 (라우터, 스위치 설정)
- AWS 환경
AWS에서는 위의 과정이 모두 가상화되어 VPC를 생성하는 것만으로 논리적 네트워크를 쉽게 구성할 수 있다.
- 논리적 서버 (EC2 인스턴스)
- 논리적 네트워크 (VPC, 서브넷)
먼저 VPC를 생성하고, 네트워크를 서브넷(Subnet)으로 나눈다.
일반적으로 하나의 VPC에 4개의 서브넷을 구성한다.
Private Subnet : 내부 네트워크 전용
Public Subnet : 내부 네트워크 전용
Private, Public Subnet 각각 2개 (Multi-AZ 고려)

⚠️ 주의 : 서브넷의 이름만으로 Public/Private이 결정되지 않으며, Route Table 설정이 필요하다.
AWS VPC 네트워크를 1.0.0.0/24 로 정의하고 서브넷을 4개로 쪼개어 사용한다면 아래와 같다.


인스턴스 단위 외부 IP 할당 (외부 IP ↔ 단일 내부 IP 주소변환)
Route Table 예
- 모든 트래픽(
0.0.0.0/0)은 IGW를 통해 나가도록 설정
먼저 VPC 에 IGW 를 붙여 톨게이트를 열어준뒤, 그 다음 Route Table 을 통해 IGW 와 Public Subnet 을 연결
0.0.0.0/0 에 요청 전달 → Target, “IGW” 로 가시오
Route Table 설정 방법 상세
본 Route Table 을 어떤 Subnet 에 연결 : 본 라우팅 규칙을 어떤 서브넷 대상으로 할것인가?
= bootstrap-dev-public-subnet-1 와 bootstrap-dev-public-subnet-0 에 대해

개발자가 직접 만든 Route Table 을 Subnet 에 직접 명시적 연결 = Explicit Subnet Associations
Route Table 은 서브넷에 크게 2개의 방법으로 연결된다.
- 를 → 자동(비명시적)으로 Subnet 에 할당Route Table 을 따로 정의하지 않고도, VPC 가 동작되어 Route Table 이 정의되어있지 않으면 알아서 라우팅되는줄 알았는데, 그게 아니었다. VPC 기본 Route Table 에 따라 라우팅되고 있던 것
Route 설정 : 경로 정의를 어떻게 할것인가?
0.0.0.0/00.0.0.0/0 에 적용할것
NAT Gateway / Instance : 서브넷 단위 외부 IP 할당 (외부 IP ← 서브넷 (다수 내부 IP 들) 주소변환)
Private 서브넷이 외부와 통신을 어쩔수없이 해야하는 경우가 2가지 중 첫번째 : NAT Gateway/Instance
npm install 또는 gradle build를 실행할 때 외부 접속 필요 NAT Gateway/Instance 는 Private EC2 로부터 온 네트워크 패킷을 재작성(IP 변조)하여, 외부와 대신 통신


사진 출처 : PROXY vs NAT – Understand the Difference
⚠️ NAT Instance 주의점
- Source/Destination Check 비활성화 필요
- EC2 성능 제한으로 인해 대역폭이 낮음
SSH Tunneling = Port Forwarding, Jump Box/Host/Server, Bastion : 외부 서버 통한 내부 접근
Private 서브넷이 외부와 통신을 어쩔수없이 해야하는 경우가 2가지 중 나머지 : SSH Tunneling (Bastion)
SSH Tunneling 을 Jump Box, Jump Host, Jump Server 이라고도 부르는 이유는
외부에서 Private 서브넷 내 서버에 접근하기 위해 Public 서브넷 내 서버를 디딤돌 삼아 점프를 하는 것 같기 때문에

Local → Bastion (Public 서브넷 내 존재) → Server (Private 서브넷 내 존재)
ssh -i "local-to-bastion.pem" -N -L 33322:{target-private-ip}:22 ec2-user@{bastion-host-public-ip}
33322: 로컬 포트 지정{target-private-ip}:22: Private 서버의 SSH 포트{bastion-host-public-ip}: Bastion 서버의 공인 IP
⚠️ Bastion 서버를 통해서만 Private 서버로 접근할 수 있도록 보안 설정 필요

SSH 접속을 위한 비공개-공개 키 페어 : "local-to-bastion.pem" 와 "local-to-private.pem" 의미
⚠️ 주의 : HTTPS 와 SSH 에서 Secured 로 비대칭키를 활용하나, 공개키와 비공개키를 가진 주체가 반대
- HTTPS : 클라이언트가 공개키 Public Key, 서버가 비공개키 Private Key 를 가짐
- SSH : 클라이언트가 비공개키 Private Key(.pem), 서버가 공개키 Public Key(.pub) 를 가짐

- Outbound (인터넷 접근) - NAT Gateway/Instance 사용
Private 서브넷의 인스턴스가 외부 인터넷에 접근할 때 NAT Gateway 또는 NAT Instance를 경유
Public 서브넷에 NAT이 위치하며, IGW(Internet Gateway)를 통해 인터넷과 연결
- Inbound (SSH 접속) - Bastion Host 사용
Private 서브넷의 인스턴스는 직접 인터넷에서 접근 불가
Public 서브넷에 Bastion Host를 두고, SSH 터널링을 통해 Private 서브넷의 인스턴스에 접속