본문으로 건너뛰기

[ALB] 퍼블릭 ALB 생성 가이드

Prerequisite

본 가이드를 진행하기 전에 다음 항목이 준비되어 있어야 합니다:

  • AWS 계정 접근 권한: VPC, 보안 그룹, EC2, ALB를 생성하고 관리할 수 있는 권한이 필요합니다.
  • VPC 및 Subnet 환경: 퍼블릭 Subnet이 포함된 VPC가 존재해야 하며, ALB는 최소 2개의 가용 영역(AZ)에 걸친 퍼블릭 Subnet에 배포되어야 합니다.
  • 대상 EC2 인스턴스: 트래픽을 수신할 EC2 인스턴스가 준비되어 있어야 합니다. 인스턴스는 Running 상태여야 합니다.
  • 보안 그룹 준비:
    • ALB용 보안 그룹: 인바운드 규칙에서 HTTP(80), HTTPS(443) 포트가 인터넷(0.0.0.0/0)으로부터 허용되어야 합니다.
    • 대상 EC2용 보안 그룹: 인바운드 규칙에서 애플리케이션 포트(예: 80, 8080, 3000)가 ALB의 보안 그룹으로부터 허용되어야 합니다.
  • 애플리케이션 포트 확인: 대상 EC2 인스턴스에서 실행 중인 애플리케이션의 포트 번호를 알고 있어야 합니다. (예: 80, 8080, 3000 등)

알아두기

Application Load Balancer(ALB)란?

ALB는 네트워크 트래픽을 여러 대상(EC2, 컨테이너 등)으로 분산시켜주는 서비스입니다. 클라이언트의 HTTP 요청을 받아 정해진 규칙에 따라 적절한 대상으로 전달합니다. 이를 통해 애플리케이션의 성능을 향상시키고 가용성을 높일 수 있습니다.

가용성과 부하 분산

ALB는 복수의 가용 영역(AZ)에 배포되어 한쪽 AZ에 장애가 발생해도 서비스가 중단되지 않습니다. 또한 여러 EC2 인스턴스에 트래픽을 골고루 분산하여 특정 서버가 과부하되지 않도록 합니다.


Process

1. 보안 그룹 생성 및 설정

ALB가 인터넷으로부터 트래픽을 수신할 수 있도록 보안 그룹을 생성하고 설정합니다.

ALB용 보안 그룹 생성

  1. AWS Console에 로그인하고 EC2 서비스로 이동합니다.

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

  3. 보안 그룹 생성(Create security group) 버튼을 클릭합니다.

  4. 다음 정보를 입력합니다:

    • 보안 그룹 이름: alb-security-group (또는 원하는 이름)
    • 설명: Security group for Application Load Balancer
    • VPC: 대상 EC2 인스턴스가 속한 VPC를 선택합니다.
  5. 인바운드 규칙(Inbound rules) 섹션에서 규칙을 추가합니다.
    첫 번째 규칙 (HTTP)

    • 유형: HTTP
    • 프로토콜: TCP
    • 포트 범위: 80
    • 소스: 0.0.0.0/0 (모든 인터넷 트래픽 허용)

    두 번째 규칙 (HTTPS) - 선택사항

    • 유형: HTTPS
    • 프로토콜: TCP
    • 포트 범위: 443
    • 소스: 0.0.0.0/0

    (Notice: 프로덕션 환경에서는 HTTPS 사용을 권장합니다.)

  6. 오른쪽 하단 보안 그룹 생성(Create security group) 버튼을 클릭하여 완료합니다.

대상 EC2용 보안 그룹 확인

  1. EC2 인스턴스 목록에서 대상 EC2를 클릭합니다..

  2. 같은 보안 그룹 메뉴에서 대상 EC2 인스턴스가 사용 중인 보안 그룹을 선택합니다.

  3. 인바운드 규칙 탭을 클릭하고 규칙 편집(Edit inbound rules)을 클릭합니다.

  4. 규칙 추가(Add rule) 버튼을 클릭합니다.

  5. 다음 정보를 입력합니다:

    • 유형: 사용자 지정 TCP (Custom TCP)
    • 프로토콜: TCP
    • 포트 범위: 애플리케이션이 실행 중인 포트 (예: 80, 8080, 3000)
    • 소스: 사용자 지정(Custom) → ALB용 보안 그룹 생성에서 만든 ALB전용 보안그룹을 선택합니다.

    예시: 포트 8080에서 실행 중인 애플리케이션의 경우

