# ec2 alb 사용법

# Application Load Balancer 설정 가이드

Application Load Balancer(ALB)는 OSI 7계층의 애플리케이션 레벨에서 트래픽을 분산하는 로드 밸런서입니다. ECS 서비스와 연결하여 Next.js 애플리케이션을 호스팅할 수 있습니다.

# ALB 개요

Application Load Balancer(ALB)는 OSI 7계층(애플리케이션 레벨)에서 작동하는 로드 밸런서입니다. HTTP/HTTPS 트래픽을 여러 대상(ECS 태스크, EC2 인스턴스 등)에 분산시킵니다.

# ECS에서 Next.js 호스팅을 위해 ALB가 필요한 이유

# 배경지식: 컨테이너 기반 아키텍처의 특성

# 1. ECS 태스크의 동적 특성

문제점:

  • ECS는 컨테이너를 동적으로 생성하고 제거합니다
  • 스케일 아웃/인 시 태스크의 IP 주소가 계속 변경됩니다
  • 태스크가 재시작되면 새로운 IP 주소를 받습니다
  • 사용자가 직접 태스크의 IP 주소로 접근할 수 없습니다

해결책:

  • ALB는 고정된 DNS 이름을 제공합니다
  • ALB가 태스크의 IP 주소 변경을 추적하고 관리합니다
  • 사용자는 ALB의 DNS 이름으로만 접근하면 됩니다

# 2. 고가용성 및 로드 밸런싱

문제점:

  • 단일 태스크에 모든 트래픽이 몰리면 과부하 발생
  • 태스크가 실패하면 서비스 중단
  • 트래픽 증가 시 단일 인스턴스로는 처리 불가

해결책:

  • ALB가 여러 태스크에 트래픽을 자동 분산
  • 하나의 태스크가 실패해도 다른 태스크가 요청 처리
  • 트래픽 증가 시 자동으로 여러 태스크에 분산

# 3. 헬스 체크 및 자동 복구

문제점:

  • 태스크가 실행 중이지만 애플리케이션이 응답하지 않을 수 있음
  • 수동으로 문제를 감지하고 복구하는 것은 비효율적

해결책:

  • ALB가 주기적으로 헬스 체크를 수행
  • 비정상 태스크를 자동으로 감지하고 트래픽 라우팅에서 제외
  • 정상 태스크만 트래픽을 받도록 보장

# 4. SSL/TLS 종료

문제점:

  • 각 태스크에서 SSL 인증서를 관리하는 것은 복잡함
  • 인증서 갱신 시 모든 태스크를 업데이트해야 함

해결책:

  • ALB에서 SSL/TLS 종료 처리
  • ACM(Amazon Certificate Manager)과 통합하여 인증서 자동 관리
  • 태스크는 HTTP로 통신하여 단순화

# 5. 경로 기반 라우팅

문제점:

  • 여러 서비스를 하나의 도메인으로 제공하고 싶을 때
  • 마이크로서비스 아키텍처에서 각 서비스를 다른 경로로 라우팅

