8.8. ALB(Application Load Balancer)와 Auto Scaling 활용한 실전 AWS 서비스 구성 방법
AWS 환경에서 이번에 구성할 서비스 아키텍처는 ALB와 Auto Scaling를 연계하여 상용 서비스 환경을 만드는 방법에 대해 알아보겠습니다.
1. ALB(Application Load Balancer)를 통한 트래픽 분산:
ALB는 들어오는 HTTP/HTTPS 요청을 여러 서버(EC2 인스턴스)로 고르게 분산시켜, 한 서버에 과부하가
발생하지 않도록 합니다.
2. Auto Scaling을 통한 리소스 최적화:
Auto Scaling은 애플리케이션 부하에 따라 서버의 수를 자동으로 늘리거나 줄여, 트래픽 급증 시에도 안정적인
서비스 제공과 함께 비용 효율적인 운영을 가능하게 합니다.
3. AGS (AWS Global Accelerator)를 통한 단일 접속 지점 제공:
AGS는 전 세계 사용자에게 단일 고정 IP 또는 DNS 이름을 제공하여, 사용자가 언제나 동일한 접속 경로로
서비스를 이용할 수 있도록 지원합니다.
이 세 가지 기능을 결합하면, ALB가 효율적으로 트래픽을 분산하고, Auto Scaling이 리소스를 실시간으로 최적화하며, AGS가 전 세계 어디서나 단일 접속 지점을 제공함으로써, 트래픽 변화나 장애 상황에도 안정적이고 빠른 응답을 보장하는 서비스 아키텍처를 구현할 수 있습니다.
1. 서비스 개념 소개
1.1. Application Load Balancer (ALB)
- 정의: ALB는 HTTP/HTTPS 요청을 받아 여러 서버(EC2 인스턴스)로 분산시켜주는 서비스입니다.
- 주요 기능:
- URL 또는 호스트 기반 라우팅으로 요청 분배
- 대상 서버의 상태(헬스 체크)를 확인하여 장애가 있는 인스턴스는 제외
- 사용자 요청을 효율적으로 여러 서버에 분산
1.2. Auto Scaling
- 정의: Auto Scaling은 애플리케이션 부하 변화에 따라 EC2 인스턴스 수를 자동으로 늘리거나 줄여, 항상 적절한 리소스를 유지하게 하는 기능입니다.
- 주요 기능:
- CPU 사용률, 네트워크 트래픽 등 지표에 따른 스케일 아웃(증가) 및 스케일 인(감소)
- 최소, 최대, 그리고 원하는 인스턴스 수를 미리 설정
- 인스턴스 장애 발생 시 자동 복구
1.3. AGS (AWS Global Accelerator)
- 정의: AGS는 전 세계 사용자들에게 단일 고정 IP(또는 DNS)를 제공하여, 서비스 접근 시 항상 동일한 접속 지점을 사용할 수 있도록 도와줍니다.
- 주요 기능:
- 여러 리전에 분산된 ALB나 서버에 대해 단일 접속 지점을 제공
- 최적의 네트워크 경로를 자동으로 선택하여 빠른 응답 속도 보장
- 장애 발생 시 자동으로 트래픽을 정상 엔드포인트로 재분배
2. 실습 전 준비 사항
실습을 진행하기 전에 아래 항목들을 준비하세요.
- AWS 계정: 필요한 권한이 있는 계정
- VPC 및 서브넷: ALB, Auto Scaling 그룹, AGS를 배포할 VPC 환경
- 애플리케이션 서버: 웹 서버나 애플리케이션 서버 (예: EC2 인스턴스)
- AWS 관리 콘솔 또는 CLI: 설정과 테스트를 위한 도구
3. 구성 단계
3.1. ALB 구성
3.1.1. 대상 그룹(Target Group) 생성
- AWS Management Console에서 EC2 대시보드 → 대상 그룹 메뉴로 이동합니다.
- 새 대상 그룹을 생성할 때 다음을 설정합니다.
- 프로토콜/포트: HTTP 혹은 HTTPS, 사용 중인 애플리케이션 포트 지정
- 대상 타입: 인스턴스 또는 IP 주소 선택
- 헬스 체크 경로(예: /health)와 간격, 타임아웃 등 기본 설정을 입력합니다.
- 테스트용 서버(EC2 인스턴스)를 대상 그룹에 추가합니다.
☞ Auto Scaling을 통해 인스턴스가 자동 생성 됨으로 여기서는 대상 그룹을 별도 추가하지 않는다.
Auto Acaling은 Launch template에 AMI 정보를 이용해 EC2 인스턴스를 자동생성 한다.
3.1.2. ALB 생성 및 설정
- 로드 밸런서 메뉴에서 **애플리케이션 로드 밸런서(ALB)**를 선택 후 새 로드 밸런서를 생성합니다.
- 리스너(예: 80번, 443번 포트)를 추가하고, 앞서 생성한 대상 그룹과 연결합니다.
- 보안 그룹 설정 시 외부 접근을 허용하는 규칙을 추가합니다.
- 생성 후 ALB의 DNS 이름을 확인하고, 웹 브라우저에서 접속해 정상 동작하는지 테스트합니다.
(참고) ALB 설정 상세 가이드 ☞ https://backend-java.tistory.com/44
8.6. AWS EC2와 ALB(Application Load Balancer) 설정 및 관리 가이드
1. 개요AWS에서 EC2 인스턴스를 운영할 때 트래픽 증가에 대비하여 로드 밸런서(ALB)를 설정하면 안정적으로 서비스를 제공할 수 있습니다. 이 글에서는 ALB를 설정하고, 기존 EC2를 복제하여 확장하
backend-java.tistory.com
3.2. Auto Scaling 구성
3.2.1. Launch Template 또는 Launch Configuration 생성
- Launch Template: 인스턴스 생성에 필요한 AMI, 인스턴스 유형, 보안 그룹, 사용자 데이터 스크립트 등을 미리 정의합니다.
- (참고) "8.8.가. Auto Scaling 환경에서 Spring Boot 애플리케이션 자동 기동 및 종료 처리하는 EC2 인스턴스 AMI 생성 가이드" https://backend-java.tistory.com/47
8.8.가. Auto Scaling 환경에서 Spring Boot 애플리케이션 자동 기동 및 종료 처리하는 EC2 인스턴스 AMI 생
AWS Auto Scaling을 활용하여 EC2 인스턴스를 자동으로 기동 및 종료하는 환경에서, 인스턴스 라이프사이클에 맞춰 Spring Boot 애플리케이션을 자동으로 시작하고 정상 종료하는 방법이 필요해졌습니
backend-java.tistory.com
3.2.2. Auto Scaling Group(ASG) 생성
- Auto Scaling Groups 메뉴에서 새 그룹을 생성합니다.
- 앞서 생성한 Launch Template을 선택하고, 배포할 VPC 및 서브넷을 지정합니다.
- 최소, 최대, 그리고 원하는 인스턴스 수를 설정합니다.
- 대상 그룹 연동: ASG에 앞서 생성한 ALB의 대상 그룹을 선택하여, 자동 생성되는 인스턴스가 ALB에 등록되도록 합니다.
- 스케일 정책 설정:
- 스케일 아웃: 예를 들어, CPU 사용률이 70% 이상이면 인스턴스 수 증가
- 스케일 인: CPU 사용률이 30% 이하이면 인스턴스 수 감소
- CloudWatch 경보를 통해 트리거 설정
3.3. AGS (AWS Global Accelerator) 구성
3.3.1. AGS 생성
- AWS Management Console에서 Global Accelerator 서비스를 선택합니다.
- 새 가속기를 생성하고, 이름 및 기본 설정을 입력합니다.
- 생성된 가속기는 자동으로 하나 이상의 고정 IP 주소와 단일 DNS 이름을 할당받습니다.
3.3.2. 엔드포인트 그룹 설정
- 생성한 가속기에 엔드포인트 그룹을 추가합니다.
- 엔드포인트로 앞서 구성한 ALB를 선택합니다.
- 리전 및 트래픽 비율, 헬스 체크 설정을 입력하여 ALB의 상태를 지속적으로 모니터링하도록 구성합니다.
- 이로써 AGS를 통해 사용자는 단일 고정 IP나 DNS 이름으로 접속하게 되고, 내부에서는 ALB와 Auto Scaling이 부하 분산과 자동 리소스 조절을 수행하게 됩니다.
(참고) AGS 사용 단일 고정 IP사용 ALB 만들기 ☞ https://backend-java.tistory.com/45
8.7. 왜 ALB의 IP 주소가 표시되지 않을까?
앞에 블로그에서 ALB를 생성하면 주어지는 DNS 이름을 사용하여 Load balancing 테스트까지 잘 수행되는 것을 확인했습니다. 그런데 ALB 화면에서 DNS 이름을 보이는데, IP주소는 따로 표시를 해주지 않
backend-java.tistory.com
4. 테스트 방법 – 초보자도 쉽게 따라하기
4.1. ALB 테스트
- DNS 접속:
- ALB 생성 후 콘솔에서 확인한 DNS 이름(예: my-alb-1234567890.ap-northeast-2.elb.amazonaws.com)을 웹 브라우저 주소창에 입력합니다.
- 또는 터미널에서 curl http://my-alb-1234567890.ap-northeast-2.elb.amazonaws.com 명령어를 실행하여 응답 내용을 확인합니다.
- 헬스 체크 확인:
AWS 콘솔의 대상 그룹 탭에서 헬스 체크 상태가 ‘Healthy’로 표시되는지 확인합니다.
4.2. Auto Scaling 테스트
- 부하 발생 테스트:
- Auto Scaling 용량을 "원한는 용량" 1, "크리 조정 한도" 최소 1, 최대 3으로 설정 합니다.
- Target Tracking Policy에서 CPU 사용율이 50% 이상이 10초 이상 지속되면 스케일 아웃하도록 설정
- Auto Scaling에 따라 생성된 1개의 EC2 인스턴스에서 접속하여 강제 부하를 발생시킴
(예) 반복문을 사용하여 웹 서비스를 반복 호출, CPU 부하 유발
while [ 1 ]; do
> curl http://localhost/api/data/1 > /dev/null 2>&1
> done
- 스케일 아웃 확인:
부하가 증가하면 AWS Management Console의 Auto Scaling 섹션이나 CloudWatch 지표를 확인하여 인스턴스 수가 자동으로 증가하는지 모니터링합니다.
- 스케일 인 확인:
부하가 줄어든 후 일정 시간이 지나면 인스턴스 수가 감소하는지 확인합니다.
4.3. AGS 테스트 (단일 접속 지점 활용)
- 단일 접속 지점 접속:
- AGS에서 할당받은 고정 IP 또는 DNS 이름(예: a1234567890abcdef.awsglobalaccelerator.com)을 웹 브라우저나 터미널에서 접속합니다.
- 이 주소로 접속하면, 내부적으로 AGS가 ALB로 트래픽을 전달하게 됩니다.
- 다양한 네트워크 환경에서 테스트:
- VPN이나 프록시를 이용하여 다른 지역에서 접속해보고, 동일한 단일 접속 지점으로 접속되는지 확인합니다.
- AGS 콘솔의 모니터링 탭에서 트래픽 흐름과 지연 시간, 헬스 체크 결과를 확인하여 모든 엔드포인트가 정상 작동하는지 점검합니다.
4.4. 장애 상황 시나리오 테스트
- 일부 인스턴스 장애 유발:
ASG 내 일부 인스턴스를 의도적으로 중지시키거나 네트워크 설정을 변경하여 헬스 체크가 실패하게 만듭니다.- ALB의 헬스 체크 결과가 ‘Unhealthy’로 변경되고, ASG가 자동으로 새로운 인스턴스를 추가하는지 확인합니다.
- 전체 테스트 통합:
AGS, ALB, Auto Scaling의 모든 구성 요소가 연계되어 정상적으로 트래픽을 분산하고, 부하 변화에 따라 인스턴스 수를 조절하는 전체 프로세스를 한 번 더 확인합니다.
5. 결론 및 최종 팁
이번 실습을 통해 여러분은 다음과 같은 AWS 서비스의 결합 효과를 경험할 수 있습니다.
- ALB를 통한 효율적인 트래픽 분산: 여러 서버에 요청을 고르게 분산하여 응답 속도와 안정성 향상
- Auto Scaling을 통한 리소스 최적화: 부하 변화에 따라 인스턴스 수를 자동 조절하여 비용 효율적인 운영
- AGS를 통한 단일 접속 지점 제공: 사용자들이 항상 동일한 고정 IP 또는 DNS 이름으로 접속하여, 내부적으로 최적의 경로로 트래픽이 전달되도록 지원
최종 팁:
- 구성 후 AWS 콘솔과 CloudWatch를 통해 지속적으로 모니터링하며, 실제 트래픽 변화에 맞춰 스케일 정책을 조정하세요.
- 테스트 시 직접 접속, 부하 발생, 장애 시나리오를 여러 번 반복해 보면서 각 구성 요소의 역할과 상호작용을 이해하면, 실 운영 환경에서의 문제 해결 능력이 향상됩니다.
이 가이드를 참고하여 AWS 환경에서 초보자도 안정적이고 탄력적인 서비스 아키텍처를 구성해 보시기 바랍니다. 추가 질문이나 도움이 필요하시면 댓글이나 문의를 남겨주세요!