Post

로드밸런서 알아보기 (AWS로 시작하는 인프라 구축의 정석)

본 포스트는 AWS로 시작하는 인프라 구축의 정석 책을 활용한 스터디 기록입니다.
(CHAPTER 7 로드 밸런서 준비하기)

서비스 사용자가 늘어나면?

서비스를 운영할 때 서버는 몇대나 있어야 할까요? 사용자가 많이 없는 경우에는 1대의 서버만으로도 요청을 처리할 수 있지만 사용자가 늘어나면 늘어날수록 요청을 깔끔하게 처리하기 어려워지며 서버가 터지는 상황까지 발생할 수 있습니다.

이럴 때에는 스케일 아웃 혹은 스케일 업을 통해 인프라를 확장할 필요가 있습니다.

(1) 스케일업 (scale-up)

스케일업은 현재 사용 중인 서버의 성능을 향상시키는 것입니다. 예를 들어 서버에 디스크를 추가하거나 CPU나 메모리를 추가하는 것을 의미하죠! (수직 스케일링 - vertical scaling 이라고도 부릅니다)

(2) 스케일아웃 (scale-out)

스케일아웃은 현재 사용 중인 서버의 개수를 증가시키는 것입니다. 서버의 성능은 그대로 가져가고 요청을 처리할 수 있는 서버의 수를 증가시키는 방법입니다. (수평 스케일링 - horizontal scaling 이라고도 부릅니다)

로드밸런서

(1) 로드밸런서란?

로드 밸런서는 스케일아웃을 수행하는 방법 중 하나입니다.

(2) 로드밸런서의 주요 역할

  1. 요청 분산 인터넷으로부터 들어온 요청을 여러 웹 서버에 균등하게 분산시켜 줍니다. 앞에서 말한 스케일 아웃 기능이죠.

  2. SSL 처리 로드 밸런서를 사용하면 송수신하는 데이터를 암호화하는 SSL 처리가 가능합니다.
    인터넷으로부터의 접근 중 안전하게 정보를 보내기 위해 HTTPS라는 프로토콜로 통신을 할 때가 있는데 이 통신에서 SSL을 사용하게 됩니다. https 를 사용하면 브라우저와 서비스 사이를 흐르는 데이터는 암호화되며 이때 암호 관련 처리를 빠르게 수행하는 전용 시스템을 로드밸런서가 제공해주어 웹 서버에서 암호를 처리하는 것보다 빠른 속도로 처리할 수 있어요.

  3. 부정 요청 대응 로드 밸런서 없이 웹 서버가 직접 브라우저와 데이터를 교환하는 상태라면? 예상치 못한 작동을 일으키는 부정한 요청에 대한 처리는 웹 서버에 과부화를 일으킬 수 있으며 그로 인해 웹 서버 자체가 다운될 가능성이 있습니다.
    로드 밸런서는 이러한 부정 접근에 대응하는 전용 시스템을 제공하여 더 효율적으로 부정한 접근에 대응할 수 있습니다.

(3) AWS에서 제공하는 로드 밸런서 종류

AWS에서는 ELB(Elastic Load Balancing)이라는 서비스로 로드 밸런서를 제공합니다.

  1. Application Load Balancer (ALB)
    ALB는 HTTP나 HTTPS 를 이용한 접근을 분산하는데 최적화된 로드 밸런서 입니다. SSL 처리를 수행하거나 URL 패턴과 같은 복잡한 조건에서 분산 대상자를 바꾸는 등 고도의 기능을 제공합니다.

  2. Network Load Balancer
    기본적인 분산처리 기능만을 제공하지만 다양한 통신 프로토콜에 대응하는 로드 밸런서입니다.

  3. Classic Load Balancer
    앞선 두개의 로드 밸런서가 등장하기 전에 쓰이던 로드 밸런서이며 기존 AWS 시스템을 사용해야 하는 특별한 경우를 제외하고는 거의 사용되지 않습니다.

(4) 요청 라우팅

로드 밸런서를 사용할 때에는 외부에 공개한 프로토콜과 포트 번호의 조합을 내부의 웹 서버가 받는 프로토콜과 포트 번호로 변환하는 기능을 제공하는데, 이를 요청 라우팅(request routing) 이라고 합니다.

예를 들어 HTTPS 80 포트로 외부 요청을 받고 내부 웹 서버에 전달할 때에는 HTTP 8080 으로 변환하여 전달할 수 있도록 설정해주는 것이죠! (HTTPS를 HTTP로 변환하는 이유는 HTTPS를 이용한 암호 및 복호 처리는 웹 서버가 아니라 로드 밸런서가 수행하기 때문입니다.)

AWS에서 ALB 생성하기

(1) 가용 영역 설정

요청을 분산할 가용 영역을 선택하고 가용 영역에 생성한 Public Subnet을 선택해 줍니다. 반드시 public subnet에 연결해주어야 합니다.

(2) 보안 그룹 설정

보안 그룹은 vpc의 default 보안 그룹과 http/https 접근을 받을 수 있는 보안 그룹을 설정해 줍니다.

(3) 대상 그룹 생성

로드 밸런서를 적용할 대상 그룹을 만들어봅시다!

여기서 포트를 설정해줍니다. 이미지와 같이 설정해준다면 로드밸런서를 통해 들어온 요청은 웹 서버의 8080 포트로 들어가게 됩니다.

상태 검사를 할 경로를 작성해 줍니다. 로드 밸런서는 해당 URL로 요청을 보내 웹 서버의 상태를 주기적으로 검사합니다.

실제로 트래픽을 분산할 인스턴스들을 선택하여 로드 밸런서의 대상으로 등록해 줍니다!

(4) 리스너 및 라우팅

앞서 생성한 대상 그룹을 ‘리스너 및 라우팅’ 메뉴에서 설정해 줍니다. 이렇게 설정해주면 HTTP 80 포트로 들어온 요청은 설정한 대상 그룹으로 분산되게 됩니다!

이렇게 하면 ALB를 생성할 수 있으며 생성한 로드 밸런서의 DNS 이름으로 접근이 가능합니다!


참고
https://aws.amazon.com/ko/what-is/load-balancing/
https://tecoble.techcourse.co.kr/post/2021-10-12-scale-up-scale-out/

This post is licensed under CC BY 4.0 by the author.

Comments