TIL,WIL
250207 - 로드 밸런싱
GREEN나무
2025. 2. 7. 20:13
728x90
윤예원 - 대용량트래픽처리 - 로드 밸런싱
🚀 1️⃣ 왜 로드 밸런싱을 구현하는가?
• 앞으로 대량의 트래픽을 처리하는 프로젝트를 맡을 때를 대비해 이 프로젝트에서 구현하고자
했다.
• 단일 서버는 트래픽 증가 시 부하로 인해 응답 속도가 느려지거나 다운될 위험이 있다.
• 이를 방지하기 위해 로드 밸런서를 사용해 여러 서버로 트래픽을 분산시킬 수 있다.
• AWS ALB(Application Load Balancer)를 사용하여 트래픽을 효율적으로 분산하고자 한다.
______________________________________________________________________________________
🔎 2️⃣ Nginx 대신 AWS를 선택한 이유
AWS는 Fully Managed 서비스로 관리 부담을 줄일 수 있다는 점이 강점.
✅ 1. 인프라 관리 부담 감소
• AWS는 자동화된 관리가 가능.
• Nginx는 로드 밸런서를 수동으로 구성한 후 원하는 형태로 보조해야 함.
✅ 2. 그룹 배포가 편리함
• AWS ALB는 Auto Scaling Group 과 연동되어 배포를 자동화.
• Nginx의 경우, 배포 시 수동적인 결정이 필요.
✅ 3. 보안 강화
• AWS WAF, AWS Shield 등의 보안 서비스와 ALB를 연동할 수 있음.
• Nginx의 경우, 보안 복잡도가 더 높음.
✅ 4. L7(Application Layer) 기반의 HTTP/HTTPS 최적화
• ALB는 L7 기반 으로 동작하여, URL 경로(Path-based), 호스트(Host-based)라우팅을 제공
• Nginx도 가능하지만 수동 설정이 필요하며, 관리 복잡성이 증가.
______________________________________________________________________________________
🔎 3️⃣ ALB vs. NLB vs. CLB - 왜 ALB를 선택했는가?
💡 현재 프로젝트는 HTTP/HTTPS 기반의 API 서비스 이므로 ALB가 가장 적합.
기능 ALB (Application Load Balancer) NLB (Network Load Balancer) CLB (Classic Load Balancer)
레이어 | L7 (Application Layer) | L4 (Transport Layer) | L4 & L7 혼합 |
트래픽 타입 | HTTP, HTTPS, gRPC | TCP, UDP | HTTP, HTTPS, TCP |
라우팅 기능 | ✔ 경로(Path), 호스트(Host) 기반 라우팅 지원 | ❌ 단순 IP 기반 라우팅 | ❌ 제한적 |
SSL/TLS 종료 | ✔ 지원 | ❌ 불가 (EC2에서 직접 처리해야 함) | ✔ 지원 |
Auto Scaling | |||
연동 | ✔ 완벽 지원 | ✔ 지원 (하지만 헬스 체크 기능이 제한적) | ❌ 지원 X |
헬스 체크 (Health Check) | ✔ 세밀한 HTTP 상태 코드 기반 헬스 체크 | ✔ TCP 기반 헬스 체크 | ❌ 제한적 |
보안 및 인증 | ✔ WAF, IAM 인증, AWS Shield와 연동 가능 | ❌ 직접 설정 필요 | ❌ 직접 설정 필요 |
주요 사용 사례 | REST API, 웹 애플리케이션, 마이크로서비스 | 게임 서버, 메시지 큐, TCP 기반 서비스 | 기존 레거시 서비스 유지보수 |
✅ ALB를 선택한 이유
1️⃣ HTTP/HTTPS 기반의 API 트래픽 처리에 적합
• API 서버를 운영하는 환경에서는 L7 계층의 라우팅 기능이 필수적.
• ALB는 URL 경로(Path-based), 호스트(Host-based) 라우팅을 지원하여 API 서비스 확장에
유리함.
2️⃣ SSL/TLS Termination 지원 (서버 부하 감소)
• ALB에서 SSL을 해석(terminate)한 뒤, 백엔드 서버에 HTTP로 전달 가능.
• API 서버에서 직접 SSL을 처리하지 않아도 되어, 서버 부하를 줄이고 응답 속도를 개선할 수
있음.
3️⃣ Auto Scaling로 자동화 가능
• 트래픽 증가 시 자동으로 인스턴스를 추가하고, 감소하면 제거 가능.
• NLB는 L4 기반이라 단순 TCP 연결만 관리하므로, API 요청을 효과적으로 분배하기 어려움.
4️⃣ 세밀한 헬스 체크 및 오류 감지
• HTTP 상태 코드(2xx, 3xx, 4xx, 5xx) 기반으로 비정상적인 서버를 자동으로 제외.
• NLB는 TCP 헬스 체크만 제공**하여, 애플리케이션 레벨의 장애 감지 기능이 부족함.
5️⃣ 보안 기능이 강력함
• AWS WAF, IAM 인증, AWS Shield** 등과 연동 가능.
• API 서버를 운영할 때 웹 방화벽(WAF)을 적용하여 악의적인 공격을 방어할 수 있음.
_____________________________________________________________________________________
🔎 4️⃣ 어떻게 구현할 것인가?
✅ 필요 서비스 목록
• EC2 : API 서비스 배포, 로드 밸런서 추가(앱 서버 만들기)
• RDS : 데이터베이스
• Certificate Manager : SSL/TLS 인증서 관리
• Route 53 : DNS 로드 밸런싱 설정
(구매한 도메인의 관리를 Gabia → AWS 로 이전)
• VPC : 네트워크 보안
• IAM : 권한 관리
✅ 구현 환경
1️⃣ AWS ALB 설정
• HTTP API 요청을 여러 서버로 분산.
• 리스너(Listener) 설정을 통해 트래픽을 적절한 서버 그룹(Target Group)으로 라우팅.
2️⃣ Auto Scaling Group 연동
• 트래픽 증가 시 자동 확장, 감소 시 자동 축소.
3️⃣ API 서버 구성
• NestJS 기반 API 서버 여러 대를 배포.
• 세션 유지(Session Persistence) 전략 고려.
• PM2 클러스터 모드 활용 가능.
4️⃣ Nginx Reverse Proxy 활용 (필요 시)
• 특정 경로에 따라 다른 서비스로 라우팅 가능