유형: Custom TCP 포트: 8080 소스: sg-0xxxxx (ALB 보안 그룹)

  1. 오른쪽 하단 규칙 저장(Save rules) 버튼을 클릭합니다.

2. Target Group 생성

Target Group은 ALB가 트래픽을 전달할 대상(EC2 인스턴스)들을 관리하는 그룹입니다.

  1. AWS Console의 EC2 서비스에서 왼쪽 메뉴의 **대상 그룹(Target Groups)**을 클릭합니다.

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

  3. 대상 유형(Choose a target type) 화면에서 인스턴스(Instances)를 선택합니다.
    (Notice: 대상 유형은 Target Group 생성 후 변경할 수 없으므로 신중하게 선택해야 합니다. 일반적으로 EC2를 대상으로 하는 경우 인스턴스를 선택합니다.)

  4. 대상 그룹 이름(Target group name) 항목을 입력합니다:

    1. 예: my-app-targets
    2. 허용 문자: a-z, A-Z, 0-9, 하이픈(-)
    3. 하이픈으로 시작하거나 끝날 수 없습니다.
    4. 최대 32자
  5. 프로토콜(Protocol) 항목을 설정합니다:

    1. 프로토콜: HTTP (기본값)
    2. 포트: 대상 EC2 인스턴스에서 애플리케이션이 실행 중인 포트 입력 (예: 80, 8080, 3000)
    3. 포트 범위: 1~65535
  6. IP 주소 유형(IP address type) 항목을 확인합니다:

    1. IPv4 (기본값): EC2 인스턴스의 기본 프라이빗 IPv4 주소 사용
    2. IPv6 지원도 가능하나, 일반적으로 IPv4 사용
  7. VPC 항목을 선택합니다:

    1. 대상 EC2 인스턴스가 속한 VPC를 선택합니다.
    2. 예: vpc-07740d61acf133bba (172.31.0.0/16)
  8. 프로토콜 버전 및 헬스 체크 설정

  9. 프로토콜 버전(Protocol version) 항목을 확인합니다:

    1. HTTP1 (기본값): HTTP/1.1을 사용하여 요청을 전송
    2. 일반적으로 HTTP1을 사용하며, gRPC를 사용하는 특수한 경우에만 다른 버전 선택

    [스크린샷]

  10. 상태 검사(Health checks) 섹션에서 헬스 체크 설정을 구성합니다: 상태 검사 프로토콜

    1. 프로토콜: HTTP (기본값)

    상태 검사 경로

    1. 경로: / (기본값)
    2. 애플리케이션이 특정 경로에서 정상 응답을 반환하면 그 경로 입력 (예: /health, /api/health, /ping)
    3. 최대 1024자까지 허용

    (중요) 헬스 체크 경로를 애플리케이션에 맞게 설정하지 않으면, 정상 작동 중인 애플리케이션도 비정상으로 판정될 수 있습니다.
     

    Spring Boot (Java):
    기본: /actuator/health
    커스텀/간소화: /health, /healthz
    ASP.NET Core (.NET):
    기본: /healthz (구성 가능)
    Node.js (Express 등):
    관례적 사용: /health, /healthz, /ping
    Python (Flask/Django):
    관례적 사용: /health, /status
    Go:
    관례적 사용: /healthz, /ready
  11. 고급 상태 검사 설정 섹션 (선택사항)을 확인합니다:
     

    1. 항목기본값설명
      상태 검사 포트트래픽 포트트래픽 포트와 동일한 포트로 헬스 체크 수행
      비정상 임계값2회연속 2회 실패 시 비정상 표시
      제한시간5초응답 대기 최대 시간 (범위: 2~120초)
      간격30초헬스 체크 수행 주기 (범위: 5~300초)
      성공 코드200HTTP 200, 200-299, 200,201 등 입력 가능
  12. 속성(Attributes) 섹션 (선택사항):

    1. 태그: 대상 그룹을 분류 및 관리하기 위한 태그 추가 (선택사항)
    2. 예: Key: Environment, Value: Production
  13. 다음(Next) 버튼을 클릭합니다.

  14. 대상 등록(Register targets) 화면에서 트래픽을 수신할 EC2 인스턴스를 선택합니다.

    1. 사용 가능한 인스턴스 목록에서 등록하려는 EC2 인스턴스를 체크합니다.

    [스크린샷] (Notice: 여러 개의 EC2 인스턴스를 선택하면 ALB가 이들 사이에 트래픽을 분산합니다. 고가용성을 위해서는 최소 2개 이상의 인스턴스 등록을 권장합니다.)

    1. (선택사항) 개별 인스턴스마다 다른 포트로 등록하려면, 인스턴스를 추가할 때 포트(Port) 항목에 다른 값을 입력할 수 있습니다.
    2. 예: 같은 인스턴스를 포트 8080과 8081로 각각 등록하여 두 개의 애플리케이션에 요청 분산
  15. 아래에 보류 중인 것으로 포함을 클릭후 대상에 등록이 됐는지 확인합니다.

  16. 오른쪽 하단 다음을 클릭후 검토 후 대상 그룹 생성(Create target group) 버튼을 클릭합니다.

