
– EC2 인스턴스를 Target Group으로 묶어 로드밸런싱하기
앞서 우리는 VPC07에 퍼블릭 서브넷을 만들고, 그 안에 MyWeb2, MyWeb3 두 개의 EC2 인스턴스를 배치했다.
이제는 이 두 인스턴스 앞단에 NLB(Network Load Balancer) 를 붙여서,
외부에서 하나의 IP만 가지고도 자동으로 트래픽을 분산할 수 있도록 구성해보자.
NLB는 AWS의 3가지 로드밸런서 중 하나로, TCP 수준에서 빠르고 가벼운 로드밸런싱을 제공한다.
특히 고성능, 정적 IP, 초당 수백만 요청 처리가 필요한 환경에 적합하다.
이번 실습에서는 EC2 인스턴스 두 개를 타겟으로 등록한 뒤,
퍼블릭 서브넷에 NLB를 구성해 외부에서 하나의 IP로 접속 가능한 구조를 만든다.
이번 글에서 구성할 리소스는 다음과 같다:

먼저 두 개의 EC2 인스턴스를 포함할 Target Group을 만든다.
타입은 instance, 포트는 80, 프로토콜은 TCP를 사용한다.
MyNLBTargetGroup:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
DependsOn:
- MyWeb2
- MyWeb3
Properties:
Name: MyNLBTargetGroup
Port: 80
Protocol: TCP
VpcId: !Ref MyVPC07
TargetType: instance
Targets:
- Id: !Ref MyWeb2
Port: 80
- Id: !Ref MyWeb3
Port: 80
Tags:
- Key: Name
Value: MyNLBTargetGroup
DependsOn을 설정해 인스턴스가 먼저 만들어진 후 Target Group에 등록되도록 순서를 보장한다.
Target Group을 만든 후, 퍼블릭 서브넷에 NLB를 만든다.
스킴은 internet-facing으로 설정해 외부 인터넷에서 접근할 수 있게 한다.
MyNLB:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
DependsOn: MyNLBTargetGroup
Properties:
Type: network
Scheme: internet-facing
Subnets:
- !Ref MyPublic2Subnet
Tags:
- Key: Name
Value: MyNLB
NLB는 단독으로 동작하지 않고, 요청을 처리하기 위한 Listener가 필요하다.
이번 구성에서는 포트 80에 대해 Target Group으로 트래픽을 전달하도록 한다.
MyNLBListener:
Type: AWS::ElasticLoadBalancingV2::Listener
DependsOn: MyNLBTargetGroup
Properties:
LoadBalancerArn: !Ref MyNLB
Port: 80
Protocol: TCP
DefaultActions:
- Type: forward
TargetGroupArn: !Ref MyNLBTargetGroup
CloudFormation 스택이 성공적으로 생성되면, EC2 → Load Balancer 메뉴로 이동해서
NLB의 DNS 이름을 복사하고 브라우저에 접속해보자.
예: http://<NLB_DNS>
MyWeb2와 MyWeb3가 반환하는 HTML이 랜덤하게 출력되면, 로드밸런싱이 정상적으로 작동하는 것이다.

