당신이 알아야 할 시스템 설계의 핵심 개념 20가지 - 1. 로드 밸런싱

2025. 5. 1. 14:03·System Architecture

1. 로드 밸런싱이란

로드 밸런싱은 애플리케이션을 지원하는 리소스 풀에 들어오는 네트워크 트래픽(들어오는 요청)을 균등하게 분산하는 것을 의미합니다. 간단히 비유하면 은행에서 고객들(네트워크 트래픽)을 대기 번호표를 뽑게 한 뒤 여러개의 창구(서버)에서 각 고객의 업무를 처리한다고 볼 수 있을 것 같습니다.

왜 필요할까?

대부분의 간단한 프로젝트에서는 요청이 많이 들어올 일이 거의 없습니다. 그래서 한 대의 서버로도 충분히 트래픽을 감당할 수 있습니다. 하지만 커다란 서비스(토스, 배민, 네이버, 등...)에서는 매우 많은 요청이 들어오기 때문에 한 대의 서버로는 그 트래픽을 감당하기 힘듭니다. 그래서 여러 대의 서버를 구축해 트래픽을 나눠서 서버 1대가 처리하는 트래픽을 줄이기 위해 로드 밸런싱을 사용합니다. 이때 들어온 요청을 어느 서버에서 처리할 지 분배하는 역할을 로드 밸런서가 담당합니다.

2. 로드 밸런서

로드 밸런서는 로드 밸런싱에서 사용자의 요청을 어떤 서버에서 처리할 지 분배하는 역할을 하는 하드웨어나 소프트웨어를 의미합니다. 만약 서버가 추가되거나 제거해야 될 시 로드 밸런서의 설정을 수정하여 손쉽게 처리할 수 있게 해줍니다.

종류

로드 밸런서는 보통 L4 로드 밸런서, L7 로드 밸런서로 나눌 수 있습니다. (이 2종류에 해당하지 않는 로드 밸런서도 있습니다.)

L4 로드 밸런서

OSI 7계층 중 4계층인 전송 계층을 기반으로 작동하는 로드 밸런서를 의미합니다. IP 주소와 포트를 기반으로 로드 밸런싱을 수행합니다. IP 주소와 포트만을 이용해 트래픽을 처리하기 때문에 L7 로드 밸런서에 비해 처리 속도가 빠릅니다. 하지만 사용하는 정보가 적기 때문에 기능 및 유연성이 제한적이라는 단점이 있습니다.

L7 로드 밸런서

OSI 7계층 중 7계층인 애플리케이션 계층을 기반으로 작동하는 로드 밸런서를 의미합니다. URL, 헤더, 쿠키 등을 기반으로 로드 밸런싱을 수행합니다. 다양한 정보를 활용하여 로드 밸런싱을 수행하기 때문에 더 세부적으로 요청을 분산 시킬 수 있습니다. 또한 데이터를 분석하여 악의적인 요청을 감지해 보안 기능을 수행하거나 캐싱 및 압축 등의 다양한 기능을 지원할 수 있습니다. 하지만 사용하는 데이터가 많기 때문에 L4 로드 밸런서에 비해 처리 속도가 느리다는 단점이 있습니다.

3. 로드 밸런싱 알고리즘

1) 라운드 로빈

라운드 로빈은 들어오는 요청을 순환 방식으로 각 서버에 분산하는 방식입니다. 다른 방식에 비해 구현이 간단하지만 각 요청마다 들어가는 리소스나 서버의 부하를 고려하지 않는 방식입니다.

서버가 A, B, C 3대라고 가정할 때, 들어오는 요청에 따라
A -> B -> C -> A -> B -> C -> ...

2) 가중 라운드 로빈

가중 라운드 로빈은 라운드 로빈 방식과 비슷하지만 각 서버마다 가중치를 부여하여 가중치에 비례해 요청을 분배하는 방식입니다. 가중치는 주로 서버의 성능에 따라 부여됩니다.

