기술

내 웹서버, 이중화는 했는데 왜 불안할까? (ALB 구성 가이드)

스타스토리. 2025. 6. 24. 21:32
반응형
핵심 요약: 본 문서는 AWS의 Elastic Load Balancing(ELB), 특히 Application Load Balancer(ALB)의 핵심 개념을 설명한다. 다중 가용 영역에 배포된 EC2 인스턴스 간의 트래픽을 분산시키기 위해 ALB, 리스너, 대상 그룹을 생성하고 구성하는 전 과정을 안내하며, 백엔드 서버의 보안을 강화하는 필수 설정까지 다룬다.

지금까지 우리는 두 개의 다른 가용 영역에 웹 서버 인스턴스를 각각 배포하여 장애에 대비한 기반을 마련하였다. 하지만 사용자가 두 서버의 IP 주소를 모두 알고 직접 접속해야 한다면, 이는 진정한 고가용성 아키텍처라 할 수 없다. AWS Elastic Load Balancing(ELB)은 이러한 문제를 해결하는 '지능형 교통 관제사'이다. ELB는 단일 진입점(DNS 이름)을 통해 들어오는 애플리케이션 트래픽을 여러 대상(EC2 인스턴스, 컨테이너 등)에 자동으로 분산시켜 애플리케이션의 내결함성과 가용성을 극대화한다.

1. Application Load Balancer(ALB)의 이해

ELB는 여러 유형을 제공하며, 본 실습에서는 HTTP/HTTPS와 같은 L7 계층에서 동작하여 유연한 라우팅 규칙을 제공하는 Application Load Balancer(ALB)를 사용한다. ALB는 세 가지 핵심 구성 요소로 이루어진다.

  • 리스너(Listener): 설정된 프로토콜(예: HTTP) 및 포트(예: 80)로 들어오는 클라이언트의 연결 요청을 수신하는 프로세스이다. 리스너는 수신한 요청을 규칙에 따라 지정된 대상 그룹으로 전달하는 역할을 한다.
  • 대상 그룹(Target Group): 로드 밸런서로부터 트래픽을 수신할 대상(예: EC2 인스턴스)들의 논리적인 그룹이다. 동일한 역할을 수행하는 여러 인스턴스를 하나의 대상 그룹으로 묶어 관리한다.
  • 헬스 체크(Health Check): 대상 그룹에 등록된 각 대상의 상태를 주기적으로 확인하는 기능이다. ALB는 헬스 체크를 통해 'healthy' 상태로 확인된 대상에게만 트래픽을 라우팅하여, 장애가 발생한 인스턴스를 자동으로 격리한다.

2단계: Application Load Balancer 생성 실습

이제 두 웹 서버(webserver 1, webserver 2)의 트래픽을 분산시킬 ALB를 생성하는 과정을 진행한다.

2.1. 로드 밸런서 기본 구성

  • EC2 콘솔 좌측 메뉴 하단의 '로드 밸런싱 > 로드 밸런서'로 이동 후, '로드 밸런서 생성'을 클릭한다.
  • 'Application Load Balancer' 유형에서 '생성'을 클릭한다.
  • '기본 구성' 섹션에서 아래와 같이 입력한다.
- 로드 밸런서 이름: web-alb
- 체계: 인터넷 경계(Internet-facing)
  • '네트워크 매핑' 섹션에서 VPC-Lab을 선택하고, 매핑 항목에서 public subnet Apublic subnet C를 모두 체크한다. 이는 ALB가 두 가용 영역에 걸쳐 트래픽을 분산시키도록 하는 핵심 설정이다.

