01
왜 로드밸런서가 필요한가
서버 한 대에 모든 트래픽을 보내면 두 가지 문제가 생깁니다. 첫째, 서버가 죽으면 서비스 전체가 죽습니다. 둘째, 트래픽이 몰리면 한 서버가 버텨야 합니다.
ELB(Elastic Load Balancer)는 여러 서버 앞에 세워서 트래픽을 나눠주는 장치입니다. 하나가 죽으면 나머지로만 보내고, 트래픽이 늘면 Auto Scaling이 서버를 더 만들어 붙입니다.
⚖️ ELB + Auto Scaling 구조
사용자
→
ALB
443/80
443/80
→
EC2 #1
EC2 #2
EC2 #3
ASG가 추가
ASG가 추가
02
ALB vs NLB — 언제 뭘 쓰나
| 구분 | ALB (Application LB) | NLB (Network LB) |
|---|---|---|
| OSI 계층 | L7 (HTTP/HTTPS) | L4 (TCP/UDP) |
| 라우팅 기준 | URL 경로, 헤더, 호스트명 | IP + 포트 |
| 고정 IP | 없음 (DNS만) | 있음 (탄력적 IP) |
| WebSocket | 지원 | 지원 |
| 주 용도 | 웹·API 서버 (대부분) | 게임·IoT·고성능 TCP |
| 요금 | 시간당 $0.0225 + LCU | 시간당 $0.0225 + NLCU |
Spring Boot REST API 서버라면 ALB를 쓰세요. URL 경로 기반 라우팅(/api/* → 백엔드, /* → 프론트엔드)이 가능하고, HTTPS 인증서를 여기서 처리합니다.
03
ALB 구성 요소
| 구성 요소 | 역할 |
|---|---|
| 리스너 | 어떤 포트(80, 443)로 들어오는 트래픽을 받을지. 규칙에 따라 대상 그룹으로 전달 |
| 규칙 | URL 경로, 헤더 등 조건에 따라 다른 대상 그룹으로 라우팅 |
| 대상 그룹 | 트래픽을 받을 EC2 인스턴스(또는 Lambda, IP) 묶음 |
| 헬스 체크 | 대상 그룹의 인스턴스가 살아있는지 주기적으로 확인. unhealthy면 트래픽 제외 |
헬스 체크 unhealthy — 가장 자주 막히는 지점
대상 그룹이 계속 unhealthy면 이 순서대로 확인하세요:
1. 앱이 실제로 실행 중인가 (
2. 헬스 체크 경로(
3. EC2 보안 그룹이 ALB 보안 그룹에서 오는 트래픽을 허용하는가
4. 헬스 체크 포트가 앱이 뜬 포트와 일치하는가
대상 그룹이 계속 unhealthy면 이 순서대로 확인하세요:
1. 앱이 실제로 실행 중인가 (
systemctl status myapp)2. 헬스 체크 경로(
/health)가 200을 반환하는가3. EC2 보안 그룹이 ALB 보안 그룹에서 오는 트래픽을 허용하는가
4. 헬스 체크 포트가 앱이 뜬 포트와 일치하는가
실습 01
ALB + HTTPS 설정하기
- ACM 인증서 발급: Certificate Manager → 인증서 요청 → 도메인 입력 → DNS 검증 → Route 53에 레코드 자동 추가 → 발급 대기 (수 분)
- 대상 그룹 생성: EC2 → 대상 그룹 → 생성 → 인스턴스 유형 → 포트 8080 → 헬스 체크 경로
/health→ EC2 인스턴스 등록 - ALB 생성: EC2 → 로드 밸런서 → ALB 생성 → 퍼블릭 서브넷 2개 이상 선택 → ALB 전용 보안 그룹 생성(80·443 전체 허용)
- 리스너 설정: HTTP(80) → HTTPS(443) 리다이렉트 규칙 / HTTPS(443) → 대상 그룹으로 전달 + ACM 인증서 선택
- EC2 보안 그룹 수정: 8080 포트 소스를 ALB 보안 그룹으로 지정 (0.0.0.0/0 제거)
- Route 53 연결: A 레코드 → ALIAS → ALB 선택
ALB 서브넷은 최소 2개 · 서로 다른 AZ
ALB는 고가용성을 위해 2개 이상의 AZ에 걸쳐야 합니다. 같은 AZ의 서브넷 2개를 선택하면 오류가 납니다.
ALB는 고가용성을 위해 2개 이상의 AZ에 걸쳐야 합니다. 같은 AZ의 서브넷 2개를 선택하면 오류가 납니다.
04
Auto Scaling — 서버가 자동으로 늘고 줄어드는 원리
Auto Scaling Group(ASG)은 EC2 인스턴스를 자동으로 추가하거나 제거하는 서비스입니다. CPU가 70%를 넘으면 서버를 추가하고, 30% 밑으로 내려가면 줄입니다.
| 구성 요소 | 역할 |
|---|---|
| 시작 템플릿 | 새 인스턴스를 만들 때 쓸 설정 (AMI, 인스턴스 유형, 키 페어, 보안 그룹, 유저 데이터) |
| 최소/최대/희망 용량 | 최소 2개, 최대 10개, 평소 2개 처럼 범위 설정 |
| 스케일링 정책 | 언제 늘리고 줄일지 기준 설정 |
| ALB 연동 | 새로 만든 인스턴스를 자동으로 대상 그룹에 등록 |
스케일링 정책 종류
| 정책 | 작동 방식 | 권장 상황 |
|---|---|---|
| 타깃 추적 | CPU 70% 유지처럼 목표값을 정하면 자동 조정 | 대부분의 경우 (권장) |
| 단계 스케일링 | CPU 60~80% → 1개 추가, 80%+ → 2개 추가 | 세밀한 제어 필요 시 |
| 예약 스케일링 | 매주 월요일 9시 → 서버 5개로 확장 | 트래픽 패턴이 예측 가능할 때 |
📌 CH04 핵심 개념 요약
ALBL7 로드밸런서. URL·헤더 기반 라우팅. HTTPS 인증서 처리. 웹·API 서버에 적합
대상 그룹트래픽을 받을 EC2 묶음. 헬스 체크로 unhealthy 자동 제외
헬스 체크 실패앱 실행 여부 → 경로 200 반환 → EC2 보안 그룹 → 포트 순서로 확인
ASGCPU 등 지표에 따라 인스턴스 자동 추가/제거. ALB와 연동해 새 서버 자동 등록
ALB 주의서로 다른 AZ의 서브넷 최소 2개. EC2 보안 그룹 소스를 ALB 보안 그룹으로