|
| 1 | + |
| 2 | +# Sticky Session (Session Affinity) |
| 3 | + |
| 4 | +쿠키를 통해 클라이언트 요청이 로드밸런서를 거치더라도 **같은 EC2 인스턴스에 지속적으로 연결**되도록 하는 기능이다. **CLB**, **ALB**, **NLB**에서 사용할 수 있다. |
| 5 | + |
| 6 | +## 동작 과정 |
| 7 | + |
| 8 | +1. 클라이언트가 로드 밸런서에 요청 시 **쿠키를 받음** |
| 9 | +2. 이후 요청 시 이 쿠키를 사용하면 **같은 인스턴스에 라우팅 됨** |
| 10 | +3. 쿠키가 만료되면 라우팅 대상이 바뀔 수 있음 |
| 11 | + |
| 12 | +## 그 쿠키는 어떻게 만드나요? |
| 13 | + |
| 14 | +1. Application Cookie |
| 15 | + 어플리케이션이 직접 만든 쿠키를 사용할 수 있다. |
| 16 | +2. Duration-based Cookies |
| 17 | + 로드밸런서가 만들어주는 쿠키를 사용할 수 있다. 이때 쿠키는 AWSALB, AWSALBAPP와 같은 이름으로 만들어진다. 따라서, 저 이름을 어플리케이션에서 사용하면 안된다. |
| 18 | + |
| 19 | +--- |
| 20 | + |
| 21 | +# Cross-Zone Load Balancing |
| 22 | + |
| 23 | +**여러 Availability Zone**에 인스턴스들이 있어도 로드밸런서가 **트래픽을 고르게 분산**하는 기능이다. |
| 24 | + |
| 25 | +## 작동 방식 |
| 26 | + |
| 27 | +아래 그림을 이해하면 된다. |
| 28 | + |
| 29 | +만약 Cross-Zone Load Balancing 기능이 활성화 되어있지 않다면, AZ 1에 있는 인스턴스들은 25씩의 부하를 받게되고, AZ 2의 인스턴스들은 6.25씩 받게된다. |
| 30 | + |
| 31 | +이런 상황을 막기 위해 로드밸런서가 다른 AZ로 트래픽을 전송하여 고르게 분배되도록 하는 것이다. |
| 32 | +![[Pasted image 20250504212253.png]] |
| 33 | + |
| 34 | +## 로드 밸런서별 요금과 기본 값 |
| 35 | + |
| 36 | +| 로드 밸런서 유형 | 기본 상태 | 비용 발생 여부 | |
| 37 | +| --------- | -------- | ---------------------- | |
| 38 | +| **ALB** | **활성화** | **X** (AZ 간 전송 무료) | |
| 39 | +| **NLB** | **비활성화** | **O** (활성화 시 전송 요금 발생) | |
| 40 | +| **GWLB** | **비활성화** | **O** (NLB와 동일) | |
| 41 | +| **CLB** | **비활성화** | **X** (활성화해도 무료) | |
| 42 | + |
| 43 | +### 상황별 예시 |
| 44 | + |
| 45 | +- **트래픽 균형이 중요한 경우** -> 사용하는게 좋다. |
| 46 | +- **요금이 민감하거나 AZ 구조가 대칭적일 경우** -> 사용하지 않는게 좋다. |
| 47 | +- **ALB를 사용하는 경우** -> 기본으로 활성화되며 추가비용도 없으니 사용하는게 좋다. |
| 48 | + |
| 49 | +--- |
| 50 | + |
| 51 | +## SSL/TLS 인증서 |
| 52 | + |
| 53 | +### 기본 개념 |
| 54 | + |
| 55 | +SSL은 연결의 양 끝단에 있는 클라이언트와 서버만 복호화 할 수 있게 암호화하는 기술이다. 이를 In-flight encryption라고 부른다. |
| 56 | + |
| 57 | +### 작동 방식 |
| 58 | + |
| 59 | +1. 클라이언트가 **HTTPS**로 로드 밸런서에 트래픽 전송 |
| 60 | +2. 로드밸런서는 요청을 복호화함. 이를 **SSL 종료(SSL Termination)라고 한다.** |
| 61 | +3. 이후 백엔드(EC2 등)에서는 Private IP를 사용하므로 **HTTP** 요청으로 전달해도 안전하다. |
| 62 | + |
| 63 | +### ACM |
| 64 | + |
| 65 | +AWS Certification Manager로 인증서 발급과 관리를 담당한다. 물론 자체 발급 인증서를 업로드 할 수도 있다. |
| 66 | + |
| 67 | +## SNI (Server Name Indication) |
| 68 | + |
| 69 | + Server Name Indication의 약자로, 여러개의 인증서를 웹서버에 로드해서 사용할 수 있는 기술이다. |
| 70 | + |
| 71 | +ALB의 두개의 타겟 그룹이 서로 다른 도메인을 가지고 있다. 하지만 SSL 인증서는 도메인 단위로 발급되기 때문에, 아래 그림과 같은 상황에서는 SNI가 지원되어야만 한다. 클라이언트가 SSL 핸드셰이크를 보낼 때 요청 도메인 정보를 확인해서 올바른 인증서를 로드한다. |
| 72 | +![[Pasted image 20250504214611.png]] |
| 73 | + |
| 74 | +### SNI 지원 로드 밸런서 |
| 75 | + |
| 76 | +| 로드 밸런서 유형 | SNI 지원 여부 | 다중 인증서 지원 | |
| 77 | +| --------- | --------- | --------- | |
| 78 | +| **ALB** | ✅ | ✅ | |
| 79 | +| **NLB** | ✅ | ✅ | |
| 80 | +| **CLB** | ❌ | ❌ | |
| 81 | + |
| 82 | +- **ALB/NLB**: 여러 도메인용 인증서 → 하나의 리스너에서 처리 가능 |
| 83 | +- **CLB**: 도메인마다 로드 밸런서를 따로 만들어야 함 |
| 84 | + |
| 85 | +--- |
| 86 | + |
| 87 | +# Connection Draining (Deregistration Delay) |
| 88 | + |
| 89 | +인스턴스를 로드밸런서에서 제거할 때, **기존 연결을 즉시 끊지 않고 일정 시간 동안 유지**하여 **이미 활성 요청을 마무리**할 수 있도록 하는 기능이다. **CLB**에서는 Connection Draining라고 부르고, **ALB와 NLB**에서는 Deregistration Delay라고 부른다. |
| 90 | + |
| 91 | +### 작동 방식 |
| 92 | + |
| 93 | +1. 인스턴스가 **로드밸런서 등록 취소 또는 비정상 상태**가 됨. |
| 94 | +2. 로드 밸런서는 해당 인스턴스에 **새 요청을 더이상 보내지 않음.** |
| 95 | +3. 기존 연결은 **지정된 시간 동안 유지**. |
| 96 | +4. 모든 연결이 종료 되면 인스턴스 제거. |
| 97 | + |
| 98 | +### 설정 |
| 99 | + |
| 100 | +- **지연 시간 설정 범위**: `1 ~ 3,600초` (최대 1시간) |
| 101 | +- **기본값**: `300초` (5분) |
| 102 | +- **0초 설정 시**: 기능 비활성화 (인스턴스를 즉시 종료) |
| 103 | + |
| 104 | +-> 요청에 걸리는 평균 시간에 맞게 적절히 설정해주면 된다. 보통의 경우 요청이 1초안에 끝난다면 30초 정도로 설정해주면 좋다. |
| 105 | + |
| 106 | +--- |
| 107 | + |
| 108 | +# ASG |
| 109 | + |
| 110 | +Auto Scailing Group의 약자로 현재 부하에 맞게 **EC2 인스턴스를 자동으로 생성하거나 제거**하는 기술이다. |
| 111 | +- **스케일 아웃**: 부하 증가 → 인스턴스 추가 |
| 112 | +- **스케일 인**: 부하 감소 → 인스턴스 제거 |
| 113 | + |
| 114 | +## 동작 방식 |
| 115 | + |
| 116 | +1. 최소 용량, 희망 용량, 최대 용량을 설정. |
| 117 | +2. Launch Template을 정의. |
| 118 | + EC2를 생성할 때 어떻게 생성할지를 정의하는 것이다. |
| 119 | + 포함 내용: AMI, 인스턴스 타입, 사용자 데이터, 보안 그룹, IAM 역할 등 |
| 120 | +3. CloudWatch 설정 |
| 121 | + 어떤 Metric을 기준으로 부하를 모니터링 할지 정하는 것이다. CPU 사용량 등 원하는 Metric을 지정할 수 있다. CloudWatch에서 Alarm이 울리면 Scale-In이나 Scale-out이 수행된다. |
| 122 | +![[Pasted image 20250504220237.png]] |
| 123 | +## 스케일링 정책 |
| 124 | + |
| 125 | +### 유형 |
| 126 | + |
| 127 | +| 정책 유형 | 설명 | |
| 128 | +| ------------------- | ------------------------------------ | |
| 129 | +| **Target Tracking** | 메트릭을 설정값(예: CPU 40%) 근처로 유지하도록 자동 조절 | |
| 130 | +| **Simple** | CloudWatch 알람 기반으로 인스턴스를 증가/감소 | |
| 131 | +| **Step** | 임계값을 초과하는 정도에 따라 인스턴스 수를 조절 | |
| 132 | +| **Scheduling** | 특정 시간에 스케일 조정 (예: 금요일 17시에 최소 용량 증가) | |
| 133 | +| **Predictive** | 과거 부하를 학습해 미래 스케일링을 **미리 예약** | |
| 134 | + |
| 135 | +### Metric의 종류 |
| 136 | + |
| 137 | +| 메트릭 | 설명 | |
| 138 | +| ----------------- | ----------------------------------- | |
| 139 | +| **CPU 사용률** | 가장 일반적인 기준, 평균 CPU가 높으면 확장 | |
| 140 | +| **ELB의 타깃당 요청 수** | 평균 미해결 요청 수 기반으로 확장 (L7 애플리케이션에 유용) | |
| 141 | +| **네트워크 사용량** | 인/아웃 바이트 수를 기준으로 스케일 | |
| 142 | +| **사용자 정의 메트릭** | CloudWatch에서 정의한 커스텀 메트릭 사용 가능 | |
| 143 | + |
| 144 | +### Cooldown |
| 145 | + |
| 146 | +인스턴스를 추가하거나 제거한 후 메트릭이 안정되기를 기다리는 것이다. 쿨다운 시간이 되면 **ASG는 일정 시간 동안 새로운 작업을 보류**한다. |
| 147 | + |
| 148 | +- **기본값**: `300초 (5분)` |
| 149 | + - **EC2 설정 속도가 빠르다면** 쿨다운 시간 단축 가능 |
| 150 | + - CloudWatch의 **고해상도 모니터링(1분 단위)을 함께 사용하면 민첩한 대응 가능 |
0 commit comments