본문으로 건너뛰기

[ALB] Application Load Balancer 생성 가이드

Prerequisite

  • AWS 계정 접근 권한: EC2, ELB(Elastic Load Balancing), VPC 관련 리소스를 생성하고 관리할 수 있는 권한이 필요합니다.
  • VPC 및 서브넷 구성 완료: ALB를 배치할 VPC와 2개 이상의 가용 영역(AZ)에 퍼블릭 서브넷이 생성되어 있어야 합니다.
  • EC2 인스턴스 실행 중: ALB가 트래픽을 전달할 대상 EC2 인스턴스가 실행 중이어야 합니다.
  • EC2에 웹 서버 설치: 대상 EC2에 Nginx, Apache 등 웹 서버 또는 애플리케이션이 실행 중이어야 합니다.

Process

1. ALB란?

ALB(Application Load Balancer)는 들어오는 웹 트래픽을 여러 대의 서버(EC2 인스턴스)에 자동으로 분산해 주는 장치입니다.

하나의 서버에 모든 사용자 요청이 몰리면 서버가 느려지거나 다운될 수 있습니다. ALB를 사용하면 트래픽을 여러 서버에 골고루 나누어 안정적인 서비스를 제공할 수 있습니다. 또한 특정 서버에 장애가 발생하면 자동으로 해당 서버를 제외하고 정상 서버로만 트래픽을 전달합니다.

ALB는 HTTP/HTTPS(웹) 트래픽을 처리하는 데 특화되어 있으며, URL 경로나 호스트 이름 기반으로 트래픽을 분리하는 고급 라우팅도 지원합니다.


2. 대상 그룹(Target Group) 생성

대상 그룹은 ALB가 트래픽을 전달할 서버(EC2 인스턴스)들을 묶어 놓은 그룹입니다. ALB를 생성하기 전에 먼저 대상 그룹을 만들어야 합니다.

  1. AWS Console에 로그인한 후, 상단 검색창에 EC2를 입력하고 서비스를 클릭합니다.

  2. 왼쪽 메뉴 하단의 Load Balancing 섹션에서 Target Groups(대상 그룹)을 클릭합니다.

  3. Create target group(대상 그룹 생성) 버튼을 클릭합니다.

  4. Basic configuration(기본 구성) 항목을 설정합니다:

    • Choose a target type(대상 유형 선택): Instances(인스턴스)를 선택합니다.
    • Target group name(대상 그룹 이름): 식별하기 쉬운 이름을 입력합니다. (예: my-app-tg)
    • Protocol(프로토콜): HTTP
    • Port(포트): 80 (또는 애플리케이션이 실행 중인 포트)
    • VPC: EC2 인스턴스가 위치한 VPC를 선택합니다.
  5. Health checks(헬스 체크) 항목을 설정합니다:

    • Health check protocol(헬스 체크 프로토콜): HTTP
    • Health check path(헬스 체크 경로): / (또는 애플리케이션의 상태 확인 경로, 예: /health)

(알아두기) 헬스 체크는 ALB가 대상 서버의 정상 여부를 주기적으로 확인하는 기능입니다. 설정한 경로로 요청을 보내 200 응답이 돌아오면 정상으로 판단합니다.

  1. Next(다음) 버튼을 클릭합니다.


3. EC2 인스턴스를 대상으로 등록

대상 그룹에 트래픽을 받을 EC2 인스턴스를 등록합니다.

  1. Available instances(사용 가능한 인스턴스) 목록에서 ALB에 연결할 EC2 인스턴스를 체크합니다.

  2. 포트 번호를 확인합니다. 기본값은 앞 단계에서 설정한 포트(80)입니다. 실제 사용중인 서비스 포트를 입력합니다.

  3. Include as pending below(아래 보류 중으로 포함) 버튼을 클릭합니다.

  1. 하단 Review targets(대상 검토) 영역에 선택한 인스턴스가 표시되는지 확인합니다.

  2. Create target group(대상 그룹 생성) 버튼을 클릭하여 생성을 완료합니다.

(알아두기) 대상 그룹은 생성 후에도 인스턴스를 추가하거나 제거할 수 있습니다. 대상 그룹 상세 페이지의 Targets(대상) 탭에서 관리합니다.


4. ALB 생성 (인터넷 경계, 가용 영역 선택)

인터넷에서 들어오는 트래픽을 처리할 ALB를 생성합니다.

  1. EC2 콘솔 왼쪽 메뉴의 Load Balancing 섹션에서 Load Balancers(로드 밸런서)를 클릭합니다.

  2. Create load balancer(로드 밸런서 생성) 버튼을 클릭합니다.

  3. Application Load Balancer 항목에서 Create(생성) 버튼을 클릭합니다.

  4. Basic configuration(기본 구성) 항목을 설정합니다:

    • Load balancer name(로드 밸런서 이름): 식별하기 쉬운 이름을 입력합니다. (예: my-app-alb)
    • Scheme(체계): Internet-facing(인터넷 경계)을 선택합니다.
    • IP address type(IP 주소 유형): IPv4를 선택합니다.

