ELB는 EC2, 컨테이너, IP 주소 혹은 한 개 이상의 AZ(Availability Zones) 등의 다양한 타겟들에 들어오는 트래픽을 자동으로 분산시킨다. 그리고 등록된 타겟들의 health 체크를 모니터링하고, healthy 상태인 타겟들에만 트래픽을 라우팅한다. ELB는 시간이 지남에 따라 변화하는 유입 트래픽에 대한 로드 밸런서를 스케일링한다. 그리고 대량의 트래픽이 유입되더라도, 자동으로 스케일링을 할 수 있는 기능을 지원한다.
ELB(Elastic Load Balancing)은 한 가지의 종류만 있는 것이 아니다.
Application Load Balancer, Network Load Balancer, Gateway Load Balancer, Classic Load Balancer 이렇게 종류가 있다. 요구에 맞추어서 선택하면 된다.
로드 밸런서는 클라이언트에게 단 한 개의 컨택지점을 제공한다. 그런데 로드 밸런서는 여러 타겟들에 대해 유입되는 앱 트래픽을 분산시킨다. 그래서 이것이 앱의 가용성을 높이는 것이다. 그리고 로드 밸런서에는 한 개 이상의 리스너를 등록할 수 있다.
리스너는 설정해둔 포트나 프로토콜을 사용해서, 클라이언트로부터 오는 연결 요청을 확인한다. 그리고 리스너에 등록한 규칙들은 로드 밸런서가 이미 등록된 타겟들에 대한 요청을 어떻게 라우팅할 것인지 결정한다. 각각의 규칙은 우선순위, 한 개 이상의 액션, 한 개 이상의 조건들로 구성된다. 규칙의 조건들이 맞아떨어질 때, 그 액션들이 진행된다. 각각의 리스너에 대해서는 default 규칙을 정해두어야 하고, 선택적으로 추가 규칙들을 정의할 수 있다.

ALB(Application Load Balancer)는 OSI 계층에서 7계층인 애플리케이션 계층에서 작동한다. 로드 밸런서가 요청을 받고난 뒤, 리스너가 어떤 규칙을 적용해야 할지, 어떤 타겟 그룹으로부터 타겟을 선택해야 할지 등 우선순위에 따라 규칙을 평가한다. 트래픽의 내용(content)에 따라서 요청을 라우팅할 다른 리스너의 규칙을 적용할 수 있다. 라우팅은 각 타겟 그룹마다 독립적으로 실시되며, 하나의 타겟이 여러 타겟 그룹에 등록되어 있을 때도 그렇다.
라우팅 알고리즘은 타겟 그룹 레벨에서 설정할 수 있고, 기본 설정값은 라운드로빈이다.
계층별로 다른 로드 밸런서가 존재하는 이유는 계층별로 확인할 수 있는 정보가 다르기 때문이다. 아래의 내용을 보고 로드밸런싱을 할 수 있다.
계층이 높은 곳에 로드밸런서가 있으면 더 많은 정보를 가질 수 있기 때문에, 세부적인 로드밸런싱이 가능하다.
ALB vs NLB

AZ마다 하나의 ALB가 존재할 때, AZ마다 ALB 노드가 트래픽을 분산하면 전체 ec2 는 다른 트래픽을 받는 문제가 있다. 그래서 cross zone load balancing 기능을 사용해서, AZ를 구분하지 않고 트래픽을 분산시킨다. ALB의 경우 cross zone load balancing 이 기본값으로 설정되어 있다.
3번 과정에서 cross zone load balancing 이 적용되어, 골고루 분산된 트래픽을 처리할 수 있다.
여기서 내가 띄우는 서비스의 포트 번호를 선택해야 한다. 나는 8080 포트로 띄우기 때문에 HTTP 8080으로 세팅해준다.
로드밸런싱을 지금 세팅하는 이유는 트래픽 분산이 아니라 HTTPS 적용을 위해서이다.
호스팅 영역에 가서 레코드 생성을 해준다.
이 과정을 통해서 구매한 도메인으로 접속하면, ALB의 ip 주소로 접속하게 해준다.
끝