[로드 밸런싱] Load Balancing

DevelopHeo·2025년 3월 9일
post-thumbnail

📙 로드 밸런싱

✏️ 로드 밸런싱이란?

  1. 로드밸런싱 (Load Balancing) 은 '부하분산'이라고도 하며 해석 그대로 일을 밸런스 있게 맞추는 기능입니다.
  2. 로드 밸런싱(Load Balancing)은 여러 서버에 네트워크 트래픽을 균등하게 분산하여 성능을 최적화하고, 가용성을 높이며, 장애 발생 시 서비스 중단을 방지하는 기술입니다. 웹 서비스, 데이터베이스, 애플리케이션 서버 등 다양한 환경에서 사용됩니다.

✏️ 적용 예시
모든 사람들이 12월 31일 23시 59분 59초에 메신저로 친구들을 포함한 지인들에게 새해 인사를 한다고 가정해봅시다.

한낱 한시에 메신저를 보내면 한꺼번에 많은 트래픽이 몰리게 되고 서버는 그 트래픽을 감당해내기가 어려워 부하를 받게 됩니다.

이를 방지하기 위해 우리는 동일한 서버를 여러 대 구비해놓고 트래픽을 분산해서 처리하게 됩니다.

그러나, 단순히 여러대의 서버를 구비해 놓는다고 해서 모든 서버에 적절하게 트래픽을 분산시킬 수 있는 것은 아닙니다.

여러대의 서버 중 트래픽이 몰리는 서버가 존재할 수 있고 이렇게 되면 서비스 장애가 일어날 가능성이 커집니다.

즉, 한 곳의 서버에 트래픽이 몰리는 것을 방지하고 여러 서버에 적절히 분산시켜주는 기술이 바로 로드 밸런싱 입니다.


📙 로드 밸런싱의 필요성

✏️ 트래픽 분산

  • 특정 서버에 과부하가 걸리는 것을 방지하고 여러 서버에 트래픽을 고르게 분배합니다.

✏️ 장애 대응

  • 한 서버가 다운되더라도 다른 서버가 요청을 처리할 수 있어 가용성이 증가합니다.

✏️ 성능 향상

  • 여러 서버가 동시에 요청을 처리하여 응답 속도를 빠르게 유지할 수 있습니다.

✏️ 확장성

  • 서버를 추가함으로써 시스템을 손쉽게 확장할 수 있습니다.

📙 로드 밸런싱 방식

로드 밸런싱은 크게 소프트웨어 기반과 하드웨어 기반으로 나눌 수 있으며, 트래픽을 분산하는 방식에 따라 다양한 알고리즘을 사용할 수 있습니다.

✏️ 소프트웨어 기반 로드 밸런서

  • Nginx, HAProxy, Traefik 등 오픈소스 로드 밸런서를 사용하여 트래픽을 분산합니다.
  • 클라우드 서비스(AWS ELB, GCP Load Balancer)에서도 소프트웨어 로드 밸런싱을 제공합니다.

✏️ 하드웨어 기반 로드 밸런서

  • F5, Citrix NetScaler 같은 전용 네트워크 장비를 사용하여 로드 밸런싱을 수행합니다.
  • 성능이 뛰어나지만 비용이 높고 유지보수가 어렵습니다.

📙 서버를 확장하는 방법

서버의 부담을 줄이기 위해 서버를 확장할 때 아래와 같은 2가지 방법을 사용할 수 있습니다.

✏️ Scale up

서버 자체의 성능을 높이는 것

  1. Scale-up의 경우 기존 서버의 자체 사양을 높이는 것을 말합니다.
  2. 기존 서버의 자원이 한계에 도달한 경우 하드웨어적으로는 서버에 디스크를 추가하거나 CPU나 RAM과 같은 자원을 업그레이드 시키는 것을 의미합니다.
  3. 소프트웨어적으로는 AWS와 같은 클라우드 서비스의 인스턴스 사양을 높일 수 있습니다.
  4. 기존 서버의 성능을 확장하는 것이기 때문에 Vertical scaling이라고 부릅니다.

장점

  • 추가적인 네트워크 연결 없이 서버의 자원 늘릴 수 있음
  • 수평적 확장(Scale-out) 방식보다 관리 비용이나 운영 이슈가 적고 확장 방식이 비교적 간단
  • 서버의 개수가 1대이므로 데이터의 일관성이 유지됨

단점

  • 하드웨어적인 비용 부담이 크고 업그레이드 범위가 정해져 있기 때문에 성능 향상에 한계점이 존재
  • 서버 한 대가 모든 부하를 감당해야 하고 만약 서버가 터진다면 바로 서비스 장애로 이어질 수 있음