(알아두기) Internet-facing(인터넷 경계)은 인터넷에서 직접 접근 가능한 ALB입니다. Internal(내부)은 VPC 내부에서만 접근 가능합니다. 외부 사용자가 접속하는 웹 서비스라면 Internet-facing을 선택합니다.

  1. Network mapping(네트워크 매핑) 항목을 설정합니다:

    • VPC: EC2 인스턴스가 위치한 VPC를 선택합니다.
    • Mappings(매핑): 2개 이상의 가용 영역(AZ)을 선택하고, 각 가용 영역의 퍼블릭 서브넷을 선택합니다.

(중요) ALB는 최소 2개 이상의 가용 영역을 선택해야 합니다. 이는 하나의 가용 영역에 장애가 발생해도 다른 가용 영역에서 트래픽을 처리하여 서비스 가용성을 높이기 위함입니다.

  1. 리스너 및 라우팅 항목을 설정합니다:

    • 프로토콜: 리스너 프로토콜을 설정합니다. 일반적으로 서비스포트와 동일한 포트를 지정합니다.
    • 라우팅 액션: 대상그룹으로 전달
    • 대상그룹: 이전에 생성한 대상그룹선택
  2. Next(다음)으로 진행합니다.


5. 보안 그룹 설정

ALB에 연결할 보안 그룹(방화벽)을 설정합니다. ALB가 외부 트래픽을 수신하려면 적절한 인바운드 규칙이 필요합니다.

ALB용 보안 그룹 생성

  1. EC2 콘솔 왼쪽 메뉴에서 Security Groups(보안 그룹)을 클릭합니다.

  2. Create security group(보안 그룹 생성)은 다음 가이드를 참조합니다.

    [VPC] 보안그룹 설정 가이드

    다음 항목을 입력을 수정해야합니다.

    • Security group name(보안 그룹 이름): my-alb-sg
    • Description(설명): Security group for ALB
    • VPC: ALB가 위치할 VPC를 선택합니다.

    Inbound rules(인바운드 규칙)을 추가합니다: 

    다음설정은 외부에서 ALB에 http/https접근을 허용하도록 하는 규칙입니다.

Type(유형)Protocol(프로토콜)Port range(포트 범위)Source(소스)
HTTPTCP800.0.0.0/0 (Anywhere-IPv4)
HTTPSTCP4430.0.0.0/0 (Anywhere-IPv4)

ALB에 보안 그룹 연결

  1. ALB 생성 화면으로 돌아가서 Security groups(보안 그룹) 항목에서 방금 생성한 my-alb-sg를 선택합니다. 기본 보안 그룹(default)은 제거합니다.

(중요) EC2 인스턴스의 보안 그룹에서도 ALB로부터의 트래픽을 허용해야 합니다. EC2 보안 그룹의 인바운드 규칙에 다음을 추가하세요:

Type(유형)Protocol(프로토콜)Port range(포트 범위)Source(소스)
HTTPTCP80 (또는 앱 포트)ALB 보안 그룹 ID (my-alb-sg)

6. 리스너 설정 (HTTP 80, HTTPS 443)

리스너(Listener)는 ALB가 어떤 포트와 프로토콜로 들어오는 트래픽을 수신할지 정의하는 규칙입니다.

HTTP 리스너 설정

  1. ALB 생성 화면의 Listeners and routing(리스너 및 라우팅) 섹션에서 기본 리스너를 설정합니다:
    • Protocol(프로토콜): HTTP
    • Port(포트): 80
    • Default action(기본 작업): Forward to(전달 대상) 에서 앞서 생성한 대상 그룹(예: my-app-tg)을 선택합니다.

HTTPS 리스너 추가

  1. Add listener(리스너 추가) 버튼을 클릭하여 HTTPS 리스너를 추가합니다:
    • Protocol(프로토콜): HTTPS
    • Port(포트): 443
    • Default action(기본 작업): Forward to(전달 대상) 에서 동일한 대상 그룹을 선택합니다.
    • Default SSL/TLS server certificate(기본 SSL/TLS 서버 인증서): From ACM에서 발급받은 인증서를 선택합니다.

(알아두기) HTTPS 리스너를 추가하려면 ACM에서 SSL/TLS 인증서가 미리 발급되어 있어야 합니다. 인증서 발급 방법은 [ACM] SSL/TLS 인증서 발급 가이드를 참고하세요.

[ACM] TLS/SSL용 인증서 발급 가이드

