콘텐츠로 이동
Data Prep
상세

클라우드 네트워킹 기초

클라우드 환경에서 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 설정

참고 자료