정지용
기술스택 목록
인프라

AWS ALB

프로젝트 1에서 사용했습니다. 각 프로젝트에서 어떤 역할로 썼는지 아래에 정리했습니다.

이 기술은 무엇인가요?

HTTP/HTTPS 트래픽을 여러 대상에 분산하는 계층 7 로드밸런서

AWS Application Load Balancer(ALB)는 OSI 7계층(애플리케이션 계층)에서 동작하는 관리형 로드밸런서로, URL 경로나 호스트 헤더 같은 요청 내용을 보고 트래픽을 여러 대상 그룹으로 라우팅한다. 서버를 직접 운영하며 로드밸런싱 로직과 헬스체크, TLS 종료를 구현하던 부담을 없애기 위해 만들어졌다. 컨테이너나 서버리스 환경에서 동적으로 늘어나고 줄어드는 백엔드 인스턴스를 대상 그룹에 자동으로 등록·해제하며 트래픽을 분배하는 데 주로 쓰인다.

이럴 때 사용합니다

  • 여러 마이크로서비스를 경로/도메인 기준으로 하나의 진입점에서 라우팅해야 할 때
  • 쿠버네티스나 오토스케일링 환경에서 동적으로 변하는 대상들을 자동으로 트래픽 분배 대상에 반영하고 싶을 때
  • TLS 인증서 관리와 헬스체크를 애플리케이션 코드가 아닌 인프라 계층에 위임하고 싶을 때

핵심 개념

Target Group
실제 트래픽을 받는 서버, 컨테이너, 람다 함수 등의 집합으로, ALB는 이 그룹 단위로 헬스체크와 라우팅을 수행한다.
Listener
ALB가 특정 포트와 프로토콜로 들어오는 요청을 감시하며, 규칙에 따라 어느 대상 그룹으로 보낼지 결정하는 설정이다.
Path/Host-based Routing
URL 경로나 도메인(호스트 헤더) 값을 기준으로 하나의 로드밸런서에서 여러 서비스로 트래픽을 분기하는 규칙 기반 라우팅 방식이다.
Health Check
대상 그룹의 각 인스턴스에 주기적으로 요청을 보내 정상 응답 여부를 확인하고, 비정상 대상은 트래픽 분배 대상에서 제외한다.
TLS Termination
ALB가 클라이언트와의 HTTPS 연결을 대신 처리하여 인증서 관리를 로드밸런서 단으로 일원화하고 백엔드 부담을 줄인다.

ALB 리스너와 경로 기반 라우팅 규칙 (Terraform)

ALB를 생성하고 80번 포트로 들어오는 요청을 헬스체크가 설정된 대상 그룹으로 전달하는 기본 구성이다.

HCL
resource "aws_lb" "main" {
  name               = "app-alb"
  load_balancer_type = "application"
  subnets            = var.public_subnet_ids
}

resource "aws_lb_listener" "http" {
  load_balancer_arn = aws_lb.main.arn
  port               = 80
  protocol           = "HTTP"

  default_action {
    type             = "forward"
    target_group_arn = aws_lb_target_group.api.arn
  }
}

resource "aws_lb_target_group" "api" {
  name     = "api-tg"
  port     = 8080
  protocol = "HTTP"
  vpc_id   = var.vpc_id

  health_check {
    path = "/health"
  }
}

처음 쓸 때 흔한 함정

  • L7 로드밸런서라 TCP/UDP 등 비HTTP 트래픽은 처리할 수 없고 NLB가 필요하다.
  • 쿠버네티스에서는 별도의 AWS Load Balancer Controller가 있어야 Ingress 리소스로 ALB를 자동 프로비저닝할 수 있다.
  • 헬스체크 경로나 임계값을 잘못 설정하면 정상 인스턴스가 계속 트래픽에서 제외될 수 있다.

위 개요는 기술 학습을 돕기 위해 자동 생성된 일반 설명입니다. 정확한 사양과 최신 정보는 공식 문서를 확인하세요.

프로젝트별 활용 방식

위 개념이 실제 프로젝트에서 어떻게 쓰였는지 보여줍니다.

함께 사용한 기술

위 프로젝트들에서 같이 쓰인 다른 기술입니다.