들어가기에 앞서

최근에 BOAZ 동아리에서 Oauto2와 goole calender를 이용해서 웹 서비스를 만드는 프로젝트를 진행하는데(계획에 전혀없던 리액트까지 써보는중🥲) 전반적인 인프라 구성을 내가 맡았다. 이때, 도메인을 AWS EC2에 등록하는 과정에서 로드밸런서를 사용하게 되었다. ALB 로드 밸런서에 SSL 인증을 적용하면 각 Ec2 인스턴스 마다 SSL을 처리하지 않아도 HTTPS 트래픽을 처리할 수 있기에 반드시 필요한 부분이었다. 그 과정에서 로드 밸런서를 단순히 “그냥 부하분산 아님?”으로 알고 있던 나에게 개념정리가 꼭 필요한 부분이라 이번 글을 작성하게 되었다. 그럼 시작해보자 시작해보자

Core

기본적으로 로드밸런서는 Scale out에서 사용된다. 서비스는 성장하는데 늘어나는 트래픽을 서버가 감당할 수 없을때 서버를 증설하는데 이 과정에서 각 서버에 걸리는 부하를 고르게 나누기 위해서는 로드밸런싱이 필수적으로 동반되어야 한다.

즉 다양한 곳에서 들어오는 트래픽을 여러 서버에 분산시켜 하나의 서버에 부담이 가지 않도록 하는 것이 로드밸런싱의 주요 목적이며, 이를 통해 서버의 성능과 안정성을 높일 수 있다.

로드밸런싱의 이점

가용성

서버에 장애가 발생하거나 업데이트를 해야 하는 상황에 서버가 가동 중지된다면 애플리케이션은 사용할 수 없다. 로드밸런서는 이러한 문제를 자동으로 감지하고 사용가능한 서버로 리다이렉션하는 관리자 같은 역할을 한다.

확장성

한 서버에 트래픽이 몰리는 병목현상을 방지하고 트래픽을 예측하여 다른 서버를 추가하거나 제거한다.

보안

크롤링이나 악성 프로그램 등 공격자가 서버 장애를 일으키는 수백만 개의 동시 요청으로 애플리케이션 서버를 가득 채우는 공격을 방지하거나 최소화한다.

성능

응답 시간을 늘리고 네트워크 지연 시간을 줄여 애플리케이션 성능을 향상합니다.

로드밸런싱 알고리즘

로드벨런싱에도 여러 알고즘이 존재하는데 가장 흔한 것이 라운드 로빈, 가중치 분배, 최소연결 방식이 있다. 다만 서로 다른 적합한 케이스가 존재하기 때문에 사용환경에 따라 적절한 로드 밸런서를 선택해야 한다.

먼저 정적 로드 밸런싱에 대해서 알아보자

라운드 로빈 방식(Round Robin Method)

포커 칠때 딜러가 카드 돌리는 것을 생각하면 된다. 딜러가 카드를 왼쪽 사람부터 차례차례 카드를 건내주고 마지막 사람까지 다 주면 다시 처음 줬단 사람으로 되돌아가 주는 것을 반복하는데 해당 방식도 서버 A, B, C 가 있다면 A → B → C → A 순서대로 분배한다. 보통 모든 서버가 같은 양일때 이렇게 한다.

가중치 기반 라운드 로빈 방식(Weighted Round Robin Method)

여러 서버가 같은 사양이 아니고, 특정 서버의 스펙이 더 좋은 경우 이 방식을 사용한다. 5살짜리와 20살짜리가 밥을 먹는데 당연히 20살 짜리에게 밥을 더 많이 주는 것처럼 그릇 큰놈한테 트래픽 처리량 몰아주는 방식이다.

IP 해시 방식(IP Hash Method)

여기서는 수학적 계산인 해싱이라는 기법이 들어가는데 사용자 ip를 기준으로 해싱하여 사용자가 항상 동일한 서버로 연결되는 것을 보장한다. 우리 집 와이파이로 어떤 서비스에 접속하면 우리집 와이파이는 그 서비스의 항상 같은 서버로 연결된다.