3. Application Load Balancer 생성

이제 실제 ALB를 생성하고 위에서 만든 Target Group과 연결합니다.

  1. AWS Console의 EC2 서비스에서 왼쪽 메뉴의 로드 밸런서(Load Balancers)를 클릭합니다.

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

  3. 로드 밸런서 유형 선택 화면에서 Application Load Balancer 아래의 생성(Create) 버튼을 클릭합니다.

기본구성을 설정합니다.

  1. 로드 밸런서 이름을 입력합니다:

    1. 예: my-alb
    2. 최대 32자, 하이픈 포함 가능하지만 시작/종료 불가
    3. AWS 계정 내에서 고유해야 함
  2. 체계(Scheme) 선택:

    1. 인터넷 경계(Internet-facing) 선택 (퍼블릭 ALB)
    2. 퍼블릭 IP 할당 및 인터넷 접근 가능
    3. 퍼블릭 서브넷 필요

     (중요) 생성 후 스키마는 변경 불가능합니다.

  3. 로드 밸런서 IP 주소 유형 선택:

    1. IPv4 (기본값): IPv4 주소만 사용
    2. 듀얼 스택: IPv4 및 IPv6 사용 가능
  4. 네트워크 매핑

    1. VPC 선택:

      1. 대상 EC2 인스턴스가 속한 VPC 선택
      2. 예: vpc-07740d61acf133bba (172.31.0.0/16)
    2. 가용 영역 및 서브넷 선택:

      1. 최소 2개 이상의 AZ 선택 필수
      2. 각 AZ마다 퍼블릭 Subnet 선택
      3. 대상 EC2가 속한 서브넷으로 선택
      4. 예: ap-northeast-2a, ap-northeast-2b

      (중요) ALB는 선택한 AZ에만 트래픽 라우팅하므로 고가용성을 위해 2개 이상의 AZ 선택이 필수입니다.
       

  5. 보안 그룹

    1. 보안 그룹 선택:
      1. 1단계에서 생성한 ALB용 보안 그룹 선택
  6. 리스너 및 라우팅

    1. 리스너 설정:

      1. 프로토콜: HTTP
      2. 포트: 80 (범위: 1~65535)
      3. 기본 작업: 대상 그룹으로 전달
    2. 대상 그룹 선택:

      1. 2단계에서 생성한 Target Group 선택 (예: my-app-targets)
      2. 가중치: 1 (기본값, 트래픽 분산 비율)

      (Notice: 프로덕션 환경에서는 HTTPS를 추가로 설정하고, HTTP → HTTPS 리다이렉트를 구성하는 것이 권장됩니다.)

    3. 리스너 태그 (선택사항):

      1. 리스너를 분류하기 위한 태그 추가 가능
      2. Key/Value 형식
  7. 로드 밸런서 태그 (선택사항):

    1. ALB를 분류/관리하기 위한 태그
    2. 예: Key: Environment, Value: Production
  8. 서비스 통합 및 검토

    1. 서비스 통합 :

      1. CloudFront + WAF: 성능, 가용성, 보안 최적화
      2. AWS WAF: 애플리케이션 레벨 보안 보호
      3. AWS Global Accelerator: 글로벌 로드 밸런싱
      4. 필요시 설정하고, 생성 후 추가 가능
  9. 검토 및 생성 섹션에서 입력한 정보를 확인합니다:

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

 

4. ALB 상태 확인 및 접근

ALB 상태 확인

  1. 로드 밸런서(Load Balancers) 메뉴로 이동합니다.

  2. 방금 생성한 ALB를 선택합니다. 상태가 활성(Active)으로 변경될 때까지 기다립니다 (약 1~2분 소요).

  3. ALB의 상세 정보에서 DNS 이름(DNS name)을 확인합니다. 
    예시: my-alb-1234567890.ap-northeast-2.elb.amazonaws.com

