SSL (Secure Sockets Layer)
웹사이트와 브라우저 간의 데이터를 암호화하여 보호하는 기술
- SSL은 클라이언트와 로드 밸런서 사이에서 트래픽이 이동하는 동안 암호화 처리
- 전송 중(in-flight) 암호화
- 데이터는 네트워크를 이동하는 중에 암호화 => 송신자와 수신자 측에서만 복호화 가능
- SSL은 '보안 소켓 계층'을 의미하고 연결을 암호화하는 데 사용
- TLS는 새로운 버전의 SSL로 '전송 계층 보안'을 의미
- 퍼블릭 인증서는 인증 기관(CA)에서 발급
- 퍼블릭 SSL 인증서를 로드 밸런서에 추가하면 클라이언트와 로드 밸런서 사이의 연결(트래픽)을 암호화 해줌
- SSL 인증서는 만료 날짜가 있기 때문에 주기적으로 갱신해줘야 인증 상태가 유지됨
SSL이 로드 밸런서에서 동작하는 방법
1. 사용자가 HTTPS를 통해 접속 > SSL을 사용하는 웹사이트의 URL에는 "HTTP" 대신 "HTTPS"가 표시
2. 로드 밸런서에서 내부적으로 SSL 종료를 수행
3. 백엔드에서 HTTP로 EC2 인스턴스와 통신 > VPC로 이동하는 트래픽은 프라이빗 네트워크를 사용하기 때문에 안전
ACM(AWS 인증서 관리자)에 사용자가 갖고 있는 인증서를 업로드
SNI (Server Name Indicaiton)
하나의 IP 주소와 Port에서 여러 개의 SSL/TLC 인증서를 사용할 수 있도록 해주는 기술
- 인증서를 하나의 웹 서버에 로드하여 해당 서버가 여러 개의 웹 사이트를 지원함
- 과거에는 한 IP 주소에 하나의 인증서만 연결 가능 > 즉, 도메인마다 다른 IP 주소가 필요했으나
SNI을 사용하면 여러 개의 도메인을 하나의 IP에 연결 - 확장된 프로토콜로써 클라이언트가 대상 서버의 호스트 이름을 지정
- 클라이언트가 접속할 웹 사이트를 알리면 서버는 어떤 인증서를 로드해야 하는지 확인 후 해당 인증서를 로드
- ALB, NLB, CloudFront 지원
SNI 동작 원리
1. 클라이언트 접속 요청
- HTTPS 통신 시작 시 클라이언트는 서버에 '특정 도메인에 접속'하길 원한다는 신호를 보냄
- 브라우저는 접속하려는 도메인 이름을 SNI 확장 필드에 담아 서버에 전송
2. 서버가 인증서 선택
- 서버는 클라이언트가 보낸 도메인을 확인하고 해당 도메인에 맞는 인증서를 선택
- 트래픽을 암호화하여 규칙에 따라 타겟 그룹에 요청 재전송
Connect Draining ( = Deregistration Delay)
인스턴스가 등록 해제 또는 비정상 상태에 있을 때 인스턴스에 어느 정도의 시간을 주어 활성 요청을 완료할 수 있도록 하는 기능
즉, 기존 연결을 안전하게 종료하기 전까지 기다리는 시간
- Connect Draining - for CLB / Deregistration Delay - for ALB & NLB
- 만약 인스턴스 해제 시 기존 연결을 바로 끊어버릴 경우 사용자가 처리 중이던 작업이 강제로 중단될 수 있기 때문에
인스턴스가 등록 해제되더라도 현재 처리 중인 요청이 완료될 때 까지 기다림 - Delay 시간은 1~3,600초 사이의 값으로 설정 가능
- default 300초(5분)
- 0초: 기능 비활성 (즉시 등록 해제)
Deregistration Delay 동작 방식
1. 등록 해제 요청
- 관리자가 EC2 인스턴스를 ELB에서 등록 해제
2. 지연 시간 대기
- ELB는 새로운 트래픽은 보내지 않지만, 기존 연결은 유지
- 이 때 대기하는 시간이 바로 Deregistration Delay
3. 연결 종료
- 기존 연결이 모두 완료되거나, 설정한 시간이 지나면 ELB는 인스턴스를 완전히 등록 해제
ASG (Auto Scaling Group)
EC2 인스턴스를 자동으로 관리하는 그룹
트래픽 변화나 시스템 상태에 따라 EC2 인스턴스를 자동으로 추가/제거(스케일 아웃/스케일 인)
- 따라서 ASG 크기는 시간이 지나면서 변하며, ASG에서 실행되는 인스턴스의 최소 및 최대 개수를 보장하기 위해 매개변수를 전반적으로 정의할 수 있음
- ASG와 로드 밸런서 페어링할 경우 ASG에 속한 모든 인스턴스가 로드 밸런서에 연결됨
- 특정 인스턴스가 비정상이면 종료 후 새 인스턴스 생성
- 시스템의 가용성 및 비용 효율성을 극대화
ASG 구성 요소
- Launch Template (시작 템플릿)
- EC2 인스턴스를 어떻게 생성할지 정의
- AMI, 인스턴스 유형, 키 페어, 보안 그룹 등을 설정
- Desired Capacity (목표 용량)
-
- ASG가 유지하려는 인스턴스 개수
-
- Min/Max Capacity (최소/최대 용량)
- 인스턴스 개수의 최소/최대치
- 예: 최소 2개, 최대 10개 → 트래픽에 따라 2~10개의 인스턴스를 자동 관리
- Scaling Policies (확장 정책)
- 인스턴스를 추가/제거하는 규칙
- 예: CPU 사용률이 70% 이상이면 인스턴스 1개 추가
- Health Check (상태 확인)
- EC2 상태를 주기적으로 점검해, 비정상 인스턴스를 자동으로 교체
- EC2 또는 ELB 상태 확인
- Load Balancer (선택 사항)
- ELB와 연동해 트래픽을 자동으로 분산
동작 방식
- 초기 설정 > ASG 생성 시 Launch Template과 Min/Max Capacity 설정
- 모니터링 > CloudWatch 지표(CPU 사용률, 네트워크 트래픽 등)을 모니터링
- 스케일링 > 조정 정책에 따라 인스턴스를 자동 추가/제거
- 장애 대응 > 특정 인스턴스가 비정상 상태일 경우 제거 후 자동으로 대체 인스턴스 생성
조정 정책
- 동적 스케일링
- 목표 추적 스케일링 (Target Tracking Scaling)
- 특정 지표(CPU, 요청 수 등)가 목표 값에 도달하도록 인스턴스를 조절
- 예를 들어, CPU 사용률 50% 유지 → 필요에 따라 자동 조정
※ 메트릭(Metric): 시간이 지남에 따라 변화하는 수치 측정값
- 단순/단계 스케일링
- 클라우드 와치 알람을 정의하여 ASG의 용량 단위를 추가/제거하고자 할 때 알람 발생
- 예약 스케일링 (Scheduled Scaling)
- 알려진 사용 패턴을 기반으로 스케일링 예상
- 특정 시간에 인스턴스를 자동으로 추가/제거
- 예를 들어, 금요일 오후 5시에 매번 새로운 사용자가 발생하므로 최소 용량을 10으로 늘림
- 목표 추적 스케일링 (Target Tracking Scaling)
- 예측 스케일링
- 지속적인 부하를 예측하여 미리 예약을 시작하는 경우
- ASG는 자동으로 과거 부하를 분석하고 예측치를 생성하여 예측치를 기반으로 스케일링 작업을 예약
- 반복되는 패턴이 있을 때, 주기적인 데이터가 있는 경우 유용
적합한 스케일 정책 선택 기준
실제로 애플리케이션이 수행하는 작업과 작동 방식에 따라 달라지며 일반적인 방법 몇 가지 제시
- CPU 활용도
- 테스트를 기반으로 하는 타깃당 요청 수
- 네트워크 의존도
- 클라우드 와치에 설정한 사용자 정의 메트릭 기반
Scaling Cooldonws
스케일링 후 인스턴스를 추가하거나 제거할 때마다 기본적으로 5분 쿨다운 시간을 갖음
- 쿨다운 시간 동안 ASG는 추가 인스턴스를 개시하거나 종료하지 않음
메트릭이 안정화 되도록 하고, 새로운 인스턴스가 적용되어 새로운 메트릭이 어떻게 변할지 지켜보는 시간을 가짐 - 준비된 도구를 사용하여 EC2 인스턴스의 설정 시간을 줄여 요청을 더 빠르게 처리할 수 있도록 하는게 좋음
- EC2 인스턴스를 설정하는 데 시간을 소비하지 않으면 즉시 효과가 나타날 수 있음
'개발 공부 > AWS' 카테고리의 다른 글
[AWS] SAA 공부 (6)-1 RDS - Amazon Aurora (0) | 2025.03.25 |
---|---|
[AWS] SAA 공부 (6) RDS (Relational Database Service) (0) | 2025.03.25 |
[AWS] SAA 공부 (5)-4 ELB - Sticky Sessions / Cross-Zone Load Balancing (0) | 2025.03.24 |
[AWS] SAA 공부 (5)-3 ELB - GWLB (Gateway Load Balancer) (0) | 2025.03.24 |
[AWS] SAA 공부 (5)-2 ELB - NLB (Network Load Balancer) (0) | 2025.03.24 |