서버가 A, B, C 3대라고 가정할 때, 가중치는 A: 3, B: 1, C: 2라고 가정하면 들어오는 요청에 따라
A -> A -> A -> B -> C -> C -> A -> A -> A -> B -> C -> C -> A -> ...

3) 최소 연결

최소 연결 방식은 이름과 같이 각 서버의 현재 클라이언트와 연결된 수를 실시간으로 체크하여 연결 수가 가장 적은 서버에게 요청을 할당하는 방식입니다.

4) 최소 응답 시간

최소 응답 시간 방식은 각 서버의 응답 시간을 체크하여 가장 빠른 서버에 요청을 할당하는 방식입니다. 각 서버들의 응답 시간을 실시간으로 체크하여 응답 시간 정보를 계속 업데이트합니다.

5) IP 해시

IP 해시 방식은 클라이언트의 IP 주소를 해싱하여 그 값을 기반으로 요청을 분배하는 방식입니다. 이는 같은 IP를 가진 클라이언트는 항상 같은 서버에 요청이 가도록 한다는 것을 의미합니다. 그렇기에 Sticky Session을 구현 가능하지만 해시 분포에 따라 부하가 고르게 분산되지 않을 수 있습니다.

4. 주의점 - Stateless 설계

로드 밸런싱을 사용할 경우 IP 해시와 같은 방법을 사용하지 않는 한 클라이언트의 요청이 항상 같은 서버에 할당된다는 보장이 없습니다. 그렇기에 서버에 클라이언트의 State를 저장할 경우 이후의 요청이 다른 서버에 할당되면 이전 상태를 알 수 없습니다. 또한 기존의 서버가 제거될 때 해당 서버에 저장된 State는 날아가게 됩니다. 그렇기에 클라이언트의 State는 외부 저장소에 저장하는 방식을 통해 Stateless하게 서버를 유지해야 합니다.

참고자료

EP160: Top 20 System Design Concepts You Should Know

 

EP160: Top 20 System Design Concepts You Should Know

Load Balancing: Distributes traffic across multiple servers for reliability and availability.

blog.bytebytego.com

 

'System Architecture' 카테고리의 다른 글

엔지니어링의 트레이드오프: 실제 환경에서의 최종적 일관성 (Eventual Consistency)  (0) 2025.05.29
Slack은 어떻게 하루 수십억 개의 메시지를 처리할까  (0) 2025.05.22
마이크로서비스 설계 패턴 핵심 요약  (0) 2025.05.10
당신이 알아야 할 시스템 설계의 핵심 개념 20가지 - 2. 캐싱  (0) 2025.05.01
당신이 알아야 할 시스템 설계의 핵심 개념 20가지 - 0. 개론  (1) 2025.05.01
'System Architecture' 카테고리의 다른 글
  • Slack은 어떻게 하루 수십억 개의 메시지를 처리할까
  • 마이크로서비스 설계 패턴 핵심 요약
  • 당신이 알아야 할 시스템 설계의 핵심 개념 20가지 - 2. 캐싱
  • 당신이 알아야 할 시스템 설계의 핵심 개념 20가지 - 0. 개론
ggio
ggio
개발 공부를 하며 배운 내용을 기록합니다.
  • ggio
    기록을 하자
    ggio
  • 전체
    오늘
    어제
    • 분류 전체보기 (41)
      • SW마에스트로 (5)
      • System Architecture (8)
      • Algorithm (15)
      • Side Tech Notes (7)
      • CS (5)
      • 취준 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코테
    코딩테스트
    fail back
    비관락
    Programming
    매일메일
    프로그래밍
    토스 NEXT
    3PC
    리트코드
    시스템 설계
    프로액터 패턴
    알고리즘
    시스템 아키텍쳐
    다중화
    소프트웨어 마에스트로
    Algorithm
    at-least-once
    SW마에스트로
    소마
    지리적 분산
    부트캠프
    ha 아키텍처
    leetcode
    메시지 큐
    분산락
    객체지향
    멀티 코어
    리액터 패턴
    fail over
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
ggio
당신이 알아야 할 시스템 설계의 핵심 개념 20가지 - 1. 로드 밸런싱
상단으로

티스토리툴바