2.2. 보안 그룹 및 리스너 설정

  • '보안 그룹' 섹션에서 '새 보안 그룹 생성' 링크를 클릭하여 새 탭에서 보안 그룹 생성 페이지를 연다.
  • 새 보안 그룹을 아래와 같이 생성한다. 이 보안 그룹은 외부 인터넷에서 ALB로 들어오는 웹 트래픽을 허용하는 역할을 한다.
    • 이름: webalb-sg
    • 설명: Security group for web ALB
    • 인바운드 규칙: 유형 HTTP, 소스 위치 무관(0.0.0.0/0)
  • 다시 ALB 생성 탭으로 돌아와, 방금 생성한 webalb-sg를 선택한다. (새로고침 버튼 클릭 필요)
  • '리스너 및 라우팅' 섹션에서 프로토콜이 HTTP, 포트가 80으로 설정되어 있는지 확인한다.

2.3. 대상 그룹 생성 및 등록

  • '기본 작업' 항목에서 '대상 그룹 생성' 링크를 클릭한다.
  • '대상 유형'은 '인스턴스'를 선택하고, 대상 그룹 이름을 webserver-tg로 지정한 후 '다음'을 클릭한다.
  • '사용 가능한 인스턴스' 목록에서 webserver 1webserver 2를 모두 체크하고, '보류 중인 것으로 포함' 버튼을 눌러 등록한다.
  • '대상 그룹 생성'을 클릭하여 완료한 후, 다시 ALB 생성 탭으로 돌아와 방금 생성한 webserver-tg를 선택한다.
  • 모든 설정을 검토한 후, '로드 밸런서 생성' 버튼을 클릭한다.

3단계: 백엔드 보안 강화 (필수)

현재 아키텍처는 사용자가 ALB를 우회하여 EC2 인스턴스의 공인 IP로 직접 접속할 수 있는 보안 취약점이 있다. 모든 웹 트래픽이 반드시 ALB를 거치도록 강제하기 위해, EC2 인스턴스의 보안 그룹(webserver-sg) 설정을 변경해야 한다.

📌 보안 모범 사례: 소스로 보안 그룹 지정하기
1. EC2 콘솔의 '보안 그룹' 메뉴에서 webserver-sg를 선택하고 '인바운드 규칙 편집'을 클릭한다.
2. 기존에 있던 HTTP(포트 80) 규칙을 삭제한다.
3. '규칙 추가'를 눌러 새로운 HTTP 규칙을 생성한다.
4. '소스' 항목에서 '사용자 지정'을 선택하고, 검색창에 webalb-sg를 입력하여 ALB의 보안 그룹을 선택한다.
5. 규칙을 저장한다. 이제 webserver-sg는 오직 webalb-sg(즉, 우리의 ALB)로부터 오는 HTTP 트래픽만 허용하게 되어 보안이 크게 강화된다.

4단계: ALB 동작 확인

로드 밸런서 목록에서 web-alb의 상태가 'provisioning'에서 'active'로 변경될 때까지 기다린다. 완료되면, web-alb를 선택하고 '세부 정보' 탭의 'DNS 이름'을 복사한다. 이 주소를 웹 브라우저에 붙여넣고 접속한다.

웹 페이지가 정상적으로 표시되면, 새로고침을 여러 번 반복해 본다. 페이지에 표시되는 인스턴스 ID 또는 IP 주소가 webserver 1webserver 2의 정보로 번갈아 나타나는 것을 확인할 수 있다. 이는 ALB가 라운드 로빈(Round Robin) 방식으로 트래픽을 두 인스턴스에 고르게 분산시키고 있음을 의미한다.

결론

이번 과정을 통해 Application Load Balancer를 성공적으로 구성하고, 다중 가용 영역에 분산된 웹 서버들로 트래픽을 분산시키는 고가용성 아키텍처를 완성하였다. 특히 백엔드 보안 그룹을 수정하여 오직 ALB를 통해서만 서버에 접근하도록 제한함으로써, 인프라의 보안 수준을 한 단계 끌어올렸다.

ALB는 단순한 트래픽 분산을 넘어 헬스 체크를 통한 자동 장애 조치, SSL/TLS 종료, 경로 기반 라우팅 등 다양한 고급 기능을 제공한다. 이 아키텍처는 이제 실제 프로덕션 환경에서 안정적으로 서비스를 제공할 수 있는 견고한 토대가 된다.

반응형