클라우드 네트워킹 기초
클라우드 환경에서 ML 인프라를 구축할 때 필요한 네트워킹 개념. VPC, 서브넷, 라우팅, 보안 그룹을 다룬다.
1. 네트워크 기초 개념
1.1 IP 주소와 CIDR
IP 주소 구조 (IPv4)
+-------+-------+-------+-------+
| 192 | 168 | 1 | 100 | = 192.168.1.100
+-------+-------+-------+-------+
8bit 8bit 8bit 8bit = 32bit 총
CIDR (Classless Inter-Domain Routing)
192.168.1.0/24
| |
| +-- 서브넷 마스크: 앞 24bit가 네트워크 부분
+------- 네트워크 주소
/24 = 256개 IP (192.168.1.0 ~ 192.168.1.255)
/16 = 65,536개 IP (192.168.0.0 ~ 192.168.255.255)
/8 = 16,777,216개 IP
1.2 CIDR 계산
| CIDR |
서브넷 마스크 |
사용 가능 IP |
용도 예시 |
| /32 |
255.255.255.255 |
1 |
단일 호스트 |
| /28 |
255.255.255.240 |
16 |
소규모 서브넷 |
| /24 |
255.255.255.0 |
256 |
일반적인 서브넷 |
| /20 |
255.255.240.0 |
4,096 |
중규모 환경 |
| /16 |
255.255.0.0 |
65,536 |
VPC 전체 |
AWS에서 각 서브넷당 예약 IP (5개):
- .0: 네트워크 주소
- .1: VPC 라우터
- .2: DNS 서버
- .3: 예약
- .255: 브로드캐스트
실제 사용 가능: /24 서브넷 = 251개 IP
1.3 Private IP 대역 (RFC 1918)
| 클래스 |
범위 |
CIDR |
용도 |
| A |
10.0.0.0 - 10.255.255.255 |
10.0.0.0/8 |
대규모 네트워크 |
| B |
172.16.0.0 - 172.31.255.255 |
172.16.0.0/12 |
중규모 |
| C |
192.168.0.0 - 192.168.255.255 |
192.168.0.0/16 |
소규모 |
2. VPC (Virtual Private Cloud)
2.1 VPC 구조
+------------------------------------------------------------------+
| VPC (10.0.0.0/16) |
+------------------------------------------------------------------+
| |
| +---------------------------+ +---------------------------+ |
| | AZ-a | | AZ-b | |
| +---------------------------+ +---------------------------+ |
| | | | | |
| | +---------------------+ | | +---------------------+ | |
| | | Public Subnet | | | | Public Subnet | | |
| | | 10.0.1.0/24 | | | | 10.0.2.0/24 | | |
| | | | | | | | | |
| | | [NAT Gateway] | | | | [Load Balancer] | | |
| | | [Bastion Host] | | | | | | |
| | +---------------------+ | | +---------------------+ | |
| | | | | |
| | +---------------------+ | | +---------------------+ | |
| | | Private Subnet | | | | Private Subnet | | |
| | | 10.0.11.0/24 | | | | 10.0.12.0/24 | | |
| | | | | | | | | |
| | | [EKS Nodes] | | | | [EKS Nodes] | | |
| | | [RDS] | | | | [RDS Replica] | | |
| | +---------------------+ | | +---------------------+ | |
| | | | | |
| +---------------------------+ +---------------------------+ |
| |
| +-------------------------------------------------------------+ |
| | Internet Gateway | |
| +-------------------------------------------------------------+ |
| | |
+--------------------------------|----------------------------------+
|
[Internet]
2.2 서브넷 유형
| 유형 |
인터넷 접근 |
용도 |
예시 |
| Public |
직접 (IGW) |
외부 노출 필요한 리소스 |
Load Balancer, Bastion, NAT Gateway |
| Private |
NAT Gateway 경유 |
내부 리소스 |
애플리케이션 서버, DB, EKS 노드 |
| Isolated |
없음 |
완전 격리 필요 |
민감 데이터 처리 |
2.3 서브넷 설계 예시 (ML 인프라)
VPC: 10.0.0.0/16 (65,536 IPs)
Public Subnets (외부 접근):
- 10.0.1.0/24 (AZ-a): NAT Gateway, ALB
- 10.0.2.0/24 (AZ-b): NAT Gateway, ALB
- 10.0.3.0/24 (AZ-c): NAT Gateway, ALB
Private Subnets (애플리케이션):
- 10.0.11.0/24 (AZ-a): EKS 노드
- 10.0.12.0/24 (AZ-b): EKS 노드
- 10.0.13.0/24 (AZ-c): EKS 노드
Private Subnets (데이터):
- 10.0.21.0/24 (AZ-a): RDS, ElastiCache
- 10.0.22.0/24 (AZ-b): RDS, ElastiCache
- 10.0.23.0/24 (AZ-c): RDS, ElastiCache
GPU Subnets (대용량, ML 학습):
- 10.0.100.0/20 (AZ-a): GPU 노드 (4096 IPs)
- 10.0.116.0/20 (AZ-b): GPU 노드
3. 라우팅
3.1 라우트 테이블
Public Subnet Route Table:
+------------------+------------------+
| Destination | Target |
+------------------+------------------+
| 10.0.0.0/16 | local | <- VPC 내부 통신
| 0.0.0.0/0 | igw-xxxxx | <- 인터넷으로
+------------------+------------------+
Private Subnet Route Table:
+------------------+------------------+
| Destination | Target |
+------------------+------------------+
| 10.0.0.0/16 | local | <- VPC 내부 통신
| 0.0.0.0/0 | nat-xxxxx | <- NAT Gateway 경유
+------------------+------------------+
3.2 핵심 게이트웨이
| 게이트웨이 |
용도 |
방향 |
비용 |
| Internet Gateway (IGW) |
VPC와 인터넷 연결 |
양방향 |
무료 |
| NAT Gateway |
Private 서브넷의 아웃바운드 |
단방향 (외부로) |
시간+데이터 |
| VPC Endpoint |
AWS 서비스 프라이빗 연결 |
양방향 |
무료~시간요금 |
| Transit Gateway |
VPC 간 연결 |
양방향 |
시간+데이터 |
3.3 NAT Gateway vs NAT Instance
| 항목 |
NAT Gateway |
NAT Instance |
| 관리 |
AWS 관리형 |
직접 관리 |
| 가용성 |
AZ 내 자동 HA |
직접 구성 필요 |
| 대역폭 |
최대 100 Gbps |
인스턴스 유형 의존 |
| 비용 |
~$0.045/시간 + 데이터 |
인스턴스 비용 |
| 권장 |
프로덕션 |
개발/테스트 (비용 절감) |
4. 보안
4.1 Security Group (Stateful)
상태 유지(Stateful): 인바운드 허용 시 응답 트래픽 자동 허용
ML Inference Service Security Group:
+----------+----------+------------+------------------+
| Type | Protocol | Port | Source |
+----------+----------+------------+------------------+
| Inbound | TCP | 8000 | ALB SG | <- 추론 API
| Inbound | TCP | 9090 | Prometheus SG | <- 메트릭
| Outbound | All | All | 0.0.0.0/0 | <- 외부 (S3, 등)
+----------+----------+------------+------------------+
GPU Training Node Security Group:
+----------+----------+------------+------------------+
| Type | Protocol | Port | Source |
+----------+----------+------------+------------------+
| Inbound | TCP | 22 | Bastion SG | <- SSH
| Inbound | TCP | 29500 | self | <- 분산학습 통신
| Inbound | TCP | 29501-29510| self | <- NCCL
| Outbound | All | All | 0.0.0.0/0 |
+----------+----------+------------+------------------+
4.2 NACL (Network ACL, Stateless)
상태 비유지(Stateless): 인바운드/아웃바운드 각각 명시 필요
Private Subnet NACL:
+-----+----------+----------+------+--------------+--------+
| # | Type | Protocol | Port | Source/Dest | Allow |
+-----+----------+----------+------+--------------+--------+
| 100 | Inbound | TCP | 443 | 10.0.0.0/16 | Allow |
| 110 | Inbound | TCP | 1024-65535 | 0.0.0.0/0 | Allow | <- 응답
| * | Inbound | All | All | 0.0.0.0/0 | Deny |
+-----+----------+----------+------+--------------+--------+
| 100 | Outbound | TCP | 443 | 0.0.0.0/0 | Allow |
| 110 | Outbound | TCP | 1024-65535 | 0.0.0.0/0 | Allow |
| * | Outbound | All | All | 0.0.0.0/0 | Deny |
+-----+----------+----------+------+--------------+--------+
4.3 Security Group vs NACL
| 항목 |
Security Group |
NACL |
| 레벨 |
인스턴스 (ENI) |
서브넷 |
| 상태 |
Stateful |
Stateless |
| 규칙 |
허용만 |
허용/거부 |
| 평가 |
모든 규칙 평가 |
순서대로 평가 |
| 기본 |
아웃바운드 허용 |
모두 허용 |
5. VPC Endpoint
5.1 Endpoint 유형
| 유형 |
지원 서비스 |
비용 |
특징 |
| Gateway |
S3, DynamoDB |
무료 |
라우트 테이블에 추가 |
| Interface |
대부분 AWS 서비스 |
시간+데이터 |
ENI로 생성, Private IP |
| Gateway LB |
서드파티 어플라이언스 |
시간+데이터 |
트래픽 검사 |
5.2 ML에서 중요한 VPC Endpoint
# S3 Gateway Endpoint (무료, 필수)
resource "aws_vpc_endpoint" "s3" {
vpc_id = aws_vpc.main.id
service_name = "com.amazonaws.ap-northeast-2.s3"
vpc_endpoint_type = "Gateway"
route_table_ids = [aws_route_table.private.id]
}
# ECR Endpoints (컨테이너 이미지 풀)
resource "aws_vpc_endpoint" "ecr_api" {
vpc_id = aws_vpc.main.id
service_name = "com.amazonaws.ap-northeast-2.ecr.api"
vpc_endpoint_type = "Interface"
subnet_ids = aws_subnet.private[*].id
security_group_ids = [aws_security_group.vpc_endpoints.id]
private_dns_enabled = true
}
resource "aws_vpc_endpoint" "ecr_dkr" {
vpc_id = aws_vpc.main.id
service_name = "com.amazonaws.ap-northeast-2.ecr.dkr"
vpc_endpoint_type = "Interface"
subnet_ids = aws_subnet.private[*].id
security_group_ids = [aws_security_group.vpc_endpoints.id]
private_dns_enabled = true
}
# SageMaker Endpoints
resource "aws_vpc_endpoint" "sagemaker_api" {
vpc_id = aws_vpc.main.id
service_name = "com.amazonaws.ap-northeast-2.sagemaker.api"
vpc_endpoint_type = "Interface"
subnet_ids = aws_subnet.private[*].id
security_group_ids = [aws_security_group.vpc_endpoints.id]
private_dns_enabled = true
}
6. 로드 밸런싱
6.1 AWS Load Balancer 유형
| 유형 |
레이어 |
용도 |
ML 사용 예 |
| ALB |
L7 (HTTP) |
웹 애플리케이션 |
REST API 추론 서버 |
| NLB |
L4 (TCP/UDP) |
고성능, 낮은 레이턴시 |
gRPC 추론, 실시간 서빙 |
| CLB |
L4/L7 |
레거시 |
사용 지양 |
| GWLB |
L3 |
네트워크 어플라이언스 |
보안 검사 |
6.2 ALB 구성 예시
[Internet]
|
[ALB - Public]
/ \
/v1/predict /v2/predict
| |
[Target Group 1] [Target Group 2]
| |
[Model v1 Pods] [Model v2 Pods]
# Kubernetes Ingress with ALB
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ml-api-ingress
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/healthcheck-path: /health
alb.ingress.kubernetes.io/healthcheck-interval-seconds: "15"
spec:
rules:
- host: api.example.com
http:
paths:
- path: /v1
pathType: Prefix
backend:
service:
name: model-v1-service
port:
number: 8000
- path: /v2
pathType: Prefix
backend:
service:
name: model-v2-service
port:
number: 8000
6.3 NLB for gRPC
apiVersion: v1
kind: Service
metadata:
name: ml-grpc-service
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: nlb
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
spec:
type: LoadBalancer
ports:
- port: 50051
targetPort: 50051
protocol: TCP
selector:
app: ml-grpc-server
7. 네트워크 성능
7.1 분산 학습 네트워크 고려사항
| 요소 |
설명 |
권장 |
| Placement Group |
물리적으로 가까운 위치 배치 |
Cluster 모드 사용 |
| EFA (Elastic Fabric Adapter) |
HPC/ML 전용 네트워크 |
p4d, p5 인스턴스 |
| 대역폭 |
노드 간 통신 속도 |
100 Gbps+ (p4d) |
| MTU |
최대 전송 단위 |
Jumbo Frame (9001) |
# Placement Group for distributed training
resource "aws_placement_group" "ml_training" {
name = "ml-training-cluster"
strategy = "cluster" # 최소 레이턴시
}
resource "aws_instance" "training_node" {
count = 4
instance_type = "p4d.24xlarge"
placement_group = aws_placement_group.ml_training.id
# EFA 활성화
network_interface {
device_index = 0
network_interface_id = aws_network_interface.efa[count.index].id
}
}
resource "aws_network_interface" "efa" {
count = 4
subnet_id = aws_subnet.private.id
security_groups = [aws_security_group.training.id]
interface_type = "efa" # EFA 활성화
}
7.2 데이터 전송 최적화
| 시나리오 |
최적화 방법 |
| S3 -> EC2 |
같은 리전 사용, VPC Endpoint |
| 리전 간 |
S3 Transfer Acceleration |
| 온프레미스 |
Direct Connect, DataSync |
| 대용량 학습 데이터 |
FSx for Lustre |
8. 비용 고려사항
8.1 데이터 전송 비용
| 경로 |
비용 (ap-northeast-2 기준) |
| 인터넷 -> AWS |
무료 |
| AWS -> 인터넷 |
$0.126/GB (처음 10TB) |
| 같은 AZ 내 |
무료 (Private IP) |
| 다른 AZ 간 |
$0.01/GB (각 방향) |
| 같은 리전, VPC Peering |
$0.01/GB |
| 다른 리전 |
$0.02/GB |
8.2 비용 절감 전략
1. NAT Gateway 비용 절감
- 개발 환경: NAT Instance 사용
- S3 VPC Endpoint 사용 (무료)
- 같은 AZ에 NAT Gateway 배치
2. 데이터 전송 비용 절감
- Private IP 사용 (AZ 내 무료)
- VPC Endpoint 활용
- 같은 리전에 리소스 배치
3. ML 학습 시
- S3 -> EC2: VPC Endpoint 사용
- GPU 노드는 같은 AZ에 클러스터링
- FSx for Lustre로 데이터 캐싱
8.3 월간 비용 예시
NAT Gateway (1개, 1TB 트래픽):
- 시간당: $0.045 x 720시간 = $32.40
- 데이터 처리: $0.045/GB x 1000GB = $45.00
- 합계: $77.40/월
Interface VPC Endpoint (3개):
- 시간당: $0.01 x 720시간 x 3 = $21.60
- 데이터: 포함된 양 이후 추가 과금
ALB (10TB 트래픽):
- 시간당: $0.0225 x 720 = $16.20
- LCU: 사용량에 따라 변동
- 대략: $50-100/월
9. 트러블슈팅
9.1 연결 문제 체크리스트
# 1. Security Group 확인
aws ec2 describe-security-groups --group-ids sg-xxx
# 2. 라우트 테이블 확인
aws ec2 describe-route-tables --route-table-ids rtb-xxx
# 3. NACL 확인
aws ec2 describe-network-acls --network-acl-ids acl-xxx
# 4. VPC Flow Logs 확인 (트래픽 분석)
# CloudWatch Logs에서 확인
# 5. 연결 테스트
nc -zv <ip> <port>
curl -v http://<endpoint>
9.2 일반적인 문제
| 증상 |
원인 |
해결 |
| 외부 접속 불가 |
IGW 없음, 라우팅 미설정 |
라우트 테이블에 IGW 추가 |
| Private 서브넷 외부 불가 |
NAT Gateway 없음 |
NAT Gateway 설정 |
| 특정 포트 불가 |
Security Group 미허용 |
인바운드 규칙 추가 |
| AZ 간 통신 불가 |
NACL 차단 |
NACL 규칙 확인 |
| S3 접근 느림 |
퍼블릭 경로 사용 |
VPC Endpoint 설정 |
참고 자료