다음은 동적 로드 밸런싱에 대해 알아보자

최소 연결 방법(Least Connection Method)

모든 서버가 같은 스펙을 지닌것을 가정하고 적용하는 방식으로 한마디로 ‘저울’과 같다. 연결이 적은 서버를 확인하고 그 서버로 트래픽을 분할한다. 저울이 평행할 수 있도록!

최소 응답 시간 방법(Least Response Time Method)

이 방식은 개발자가 아닌 사용자가 얼마나 더 만족할까를 고민한 흔적이 보이는 로드밸런싱이다. 즉, 서버의 현재 연결상태 그리고 응답시간을 고려해서 가장 짧은 응답시간을 보내는 서버로 트래픽을 할당한다. 즉 한 서버에 여유가 없더라도 조건에 부합한다면 그 서버에 트래픽을 할당한다.

AWS 로드 밸런서 유형

솔직히 한번에 이해하는건 어렵기 때문에 경찰에 비유해서 설명해 보고자 한다.

ALB(Application Load Balancer)

먼저 ALB는 HTTP/HTTPS 기반으로 요청을 관리하는 즉, 경찰서 들어가면 앞에 앉은 말단 경찰이다. 그들은 시민과 직접 대화하기에 세심하게 신고인의 요구를 파악하고 관련 부서로 연결을 해준다.

  • 예를 들어 “사기를 당했어요..” 라고 하면 사이버 범죄일까요? 아니면 금융, 피싱? 이렇게 물어본 후 각 상황에 맞는 부서에 연결 시켜 준다.
  • 즉, ALB는 HTTP 요청을 매우 세세하게 분석해서 그 요청에 맞는 서버로 트래픽을 보낸다. 사용자마다 다른 페이지나 기능으로 연결할때 매우 유용하다.

NLB(Network Load Balancer)

NLB는 TCP/UDP 기반으로 트래픽을 처리하는 로드 밸런서로 교차로에서 차들이 오갈 때 신호를 보고 빠르게 교통 흐름을 관리하는 교통경찰과 비슷하다.

  • 교통경찰들은 이 차가 무슨 차인지 어떤 목적을 가지고 가는 차인지 관심 없고 그냥 신호가 맞으면 빠르게 통과시킨다.
  • 이처럼 세부적인 정보보다는 IP 주소나 TCP 연결을 기반으로 트래픽을 빠르게 처리하고, 고속 통신이 필요한 비스에 적합하다.

ELB(Elastic Load Balancer)

ELB는 기본적인 트래픽 관리 기능만 제공하는 비교적 간단한 녀석이다. 예를들면 단순히 경찰청 사이트라고 생각하면 되겠다.

  • 인터넷 사기 당했는데 어디로 갈까요 라고 물어보면 단순히 사기 담당 부서 위치만 알려주고 끝내는 느낌이다.
  • 즉, 요즘은 ALB나 NLB처럼 더 세부적이거나 빠른 트래픽 처리를 위한 로드 밸런서가 더 많이 사용한다.

따라서..

  • ALB: 웹 애플리케이션에서 사용자마다 맞춤형 응답이 필요한 경우.
  • NLB: 빠른 네트워크 트래픽 처리, 실시간 데이터 전송이 필요한 경우.
  • ELB: 간단한 트래픽 관리가 필요한 경우, 예전부터 사용된 안정적인 방식.

이렇게 로드 밸런서의 개념과 AWS에 있는 3가지 로드 밸런서에 대해 알아보았다. 세월이 지나면 분명 까먹을 것이 뻔하기 때문에 최대한 쉽게 이해하려고 노력해봤다 ㅎ. 로드 밸런서 하면 뭐다? 경찰이다~~ 하면 이 내용들이 머리속에서 잘 생각나지 않을까 한다.