Region: ap-northeast-2(서울) 하나 안에 VPC 두 개가 독립적으로 존재합니다.
Client-VPC: 퍼블릭 서브넷(az-2a)에 Client-EC2 1대. 공인 IP를 가지며, 보안 그룹 Public-Web-SSH-SG(HTTP 80·SSH 22)가 적용됩니다. 이 서버는 앞으로 curl·dig·snmpget으로 로드밸런서를 두드리는 테스트 콘솔 역할입니다.
ELB-VPC: 웹 서버 3대가 두 AZ에 분산됩니다 — Web-Server1(az-2a), Web-Server2·Web-Server3(az-2c). 모두 보안 그룹 ELB-Web-SSH-SG(HTTP·SSH·ICMP·UDP 161)를 공유합니다. 각 서버엔 httpd(웹) + snmpd(SNMP) 가 설치되고, 서로 다른 페이지(/, /dev 또는 /mgt)를 갖습니다.
연결과 흐름
두 VPC는 서로 분리돼 있어, Client-EC2가 ELB-VPC의 서버에 접근하려면 인터넷을 경유합니다(주황 화살표). 즉 "외부 사용자가 들어오는" 상황을 흉내 냅니다.
점선(적용)은 보안 그룹이 어느 인스턴스에 붙는지를 나타냅니다.
설계 의도
이 단계의 모든 디테일은 다음 편들의 실습을 "눈으로 보기" 위한 장치입니다. 서버마다 다른 응답(부하분산 확인용), /dev·/mgt 경로 분리(경로 라우팅용), AZ 2a·2c 분산(교차 영역 LB용), snmpd/UDP 161(NLB용), xff.php(출발지 IP용)이 미리 심어져 있습니다. 아직 로드밸런서는 없는, 무대만 차린 상태입니다.
AWS Elastic Load Balancing(ELB) 실습을 위한 무대를 만듭니다. 이번 편은 단순 클릭 가이드가 아니라, 나오는 모든 용어를 풀어서 설명합니다. 처음 보는 단어가 있어도 끝까지 따라올 수 있게 하는 게 목표입니다.
먼저, 큰 그림과 용어
ELB(Elastic Load Balancing) 는 들어오는 트래픽을 여러 서버에 나눠주는(부하분산, Load Balancing) AWS 서비스입니다. 종류가 셋입니다.
💡 VPC(Virtual Private Cloud) = AWS 안에 내가 독점하는 가상의 사설 네트워크. "클라우드 속 내 전용 사무실 건물"이라고 보면 됩니다. 왜 둘로 나누나? 요청을 보내는 쪽과 받는 쪽을 분리하면, 실제 인터넷에서 외부 사용자가 접속하는 상황과 비슷하게 테스트할 수 있습니다.
I. Client-VPC 생성
서울 리전에서 VPC 대시보드 → VPC 생성.
설정:
VPC 설정 → "VPC 등" 선택
이름 태그 자동 생성: 체크 → Client
AZ 수 / 퍼블릭·프라이빗 서브넷 수: 기본
NAT 게이트웨이: 없음
미리 보기 → VPC 생성
🖼️ [이미지] VPC 설정 화면 / AZ·서브넷 / NAT 없음 / 생성 완료
용어 풀이
💡 "VPC 등(VPC and more)" — VPC 하나만 만드는 게 아니라, 서브넷·인터넷 게이트웨이·라우팅 테이블까지 한 번에 자동으로 만들어주는 마법사입니다. (이전 시리즈에서 하나씩 손으로 만들던 것을 자동화한 것)
💡 AZ(Availability Zone, 가용 영역) — 한 리전 안에 물리적으로 떨어진 독립 데이터센터. 한 곳이 정전돼도 다른 곳은 살아있게 하는 안전장치. 서울 리전엔 여러 AZ(2a, 2c 등)가 있습니다.
💡 서브넷(Subnet) — VPC의 IP 주소 범위를 잘게 나눈 구역. 한 서브넷은 하나의 AZ에 속합니다.
💡퍼블릭 서브넷 = 인터넷과 직접 통하는 구역 (라우팅 테이블에 인터넷 게이트웨이 경로가 있음) 💡프라이빗 서브넷 = 외부와 격리된 구역
💡 NAT 게이트웨이를 "없음"으로 — NAT GW는 프라이빗 서브넷이 외부로 나가게 해주는 장치인데, 시간당 요금이 붙습니다. 이번 실습은 서버를 모두 퍼블릭 서브넷에 두므로 NAT가 필요 없고, 비용 절감을 위해 없음으로 둡니다.
II. Client-EC2 생성
00. 보안 그룹 생성 — Public-Web-SSH-SG (VPC: Client-VPC)
인바운드 규칙:
유형
프로토콜/포트
소스
HTTP
TCP 80
Anywhere-IPv4
SSH
TCP 22
Anywhere-IPv4
🖼️ [이미지] 보안 그룹 인바운드(HTTP·SSH)
용어 풀이
💡 보안 그룹(Security Group, SG) — EC2 인스턴스 앞에 붙는 방화벽. "어떤 트래픽을 들여보낼지" 규칙으로 정합니다. 💡 인바운드 규칙 = 들어오는 트래픽 허용 규칙. (반대는 아웃바운드 = 나가는 트래픽) 💡 HTTP(80) = 웹 페이지 트래픽, SSH(22) = 원격 터미널 접속. 💡 Anywhere-IPv4 (0.0.0.0/0) = "모든 IP에서 허용". 편하지만 SSH를 전 세계에 여는 건 보안상 위험합니다(실무에선 내 IP로 제한). 실습이라 열어둡니다.
01~06. 인스턴스 시작
이름 Client-EC2
AMI Amazon Linux 2023 kernel-6.1
인스턴스 유형 t3.micro
키 페어: 본인 키 페어
네트워크: VPC Client-VPC → 서브넷 ...public1-ap-northeast-2a(퍼블릭) → 퍼블릭 IP 자동 할당: 활성화
방화벽: 기존 보안 그룹 Public-Web-SSH-SG
용어 풀이
💡 EC2(Elastic Compute Cloud) — AWS의 가상 서버(컴퓨터). 우리가 띄우는 "인스턴스"가 곧 한 대의 서버입니다. 💡 AMI(Amazon Machine Image) — 서버를 만들 때 쓰는 OS 설치 이미지(템플릿). Amazon Linux 2023은 AWS가 만든 리눅스 배포판. 💡 t3.micro — 인스턴스 사양(크기) 등급. vCPU 2개·메모리 1GiB, 프리 티어(무료 한도) 대상이라 실습용으로 적합. 💡 키 페어(Key Pair) — SSH 접속용 열쇠 한 쌍(공개키는 서버에, 비밀키 .pem은 내 PC에). 이 .pem이 있어야 접속됩니다. 💡 퍼블릭 IP 자동 할당: 활성화 — 외부에서 접속하려면 공인 IP가 있어야 합니다. 이걸 켜야 인스턴스에 공인 IP가 붙습니다. (안 켜면 외부에서 못 들어옴)
07~08. 접속 및 초기 설정 — 인스턴스의 퍼블릭 IP로 SSH 접속한 뒤:
sudo su -
hostnamectl --static set-hostname ClientEC2
echo "sudo su -" >> /home/ec2-user/.bashrc
yum install net-snmp-utils tcpdump tmux -y
한 줄씩 풀이 💡sudo su - : 관리자(root) 권한으로 전환(sudo=관리자 권한 실행, su -=사용자 전환+환경 새로 로드)
💡hostnamectl --static set-hostname ClientEC2 : 서버의 호스트명(이름) 을 ClientEC2로 지정. 터미널 프롬프트에 표시돼 어느 서버인지 헷갈리지 않게 함. 💡echo "sudo su -" >> /home/ec2-user/.bashrc : 다음에 접속할 때 자동으로 root로 전환되게, 로그인 시 실행되는 설정 파일(.bashrc)에 명령을 추가. 💡yum install ... -y : 패키지 설치. (yum=Amazon Linux의 패키지 관리자, -y=확인 자동 yes) 💡net-snmp-utils: SNMP 질의 도구(snmpget 등). 나중에 NLB(UDP 161) 테스트에 사용 💡tcpdump: 네트워크 패킷을 들여다보는 도구. 출발지 IP 확인 실습에 사용 💡tmux: 한 터미널에서 여러 창을 쓰는 도구(세션 유지)
💡 정리: Client-EC2는 앞으로 "명령을 쏘는 콘솔" 역할을 합니다. 여기서 curl·dig·snmpget으로 로드밸런서를 두드려보게 됩니다.
III. ELB-VPC 생성
같은 방식으로 VPC를 하나 더 만듭니다 — 이름 ELB, NAT 게이트웨이 없음. (웹 서버들이 살 두 번째 네트워크)
🖼️ [이미지] ELB-VPC 생성 화면
IV. Web 서버 3대 생성 — 부하분산 대상 만들기
00. 보안 그룹 — ELB-Web-SSH-SG (VPC: ELB-VPC)
유형
포트
왜 여는가
HTTP
80
웹 서비스 제공
SSH
22
관리 접속
모든 ICMP-IPv4
-
ping 응답(연결 확인)
사용자 지정 UDP
161
SNMP — NLB(UDP) 실습용
🖼️ [이미지] ELB용 보안 그룹 인바운드 4개
---
EC2 생성
Web-Server1-EC2
>> 이름 및 태그 : Web-Server1-EC2
>> OS 이미지 : Amazon Machine Image
>> 인스턴스 유형 : t3.micro
>> 키 페어 : 본인이 키페어(선택)
>> 네트워크 설정
>> VPC : ELB-vpc
>> 서브넷 : ELB-subnet-public1-ap-northeast-2a
>> 퍼블릭 IP 자동 할당 : 활성화
>>방화벽(보안그룹) : 기존 보안그룹 선택
>> 일반 보안 그룹 : ELB-Web-SSH-SG
>> 고급 세부 정보
>> 설정 끝으로 이동 :
```bash
#!/bin/bash
hostnamectl --static set-hostname Server1
echo "sudo su -" >> /home/ec2-user/.bashrc
yum install httpd php -y
yum install net-snmp net-snmp-utils tcpdump tree tmux -y
💡 ICMP — ping이 쓰는 프로토콜(L3). TCP/UDP가 아니라 도달 확인용. 열어두면 ping 응답이 됩니다. 💡 UDP(User Datagram Protocol) — TCP와 달리 연결 없이 빠르게 보내는 전송 방식. SNMP가 이걸 씁니다. 💡 포트 161 / SNMP(Simple Network Management Protocol) — 장비 상태를 조회하는 관리용 프로토콜(UDP 161 사용). 이 실습에서 NLB가 UDP 트래픽을 분산하는 걸 보여주려고 SNMP 서버(snmpd)를 웹서버에 띄웁니다.
서버 3대 구성 — 각각 사용자 데이터(User Data) 로 자동 설치합니다.
💡 사용자 데이터(User Data) — 인스턴스가 처음 부팅될 때 자동 실행되는 스크립트. 서버를 만들자마자 웹서버·SNMP를 깔고 페이지까지 만들어주는 자동 초기화(부트스트랩) 입니다. 손으로 일일이 설치할 필요가 없습니다.
💡 XFF = X-Forwarded-For. 로드밸런서를 거치면 서버는 로드밸런서 IP만 보게 되는데, 진짜 원래 클라이언트 IP를 알려주는 HTTP 헤더가 X-Forwarded-For입니다. xff.php는 이 값을 화면에 보여주는 페이지로, ④편 출발지 IP 보존 실습에 씁니다.
설치 확인 — 각 서버에서:
tree /var/www/html
💡 tree = 폴더 구조를 나무 모양으로 보여주는 명령. index.html, dev/(또는 mgt/), xff.php가 잘 생겼는지 확인합니다.
🖼️ [이미지] 사용자 데이터 입력 / 3대 실행 목록 / tree 결과
왜 이렇게 세팅하나 — 설계 의도 정리
이 환경의 디테일은 전부 다음 편 실습을 보여주기 위한 장치입니다.
서버마다 다른 index.html → 로드밸런서가 요청을 여러 서버에 분산하는 걸 응답 문구로 눈으로 확인
서버1=/dev, 서버2·3=/mgt → 경로 기반 라우팅(URL에 따라 다른 서버로) 실습 준비
AZ를 2a·2c로 분산 → 교차 영역 로드밸런싱(다른 AZ 서버까지 고루 분산) 확인
snmpd(UDP 161) → NLB가 UDP를 분산하는 실습 준비
xff.php → 출발지 IP 보존(ALB의 X-Forwarded-For) 실습 준비
마치며 & 다음 편
요청을 쏠 Client-EC2 1대와, 분산 대상이 될 Web 서버 3대(서로 다른 응답·서로 다른 AZ)를 모두 준비했습니다. 이제 이 서버들 앞에 로드밸런서를 세울 차례입니다.
이번 편 핵심: "부하분산을 눈으로 확인하려면, 대상 서버들이 서로 다른 응답을 내도록 미리 심어둔다."
다음 편 예고
②편 ALB: 대상 그룹 → ALB 생성 → 교차 영역 분산 확인 → 경로 기반 라우팅(/dev/*, /mgt/*) → User-Agent(스마트폰 차단) 규칙
③편 NLB: UDP 161 대상 그룹 → NLB 생성 → 교차 영역 로드밸런싱
④편 출발지 IP 보존: ALB(X-Forwarded-For) vs NLB(원본 IP 보존)
용어(ELB/ALB/NLB, VPC, AZ, 서브넷, SG, AMI, 키페어, 사용자 데이터, SNMP/UDP 161, XFF, 문서 루트 등)를 단계마다 풀이 박스로 설명하고, 사용자 데이터 스크립트는 한 줄씩 해설했습니다. 이어서 ②ALB편을 같은 상세도로 작성할까요? (원하시면 PDF 페이지를 PNG로 추출해 캡처도 함께 드리겠습니다.)