Target 상태 확인

  1. 생성한 ALB를 선택하고 대상 그룹(Target groups) 탭을 클릭합니다.

  2. 생성한 Target Group을 선택하고 대상(Targets) 탭을 확인합니다.

    • 상태가 정상(Healthy)으로 표시되는지 확인합니다.
    • 상태가 정상 대기 중(Draining) 또는 비정상(Unhealthy)이면 설정을 재확인합니다.

(중요) 모든 Target이 정상 상태가 되어야 ALB를 통해 트래픽이 정상 전달됩니다.

브라우저에서 접속 테스트

  1. 웹 브라우저를 열고 ALB의 DNS 이름을 입력합니다.

   예시 : 

http://my-alb-1234567890.ap-northeast-2.elb.amazonaws.com

  1. 대상 EC2 인스턴스에서 실행 중인 애플리케이션이 정상 응답하는지 확인합니다. 
    (Notice: 처음 접속 시 약 30초에서 1분 정도 시간이 소요될 수 있습니다. 이는 헬스 체크 주기 때문입니다.)

Trouble Shooting

Target이 비정상(Unhealthy) 상태입니다

원인:

  • 대상 EC2 인스턴스에서 애플리케이션이 실행 중이지 않습니다.
  • 보안 그룹 설정이 잘못되어 ALB에서 인스턴스로의 통신이 차단됩니다.
  • 헬스 체크 경로가 잘못되었습니다.
  • 인스턴스의 네트워크 연결이 끊어졌습니다.

해결 방법:

  1. 대상 EC2 인스턴스에 SSH로 접속하여 애플리케이션이 실행 중인지 확인합니다.

curl http://localhost:\[포트\]

예시:

curl http://localhost:8080

  1. 대상 EC2의 보안 그룹 인바운드 규칙을 확인합니다:
    • 애플리케이션 포트가 ALB 보안 그룹으로부터 허용되어 있는지 확인
    • ALB 보안 그룹의 ID를 정확히 입력했는지 확인
  2. Target Group의 헬스 체크 설정을 확인합니다:
    • 헬스 체크 경로가 애플리케이션에서 응답하는 경로인지 확인
    • 헬스 체크 프로토콜이 HTTP/HTTPS인지 확인
    • 포트 번호가 애플리케이션 포트와 일치하는지 확인
  3. EC2 인스턴스의 상태를 AWS Console에서 확인합니다:
    • 인스턴스 상태가 Running인지 확인
    • 인스턴스 상태 확인이 2/2 Passed인지 확인

ALB에 접속할 수 없습니다 (Connection timed out)

원인:

  • ALB의 보안 그룹에서 HTTP(80) 또는 HTTPS(443) 포트가 허용되지 않았습니다.
  • ALB가 아직 활성화되지 않았습니다.
  • 네트워크 연결 문제가 있습니다.

해결 방법:

  1. ALB의 보안 그룹에서 인바운드 규칙을 확인합니다:
    • HTTP(80) 포트가 0.0.0.0/0으로 허용되어 있는지 확인
    • HTTPS(443) 포트도 필요시 확인
  2. ALB의 상태를 확인합니다:
    • AWS Console의 로드 밸런서 메뉴에서 ALB 상태가 Active인지 확인
    • ALB 생성 후 충분한 시간(1~2분)이 경과했는지 확인
  3. DNS 이름이 정확한지 확인합니다:
    • ALB 상세 정보에서 DNS 이름을 복사하여 정확히 입력했는지 확인
    • 브라우저 캐시를 삭제하고 다시 접속해봅니다.

Target Group에 인스턴스를 등록할 수 없습니다

원인:

  • 선택한 인스턴스가 Target Group과 다른 VPC에 속합니다.
  • 인스턴스의 상태가 Running이 아닙니다.

해결 방법:

  1. Target Group과 대상 인스턴스가 같은 VPC에 속하는지 확인합니다.
  2. 대상 인스턴스의 상태가 Running 상태인지 AWS Console에서 확인합니다.
  3. Target Group을 수정하여 올바른 VPC가 선택되었는지 재확인합니다.

일부 Target만 비정상 상태이고 나머지는 정상입니다

원인:

  • 특정 인스턴스에서만 애플리케이션 오류가 발생했습니다.
  • 특정 인스턴스의 네트워크 연결이 불안정합니다.

해결 방법:

  1. 비정상 상태인 Target의 EC2 인스턴스를 선택하고 상세 정보를 확인합니다.
  2. 해당 인스턴스에 SSH 접속하여 애플리케이션 로그를 확인합니다.
  3. 애플리케이션을 재시작합니다

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