먼저 AWS 로드밸런서에 대해 알아보기 전에 로드밸런서에는 2가지 종류가 있습니다.
한가지는 L4 Load Balancer, 다른 하나는 L7 Load Balancer 입니다.
네트워크 계층 구조에서 L4에 해당하는 것은 Transport Layer로 IP와 Port를 로드밸런싱의 기준으로 봅니다.
반면 L7 계층은 Application Layer를 뜻하며 로드밸런싱시에 HTTP 헤더 등을 보고 결정할 수 있습니다.
최근에는 마이크로서비스를 많이 이용하게 되는데 이에 적절한 로드밸런서는 무엇일까요?
바로 L7 Load Balancer입니다.
예를 들어서 마이크로서비스 형태로 주문을 담당하는 서버 컨테이너와 결제를 담당하는 서버 컨테이너가 있다고 가정해봅시다.
Rest Api를 적용했을 경우 주문 관련 요청의 url은 .../order/... 의 형태일 것이고 결제 관련 요청의 url은 .../pay/... 이런 형태일 것입니다.
만약 L4 Load Balancer를 적용하게 되면 단순히 IP와 Port만을 보기 때문에 주문 요청이어도 결제 관련 서버 컨테이너로 로드밸런싱이 되버릴 수도 있기 때문에 L7 로드밸런서를 사용해야 합니다.
AWS상에서 L7 Load Balancer는 ALB(Application Load Balancer)로 명칭되어 있습니다.
ALB를 사용하기 위해서는 먼저 Target Group(대상 그룹)을 지정해주어야 합니다.
위에서 예를 든 주문과 결제 서버로 나눈 후에 로드밸런싱을 하게 된다면 아래와 같은 그림이 될 것입니다.
위처럼 설계를 하게되면 유저가 /order로 요청을 하는 경우 로드밸런서가 Target Group1에 요청을 전달할 것이고 또 해당 그룹에 인스턴스들에게 적절히 요청을 분산해줄 것입니다. (주문 요청이 많은 경우 주문 요청을 담당하는 인스턴스의 개수도 1개가 아닌 2개이상으로 늘려야 하므로 주문요청을 처리하는 Target Group에 인스턴스를 여러개로 늘리는 경우가 있기 때문입니다.)
AWS상에서 특정 url을 특정 Target Group으로 전달하는 요청은 아래 방법으로 손쉽게 할 수 있습니다.
1. 로드밸런서/아래 리스너 탭을 클릭하면 규칙이 있습니다. 규칙 보기/편집을 클릭합니다.
2. 빨간줄이 그어진 + 아이콘을 누른 뒤 IF에는 원하는 경로를 (예를 들어 /order) THEN에는 해당 url을 로드밸런서가 받았을 때 어떤 Target Group으로 전달해줄지를 선택하면 됩니다.
'AWS' 카테고리의 다른 글
AWS Lambda 개념 (0) | 2022.07.03 |
---|---|
AWS KMS (0) | 2022.06.29 |
AWS Fargate을 활용한 배포 흐름#1 (0) | 2022.06.27 |
AWS CloudFront (0) | 2022.06.27 |
[AWS VPC] Private Subnet에서 외부 접속을 하는 원리 (0) | 2022.06.21 |