실습 2-1_ ELB 실습 ①편 — 환경 구성

2026. 6. 8. 18:58·클라우드 컴퓨팅/AWS

ELB 실습 ①편 — 환경 구성 (상세판): 용어 하나하나 풀어가며

 

①편 — 환경 구성 아키텍처

구성 요소

  • 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 서비스입니다. 종류가 셋입니다.

  • ALB (Application Load Balancer): HTTP/HTTPS(웹) 트래픽을 다룹니다. URL 경로(/dev, /mgt)나 헤더로 똑똑하게 분배 (L7 = 응용 계층)
  • NLB (Network Load Balancer): TCP/UDP를 초고속으로 분배 (L4 = 전송 계층)
  • (참고) GLB(Gateway LB) — 이번 실습 범위 밖

이번 실습 구조 — VPC(가상 네트워크)를 두 개 만듭니다.

VPC 안에 들어가는 것 역할
Client-VPC Client-EC2 1대 요청을 쏘는 쪽 (외부 사용자 흉내)
ELB-VPC Web 서버 3대 + 로드밸런서 요청을 받아 분산하는 쪽

💡 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

mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak

echo "agentaddress udp:161" > /etc/snmp/snmpd.conf

echo "rocommunity public default" >> /etc/snmp/snmpd.conf

systemctl start httpd snmpd

systemctl enable httpd snmpd

echo "<h1>ELB LAB Web Server-1</h1>" > /var/www/html/index.html

mkdir /var/www/html/dev

echo "<h1>ELB LAB Dev Web Page</h1>" > /var/www/html/dev/index.html

curl -o /var/www/html/xff.php https://raw.githubusercontent.com/rusita-cloud/eks/main/xff.php --silent

  ``` 

 

용어 풀이

💡 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를 깔고 페이지까지 만들어주는 자동 초기화(부트스트랩) 입니다. 손으로 일일이 설치할 필요가 없습니다.

 

서버 서브넷(AZ) 호스트명 메인 페이지 추가 경로
Web-Server1-EC2 public1 2a Server1 "Web Server-1" /dev/
Web-Server2-EC2 public1 2c SERVER2 "Web Server-2" /mgt/
Web-Server3-EC2 public1 2c SERVER3 "Web Server-3" /mgt/

 

서버1의 사용자 데이터 (서버2·3은 호스트명·문구·경로만 다름):

#!/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
mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak
echo "agentaddress udp:161" > /etc/snmp/snmpd.conf
echo "rocommunity public default" >> /etc/snmp/snmpd.conf
systemctl start httpd snmpd
systemctl enable httpd snmpd
echo "<h1>ELB LAB Web Server-1</h1>" > /var/www/html/index.html
mkdir /var/www/html/dev
echo "<h1>ELB LAB Dev Web Page</h1>" > /var/www/html/dev/index.html
curl -o /var/www/html/xff.php https://raw.githubusercontent.com/rusita-cloud/eks/main/xff.php --silent

 

 

한 줄씩 풀이

 

💡 #!/bin/bash : 이 스크립트를 bash 셸로 실행하라는 선언(셔뱅).

 

💡yum install httpd php -y : httpd(=Apache 웹서버) 와 php(동적 페이지용 언어) 설치.

 

💡yum install net-snmp net-snmp-utils tcpdump tree tmux -y :
SNMP 서버(net-snmp)·도구·tree(디렉터리 구조 출력) 등 설치.

 

💡mv ... snmpd.conf snmpd.conf.bak : 기존 SNMP 설정을 백업(.bak)으로 옮김.

 

💡echo "agentaddress udp:161" > snmpd.conf : SNMP 서버가 UDP 161에서 듣도록 설정.

 

💡echo "rocommunity public default" >> snmpd.conf :

community 이름 public 으로 읽기 전용(ro=read only) 조회 허용. (SNMP의 비밀번호 비슷한 개념)

 

💡systemctl start/enable httpd snmpd : 두 서비스를 지금 시작하고 부팅 시 자동 시작 등록.

 

💡echo "<h1>...</h1>" > /var/www/html/index.html : 웹 기본 페이지 작성.

 

💡 /var/www/html = Apache의 문서 루트(Document Root). 여기 둔 파일이 웹으로 보입니다. index.html은 기본 첫 페이지.

 

💡mkdir /var/www/html/dev + dev/index.html : /dev 경로용 페이지 생성 → 다음 편 경로 기반 라우팅 실습 재료.

 

💡curl -o .../xff.php https://...xff.php : xff.php 파일을 내려받아 설치.

 

💡 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로 추출해 캡처도 함께 드리겠습니다.)

저작자표시 (새창열림)

'클라우드 컴퓨팅 > AWS' 카테고리의 다른 글

실습 2-4 _ ELB 실습 ④편 — 출발지 IP 보존  (1) 2026.06.09
실습 2-2 _ ELB 실습 ②편 — ALB  (0) 2026.06.08
실습 1-9 _ NAT Gateway  (0) 2026.06.06
실습 1-8 _ Private EC2  (0) 2026.06.06
실습 1-7 _ Private Subnet & Private RT  (0) 2026.06.06
'클라우드 컴퓨팅/AWS' 카테고리의 다른 글
  • 실습 2-4 _ ELB 실습 ④편 — 출발지 IP 보존
  • 실습 2-2 _ ELB 실습 ②편 — ALB
  • 실습 1-9 _ NAT Gateway
  • 실습 1-8 _ Private EC2
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (301) N
      • 여러가지 (108)
        • 알고리즘 & 자료구조 (73)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (39)
        • 파이썬 (31)
        • 자바 (3)
        • 스프링부트 (5)
      • 컴퓨터 구조와 운영체제 (3)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (17) N
        • 도커 (2)
        • AWS (15) N
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (1)
        • 정보처리기사 (0)
        • 정보보안기사 (1)
        • 네트워크관리사 (0)
      • 재태크 (0)
        • 암호화폐 (0)
        • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Docker-compose
    AWS
    SAA
    WebFlux
    OOP
    취업리부트
    spring
    Spring WebFlux
    Redis
    ecs
    백준
    파이썬
    docker
    DP
    FastAPI
    완전탐색
    항해99
    RDS
    그리디
    프로그래머스
    #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스
    mybatis
    reactor
    Python
    celery
    EC2
    시험
    Spring Boot
    java
    자바
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
실습 2-1_ ELB 실습 ①편 — 환경 구성
상단으로

티스토리툴바