✏️ Scale out

여러 대의 서버를 두는 것

  1. Scale-out의 경우 서버의 개수를 늘리는 것을 말합니다.
  2. 기존 서버의 자원이 한계에 도달할 경우 비슷한 사양의 서버를 추가로 연결해 트래픽을 분산시켜 기존 서버의 부하를 줄이는 로드 밸런싱 기술을 사용할 수 있습니다.
  3. 서버의 개수를 늘리는 것으로 Horizontal scaling이라고도 부릅니다.

장점

  • 유연한 확장성
  • 서버 한 대가 다운되더라도 나머지 서버로 서비스를 운용/유지
  • 필요한만큼 개수를 증설할 수 있어서 확장에 대한 제한 사항이 없음

단점

  • 여러 노드를 연결해 병렬 컴퓨팅 환경을 구성해야 하기 때문에 관련 아키텍처에 대한 높은 이해도가 요구됨
  • 여러 서버가 존재하기 때문에 데이터 일관성이 깨질 수 있음(아키텍처 설계 과정이 중요)
  • 여러 노드에 균등하게 부하를 분산시키기 위해 로드 밸런서가 필요함

📙 로드 밸런싱 종류(아키텍처 예시)

✏️ L4 로드 밸런싱 (Layer 4 - 전송 계층)

  • 트랜스포트 계층에서 로드를 분산한다.
  • TCP/UDP 트래픽을 기반으로 부하 분산
  • 데이터 안을 보지 않고 패킷 레벨에서만 로드를 분산하기 때문에 속도가 빠르고 효율이 높음
  • 섬세한 라우팅이 불가능하지만 L7로드 밸런서보다 저렴하다.
  • 트래픽을 전송계층의 로드밸런서가 받아 서버들에게 적절히 나누어 주며 L4 로드 밸런서는 네트워크 계층이나 전송 계층의 정보를 바탕으로 로드를 분산합니다.

✏️ L7 로드 밸런싱 (Layer 7 - 애플리케이션 계층)

  • 애플리케이션 계층에서 로드를 분산한다.
  • HTTP/HTTPS 요청을 기반으로 부하 분산
  • URL, 쿠키, HTTP 헤더 정보를 분석하여 특정 서버로 요청을 보낼 수 있음
  • HTTP 헤더, 쿠키 등과 같은 사용자 요청을 기준으로 특정 서버에 트래픽을 분산하는 것이 가능하다.
    • 즉, 패킷 내용을 확인하고 그 내용에 따라 로드를 특정 서버에 분배하는 것이 가능
  • 더 섬세한 라우팅이 가능하고, 비정상적인 트래픽을 필터링 할 수 있다.
  • 패킷의 내용을 복호화 해야하기 때문에 더 많은 비용이 든다.

📙 로드 밸런싱과 MSA 차이

로드 밸런싱은 단순히 "트래픽을 여러 서버에 나눠서 성능을 최적화하는 기술"
MSA는 "애플리케이션을 여러 개의 작은 서비스로 나누어 관리하는 설계 방식"

로드 밸런싱마이크로서비스 아키텍처 (MSA)
개념여러 서버에 트래픽을 분산하여 부하를 균등하게 조절하는 기술애플리케이션을 여러 개의 독립적인 서비스(마이크로서비스)로 나누어 운영하는 아키텍처
목적성능 최적화, 가용성 향상, 장애 대응확장성 증가, 유지보수 용이, 독립적 배포 가능
작동 방식사용자의 요청을 여러 서버에 분산 (L4, L7 로드 밸런싱)하나의 애플리케이션을 여러 개의 작은 서비스로 분리하여 각각 독립적으로 실행
주요 기술Nginx, HAProxy, AWS ELB, Kubernetes IngressSpring Boot, Docker, Kubernetes, Eureka, API Gateway
확장성서버 개수를 늘려 부하를 줄임 (수직·수평 확장)서비스 단위로 개별 확장 가능 (각 서비스별 독립 확장)
예제동일한 웹 서버 3대에 트래픽을 분산 (예: Nginx + 3대의 웹 서버)사용자 서비스, 결제 서비스, 상품 서비스가 각각 독립적으로 동작

결론

  • 로드 밸런싱은 "트래픽을 여러 서버에 나누는 기술"
  • MSA는 "애플리케이션을 여러 개의 독립적인 서비스로 분리하는 아키텍처"
  • MSA 환경에서도 서비스 간 부하 분산을 위해 로드 밸런싱이 필수적

참고자료

0개의 댓글