해결책:

  • ALB의 경로 기반 라우팅 규칙 사용
  • 예: /api/* → API 서비스, /admin/* → 관리자 서비스

# ECS + ALB 아키텍처 흐름

사용자 요청
    ↓
CloudFront (CDN)
    ↓
ALB (Application Load Balancer)
    ├─ 헬스 체크 수행
    ├─ SSL/TLS 종료
    └─ 트래픽 분산
    ↓
대상 그룹 (Target Group)
    ├─ 태스크 1 (10.0.1.100:8080) ✓ 정상
    ├─ 태스크 2 (10.0.1.101:8080) ✓ 정상
    └─ 태스크 3 (10.0.1.102:8080) ✗ 비정상 (트래픽 제외)
    ↓
ECS 태스크 (Next.js 애플리케이션)

# ALB 기본 구성

# 1. 로드 밸런서 설정

로드 밸런서 이름

  • AWS 계정 내에서 고유해야 함
  • 생성 후 변경 불가
  • 예시: pet-app-test-alb
  • 하이픈 포함 최대 32자, 하이픈으로 시작/끝나면 안 됨

스키마

  • 인터넷 경계: 퍼블릭 IP, 퍼블릭 서브넷 필요
  • 내부: 프라이빗 IP, VPC 내부 트래픽만 처리

IP 주소 유형

  • IPv4: IPv4 주소만
  • 듀얼 스택: IPv4 및 IPv6 주소
  • 퍼블릭 IPv4가 없는 듀얼 스택: 퍼블릭 IPv6 + 프라이빗 IPv4/IPv6

# 2. 네트워크 매핑

VPC 선택

  • 로드 밸런서가 존재할 VPC 선택
  • 대상 그룹의 VPC와 일치해야 함

가용 영역 및 서브넷

  • 최소 2개 이상의 가용 영역 선택 필수
  • 각 가용 영역마다 서브넷 선택
  • 예: ap-northeast-2a, ap-northeast-2c

고가용성 보장:

  • 하나의 가용 영역에 장애가 발생해도 다른 가용 영역에서 서비스 계속

# 3. 보안 그룹

역할:

  • 로드 밸런서에 대한 인바운드/아웃바운드 트래픽 제어
  • 방화벽 규칙 세트

설정:

  • 최대 5개의 보안 그룹 선택 가능
  • 기본 보안 그룹 또는 커스텀 보안 그룹 사용

필수 규칙:

  • 인바운드: HTTP(80), HTTPS(443) 허용
  • 아웃바운드: 대상 그룹으로의 트래픽 허용

# 4. 리스너 및 라우팅

리스너 설정

  • 프로토콜: HTTP(80) 또는 HTTPS(443)
  • 포트: 1-65535

기본 작업

  • 다른 규칙이 적용되지 않을 때 사용되는 기본 동작
  • 대상 그룹으로 전달: 트래픽을 대상 그룹으로 라우팅
  • URL로 리다이렉션: 다른 URL로 리다이렉트
  • 고정 응답 반환: 고정된 응답 반환

대상 그룹 선택

  • 트래픽을 라우팅할 대상 그룹 선택
  • 가중치 기반 라우팅 가능 (0-100%)

# 대상 그룹 생성

# 1. 기본 설정

대상 유형 (변경 불가)

  • 인스턴스: EC2 인스턴스
  • IP 주소: VPC 및 온프레미스 리소스
  • Lambda 함수: Lambda 함수 (ALB만)
  • Application Load Balancer: 다른 ALB (NLB만)

대상 그룹 이름

  • AWS 계정당 리전별로 고유
  • 예시: pet-app-test-tg
  • 허용 문자: a-z, A-Z, 0-9, 하이픈(-)
  • 하이픈으로 시작/끝나면 안 됨
  • 최대 32자

# 2. 프로토콜 및 포트

프로토콜

  • HTTP 또는 HTTPS
  • ALB와 대상 간의 통신 프로토콜

포트

  • 대상이 트래픽을 수신하는 포트
  • 예: 8080 (Next.js 애플리케이션 포트)
  • 등록 시 개별 대상에 대해 재정의 가능

IP 주소 유형

  • IPv4 또는 IPv6
  • 선택한 유형의 대상만 등록 가능

# 3. VPC 선택

중요:

  • 로드 밸런서와 동일한 VPC 선택
  • 대상 그룹의 VPC는 생성 후 변경 불가

예시:

  • VPC: vpc-0d5f1feb55a16989b (vpc-pet)
  • CIDR: 10.0.0.0/16

# 4. 프로토콜 버전

  • HTTP1: HTTP/1.1 사용
  • HTTP2: HTTP/2 사용 (성능 향상)
  • gRPC: gRPC 프로토콜 지원

# 5. 상태 검사 (Health Check)

상태 검사 프로토콜

  • HTTP 또는 HTTPS

상태 검사 경로

  • 기본: / (루트 경로)
  • 커스텀 경로 지정 가능 (최대 1024자)
  • 예: /health, /api/health

고급 설정

상태 검사 포트

  • 기본: 트래픽 포트와 동일
  • 재정의 가능: 다른 포트 지정

정상 임계값

  • 비정상 → 정상으로 간주하기 위한 연속 성공 횟수
  • 기본: 2회 (2-10 범위)

비정상 임계값

  • 정상 → 비정상으로 간주하기 위한 연속 실패 횟수
  • 기본: 2회 (2-10 범위)

제한 시간

  • 상태 검사 실패로 간주하는 응답 대기 시간
  • 기본: 5초 (2-120초)

간격

  • 상태 검사 사이의 시간
  • 기본: 30초 (5-300초)

성공 코드

  • 성공으로 간주하는 HTTP 상태 코드
  • 기본: 200
  • 범위 지정 가능: 200-299
  • 여러 값 지정 가능: 200,202

# ECS와 ALB 연결

# 1. ECS 서비스 생성 시 ALB 연결

ECS 서비스 설정:

  • 로드 밸런서 타입: Application Load Balancer 선택
  • 로드 밸런서: 생성한 ALB 선택
  • 대상 그룹: 생성한 대상 그룹 선택
  • 컨테이너 이름 및 포트: Next.js 애플리케이션이 리스닝하는 포트 (예: 8080)

# 2. 자동 등록

ECS의 자동 등록 기능:

  • 새 태스크가 시작되면 자동으로 대상 그룹에 등록
  • 태스크가 종료되면 자동으로 대상 그룹에서 제거
  • 수동 작업 불필요

# 3. 헬스 체크 연동

ECS 태스크 헬스 체크:

  • ALB의 헬스 체크 결과를 ECS가 모니터링
  • 비정상 태스크는 자동으로 재시작
  • 서비스 안정성 향상

# IAM 권한 설정

# ECS 자동 배포를 위한 권한

ECS 서비스가 ALB와 대상 그룹을 자동으로 관리하려면 적절한 IAM 권한이 필요합니다:

필요한 권한:

  • elasticloadbalancing:RegisterTargets
  • elasticloadbalancing:DeregisterTargets
  • elasticloadbalancing:DescribeTargetHealth
  • elasticloadbalancing:DescribeLoadBalancers

ECS 작업 실행 역할에 권한 추가:

  1. IAM 콘솔 접속
  2. ECS 작업 실행 역할 선택
  3. 권한 추가 → AWS 관리형 정책 또는 인라인 정책 추가

# 참고사항

  • ALB는 리전별로 생성되며, 리전 간 이동 불가
  • 대상 그룹의 VPC는 생성 후 변경 불가
  • 대상 유형은 생성 후 변경 불가
  • ALB는 시간당 요금과 데이터 처리량에 따라 과금됩니다
  • CloudFront와 연동하여 전 세계 사용자에게 빠른 콘텐츠 전달 가능

# 빠른 시작 팁

기본 설정으로 시작하기:

  • 내부(프라이빗) VPC가 필요하지 않은 경우, 대부분의 설정을 기본값으로 사용해도 됩니다
  • 인터넷 경계 스키마, IPv4 주소 유형, 기본 보안 그룹 등 기본값으로 빠르게 시작 가능
  • 필요에 따라 나중에 고급 설정(경로 기반 라우팅, SSL/TLS 등)을 추가할 수 있습니다
#aws
노경환
이 글이 도움이 되셨다면! 깃헙 스타 부탁드립니다 😊😄
최근변경일: 12/30/2025, 2:40:23 AM