본문 바로가기
개발 공부/AWS

[AWS] SAA 공부 (5)-5 ELB - SSL 인증서 / SNI / Connect Draining / ASG

by sngynhy 2025. 3. 24.

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와 연동해 트래픽을 자동으로 분산

동작 방식

  1. 초기 설정 > ASG 생성 시 Launch Template과 Min/Max Capacity 설정
  2. 모니터링 > CloudWatch 지표(CPU 사용률, 네트워크 트래픽 등)을 모니터링
  3. 스케일링 > 조정 정책에 따라 인스턴스를 자동 추가/제거
  4. 장애 대응 > 특정 인스턴스가 비정상 상태일 경우 제거 후 자동으로 대체 인스턴스 생성

조정 정책

  • 동적 스케일링
    • 목표 추적 스케일링 (Target Tracking Scaling)
      • 특정 지표(CPU, 요청 수 등)가 목표 값에 도달하도록 인스턴스를 조절
      • 예를 들어, CPU 사용률 50% 유지 → 필요에 따라 자동 조정
        ※ 메트릭(Metric): 시간이 지남에 따라 변화하는 수치 측정값
    • 단순/단계 스케일링
      • 클라우드 와치 알람을 정의하여 ASG의 용량 단위를 추가/제거하고자 할 때 알람 발생
    • 예약 스케일링 (Scheduled Scaling)
      • 알려진 사용 패턴을 기반으로 스케일링 예상
      • 특정 시간에 인스턴스를 자동으로 추가/제거
      • 예를 들어, 금요일 오후 5시에 매번 새로운 사용자가 발생하므로 최소 용량을 10으로 늘림
  • 예측 스케일링
    • 지속적인 부하를 예측하여 미리 예약을 시작하는 경우
    • ASG는 자동으로 과거 부하를 분석하고 예측치를 생성하여 예측치를 기반으로 스케일링 작업을 예약
    • 반복되는 패턴이 있을 때, 주기적인 데이터가 있는 경우 유용

적합한 스케일 정책 선택 기준

실제로 애플리케이션이 수행하는 작업과 작동 방식에 따라 달라지며 일반적인 방법 몇 가지 제시

  • CPU 활용도
  • 테스트를 기반으로 하는 타깃당 요청 수
  • 네트워크 의존도
  • 클라우드 와치에 설정한 사용자 정의 메트릭 기반

Scaling Cooldonws

스케일링 후 인스턴스를 추가하거나 제거할 때마다 기본적으로 5분 쿨다운 시간을 갖음

  • 쿨다운 시간 동안 ASG는 추가 인스턴스를 개시하거나 종료하지 않음
    메트릭이 안정화 되도록 하고, 새로운 인스턴스가 적용되어 새로운 메트릭이 어떻게 변할지 지켜보는 시간을 가짐
  • 준비된 도구를 사용하여 EC2 인스턴스의 설정 시간을 줄여 요청을 더 빠르게 처리할 수 있도록 하는게 좋음
  • EC2 인스턴스를 설정하는 데 시간을 소비하지 않으면 즉시 효과가 나타날 수 있음