HTTP → HTTPS 리다이렉트 설정 (권장)

보안을 위해 HTTP(80)로 들어온 요청을 HTTPS(443)으로 자동 리다이렉트하는 설정을 권장합니다.

  1. ALB 생성 완료 후, Listeners and rules(리스너 및 규칙) 탭에서 HTTP:80 리스너를 선택합니다.

  2. Actions(작업) > Edit listener(리스너 편집)을 클릭합니다.

  3. 기본 작업을 Forward to에서 Redirect to로 변경합니다:

    • Protocol(프로토콜): HTTPS
    • Port(포트): 443
    • Status code(상태 코드): 301 - Permanently moved
  4. Save changes(변경 사항 저장) 버튼을 클릭합니다.


7. 헬스 체크 설정

헬스 체크는 ALB가 대상 서버의 정상 여부를 주기적으로 확인하는 기능입니다. 비정상 서버는 자동으로 트래픽 분배 대상에서 제외됩니다.

  1. EC2 콘솔 > Target Groups(대상 그룹)에서 생성한 대상 그룹을 클릭합니다.

  2. Health checks(헬스 체크) 탭을 클릭한 후 Edit(편집) 버튼을 클릭합니다.

  3. 헬스 체크 상세 설정을 조정합니다:

항목권장값설명
Health check protocol(프로토콜)HTTP헬스 체크에 사용할 프로토콜
Health check path(경로)/ 또는 /healthALB가 요청을 보낼 URL 경로
Healthy threshold(정상 임계값)3정상으로 판단하기까지 연속 성공 횟수
Unhealthy threshold(비정상 임계값)3비정상으로 판단하기까지 연속 실패 횟수
Timeout(시간 초과)5초응답 대기 시간
Interval(간격)30초헬스 체크 요청 간격
Success codes(성공 코드)200정상 응답으로 인정할 HTTP 상태 코드

  1. Save changes(변경 사항 저장) 버튼을 클릭합니다.

  2. Targets(대상) 탭에서 등록된 인스턴스의 Health status(헬스 상태)를 확인합니다:

    • healthy: 정상
    • unhealthy: 비정상 (헬스 체크 실패)
    • initial: 초기화 중 (첫 헬스 체크 진행 중)
    • draining: 연결 해제 중

Trouble Shooting

ALB 생성 후 접속이 되지 않거나 대상이 비정상인 경우 확인 사항입니다.

브라우저에서 ALB DNS로 접속이 되지 않는 경우

  • ALB 상태가 Active(활성)인지 확인합니다. Provisioning 상태에서는 접속이 불가능합니다.
  • ALB 보안 그룹의 인바운드 규칙에서 HTTP(80) 및 HTTPS(443) 포트가 0.0.0.0/0으로 열려 있는지 확인합니다.
  • 대상 그룹의 인스턴스 헬스 상태가 healthy인지 확인합니다.

대상 그룹의 인스턴스가 unhealthy로 표시되는 경우

  • EC2 인스턴스가 실행 중(Running) 상태인지 확인합니다.

  • EC2에 웹 서버(Nginx, Apache 등)가 정상적으로 실행 중인지 확인합니다.

  • EC2 보안 그룹에서 ALB 보안 그룹으로부터의 트래픽(HTTP 80 등)이 허용되어 있는지 확인합니다.

  • 헬스 체크 경로(예: /)로 EC2에 직접 요청을 보내 200 응답이 오는지 확인합니다:

    curl -I http://[EC2_Private_IP]:80/
  • 헬스 체크 포트와 EC2에서 실행 중인 애플리케이션 포트가 일치하는지 확인합니다.

502 Bad Gateway 에러가 발생하는 경우

  • 대상 그룹에 등록된 인스턴스가 있는지 확인합니다.
  • 모든 대상 인스턴스가 unhealthy 상태가 아닌지 확인합니다.
  • EC2의 애플리케이션이 정상적으로 응답하는지 확인합니다.

503 Service Temporarily Unavailable 에러가 발생하는 경우

  • 대상 그룹에 등록된 인스턴스가 0개인 경우 발생합니다. 대상 그룹에 인스턴스를 등록하세요.
  • 모든 인스턴스가 unhealthy인 경우에도 발생합니다. 헬스 체크 설정과 EC2 상태를 점검하세요.

HTTPS 접속 시 인증서 오류가 발생하는 경우

  • ALB의 HTTPS 리스너에 ACM 인증서가 올바르게 연결되어 있는지 확인합니다.
  • 인증서의 도메인과 접속하는 도메인이 일치하는지 확인합니다.
  • 인증서 상태가 Issued(발급됨)인지 ACM 콘솔에서 확인합니다.

또 다른 질문이 있으십니까? 문의 등록