로드밸런싱(부하 분산)이란? 기초 개념 정리

서버가 여러 대일 때 요청을 누구에게 보낼지 정하는 규칙들, 그리고 그 규칙이 어디서 어긋나는지를 따라가 봅니다.

한눈에 보기

로드밸런서는 여러 대의 서버 앞에 서서 들어오는 요청을 나눠 주고, 응답이 없는 서버는 대상에서 빼는 장치(또는 소프트웨어)입니다. 이 글은 분산 규칙(라운드로빈·최소 연결·해시), 같은 사용자를 같은 서버로 보내는 세션 고정, 상태 확인과 이중화, 그리고 L4·L7 구분을 벤더와 무관한 일반 개념 수준에서 정리합니다. 특정 제품의 설정법이 아니라 "왜 이런 규칙이 필요한가"를 이해하는 데 초점을 둡니다.

어디서 쓰이는 개념인가: 분산의 세 가지 위치

위키백과의 로드 밸런싱(컴퓨팅) 문서는 분산이 이뤄지는 방식을 여러 가지로 나눠 설명합니다. 전용 장비나 소프트웨어가 요청을 받아 서버로 넘기는 방식이 우리가 흔히 말하는 로드밸런서입니다. 그 밖에 하나의 도메인 이름에 여러 IP를 매핑해 돌아가며 응답하는 라운드로빈 DNS가 있고, 클라이언트가 서버 IP 목록을 받아 그중 하나를 무작위로 고르는 방식도 소개됩니다. DNS 방식은 응답 캐시(TTL) 때문에 서버 장애가 곧바로 반영되지 않을 수 있어서, 문서에서도 짧은 만료 시간을 두는 점을 언급합니다. DNS 조회 과정이 궁금하다면 DNS 조회 과정 가이드를 함께 보세요.

아래 카드: 개념을 하나씩 짚기

아래 카드는 정의 → 분산 규칙 → 세션 고정 → 계층 구분 → 상태 확인 → 확장 순으로 이어집니다.

⚖️

로드밸런싱(부하 분산)이란

하나의 서버에 몰릴 수 있는 트래픽을 여러 대의 서버로 골고루 나눠주어 서비스가 끊기지 않고 빠르게 응답하도록 하는 기술입니다.

방문자가 몰리는 웹사이트를 서버 한 대로만 운영하면 트래픽이 늘어날수록 응답 속도가 느려지거나 서버가 다운될 위험이 커집니다. 로드밸런서는 여러 대의 서버(서버 풀) 앞에서 요청을 받아 그때그때 가장 적절한 서버로 나눠 전달해, 특정 서버 한 대가 다운되어도 나머지 서버가 서비스를 계속 이어갈 수 있게 해줍니다.

🔁

라운드로빈 방식

들어오는 요청을 서버 목록 순서대로 하나씩 돌아가며 배정하는 가장 단순하고 널리 쓰이는 분산 방식입니다.

서버가 A, B, C 세 대라면 요청이 들어올 때마다 A → B → C → A 순서로 차례차례 배정합니다. 구현이 간단하고 모든 서버 성능이 비슷할 때 효과적이지만, 서버마다 처리 능력이나 현재 부하가 다른 상황은 고려하지 못한다는 한계가 있습니다.

📉

최소 연결 방식(Least Connections)

현재 처리 중인 연결 수가 가장 적은 서버, 즉 가장 한가한 서버로 새 요청을 보내는 방식입니다.

단순히 순서대로 배정하는 라운드로빈과 달리 각 서버의 실시간 부하 상태를 반영하기 때문에, 요청마다 처리 시간이 크게 차이 나는 서비스(예: 파일 업로드처럼 오래 걸리는 작업이 섞여 있는 경우)에서 더 균형 잡힌 분산이 가능합니다.

🔑

IP 해시(고정 세션) 방식

클라이언트의 IP 주소를 기준으로 항상 같은 서버로 연결해, 로그인 세션처럼 같은 서버에 계속 접속해야 하는 상황을 지원합니다.

로그인 정보를 서버 한 대의 메모리에만 저장하는 구조(세션 고정, Sticky Session)에서는 같은 사용자의 요청이 매번 다른 서버로 가면 로그인이 풀리는 문제가 생길 수 있습니다. IP 해시 방식은 클라이언트 IP를 계산해 항상 같은 서버로 보내줌으로써 이런 문제를 피합니다. 다만 여러 사용자가 같은 공용 IP(예: 회사 네트워크)를 쓰면 특정 서버에 부하가 몰릴 수 있다는 단점도 있습니다.

🗂️

L4 로드밸런서와 L7 로드밸런서의 차이

전송 계층의 IP·포트 정보만 보고 분산하는 L4 방식과, 응용 계층의 URL·헤더·쿠키까지 보고 정교하게 분산하는 L7 방식으로 나뉩니다.

L4(전송 계층) 로드밸런서는 패킷 내용을 들여다보지 않아 처리 속도가 빠르지만 단순한 기준으로만 분산할 수 있습니다. 반면 L7(응용 계층) 로드밸런서는 요청 URL이 "/image"인지 "/api"인지, 어떤 브라우저에서 왔는지까지 파악해 그에 맞는 서버군으로 정교하게 나눠 보낼 수 있어, 마이크로서비스처럼 기능별로 서버를 나눈 구조에 특히 유용합니다.

❤️‍🩹

헬스체크(상태 확인)

로드밸런서가 주기적으로 각 서버에 신호를 보내 정상 작동 여부를 확인하고, 장애가 감지된 서버는 자동으로 분산 대상에서 제외합니다.

일정 주기로 서버에 간단한 요청(핑이나 특정 상태 확인용 URL 호출)을 보내 정상 응답이 오는지 확인하며, 응답이 없거나 오류가 반복되면 해당 서버를 일시적으로 서버 풀에서 제외해 사용자에게 오류 화면이 노출되는 것을 막습니다. 이후 서버가 복구되면 다시 자동으로 분산 대상에 포함시킵니다.

🌍

로드밸런서와 CDN의 관계

로드밸런서가 같은 데이터센터 안의 서버들에 트래픽을 나눈다면, CDN은 전 세계 여러 지역의 엣지 서버로 트래픽을 분산하는 더 넓은 개념입니다.

둘 다 "트래픽을 나눠 처리한다"는 점은 같지만, 로드밸런서는 보통 한 곳에 모인 서버 그룹 안에서의 분산을 담당하고, CDN은 지리적으로 떨어진 여러 지역에 요청을 분산합니다. 실제 대규모 서비스에서는 CDN이 먼저 지역별로 트래픽을 나누고, 각 지역 안에서 다시 로드밸런서가 서버별로 세부 분산을 담당하는 식으로 함께 사용됩니다.

📈

로드밸런싱과 오토스케일링의 결합

트래픽이 갑자기 몰릴 때 서버 대수를 자동으로 늘리는 오토스케일링과 로드밸런서를 결합하면, 사람이 개입하지 않아도 트래픽 변화에 대응할 수 있습니다.

클라우드 환경에서는 평소보다 트래픽이 급증하면 오토스케일링이 새 서버 인스턴스를 자동으로 추가하고, 로드밸런서가 새로 생긴 서버를 곧바로 분산 대상에 포함시킵니다. 반대로 트래픽이 줄어들면 불필요한 서버를 자동으로 줄여 비용을 절약할 수 있어, 두 기술은 클라우드 인프라 운영에서 짝을 이뤄 쓰이는 경우가 많습니다.

분산 규칙 비교

아래 표는 위키백과 로드 밸런싱 문서와 일반적인 설명에 나오는 개념을 정리한 것입니다. 제품마다 이름과 세부 동작은 다를 수 있습니다.

규칙기준잘 맞는 상황약점
라운드로빈순번서버 사양과 요청 비용이 비슷할 때현재 부하를 보지 않음
가중 라운드로빈순번 + 서버별 가중치성능이 다른 서버가 섞여 있을 때가중치를 사람이 정해야 함
최소 연결현재 활성 연결 수요청마다 처리 시간 차이가 클 때연결 수가 곧 부하는 아님
해시(출발지 기준 등)주소·포트 등으로 계산한 값같은 클라이언트를 같은 서버로 보내고 싶을 때NAT·프록시 뒤 사용자가 한 서버에 몰릴 수 있음

가상 예시: 같은 요청 6개, 규칙에 따라 달라지는 배치

가상 예시입니다. 서버 A, B, C 세 대가 있고 요청 6개가 1초 간격으로 들어옵니다. 첫 요청은 처리에 10초가 걸리는 무거운 작업이고 나머지 다섯 개는 1초짜리라고 가정합니다. 라운드로빈은 A, B, C, A, B, C 순으로 배정하므로 네 번째 요청도 A로 갑니다. A는 아직 10초짜리 작업을 처리 중이라 이 요청은 기다려야 합니다. 반면 최소 연결 규칙은 요청이 들어오는 순간 활성 연결이 가장 적은 서버를 고릅니다. 이 시나리오를 단순 계산하면 첫 요청만 A에 가고 나머지 다섯 개는 모두 한가한 B로 갑니다(1초 안에 끝나 B가 계속 비기 때문). 실제 서비스에서는 연결 수만으로 부하를 판단하기 어렵고 동점 처리 방식도 제품마다 달라서, 이 예시는 "규칙에 따라 배치가 달라질 수 있다"는 점만 보여 줍니다. 가중 라운드로빈도 같은 방식으로 이해할 수 있습니다. 가중치를 A:B:C = 5:3:2로 두면 10개 요청 중 A에 5개, B에 3개, C에 2개가 배정됩니다.

세션 고정의 대가와 로드밸런서 자체의 이중화

위키백과 문서는 한 사용자 세션의 요청을 계속 같은 백엔드 서버로 보내는 방식을 지속성(persistence) 또는 스티키니스라고 부릅니다. 가장 큰 단점으로 꼽히는 것이 자동 장애 전환의 어려움입니다. 그 서버가 죽으면 서버에 있던 세션 데이터도 함께 사라집니다. 또 클라이언트 IP로 사용자를 구분하는 방식은 DHCP, NAT, 웹 프록시 때문에 믿기 어려울 수 있다고 같은 문서가 지적합니다. 관련 개념은 NAT 기초 가이드와 DHCP 기초 가이드에서 볼 수 있습니다. 로드밸런서 자체도 단일 장애점이 되지 않도록 고가용성 쌍(high-availability pair)으로 배치하는 것이 일반적이라고 같은 문서는 설명합니다. 장애 전환이 가능하려면 남은 서버가 몰린 요청을 받아낼 여유 용량(N+1 같은 중복 구성)도 필요합니다.

L4와 L7을 고르는 기준

L4·L7 구분은 OSI 계층 번호에서 온 이름입니다(OSI 7계층 가이드 참고). 일반적으로 L4는 IP와 포트 수준, L7은 URL·헤더 같은 응용 계층 정보를 기준으로 삼습니다. 위키백과 문서는 L7에 해당하는 내용을 "요청된 URL에 따라 서로 다른 서버로 보내는 콘텐츠 인식 스위칭"으로 설명하고, TLS 종료를 하면 HTTPS 요청 내용을 보고 분산을 결정할 수 있다고 덧붙입니다. 정리하면 단순하고 빠른 분산이 목적이면 L4 쪽, 경로나 헤더에 따라 다른 서버군으로 보내야 하면 L7 쪽을 검토하게 됩니다. 다만 두 방식의 성능 차이는 제품과 구성에 크게 좌우되므로 일반론으로 단정하기 어렵습니다.

직접 점검해 보는 체크리스트

흔한 오해와 정정

한계와 더 알아볼 점

이 글은 일반 개념만 다룹니다. 알고리즘의 정확한 이름과 옵션, 상태 확인 주기, 지속성 방식은 사용하는 소프트웨어나 클라우드 서비스의 공식 문서에서 확인해야 합니다. 오토스케일링과 결합한 구성 역시 서비스마다 동작과 지연이 다릅니다.

지역 단위로 트래픽을 나누는 CDN도 함께 보면 좋아요

로드밸런서가 서버 그룹 안에서 트래픽을 나눈다면, 전 세계 지역별로 트래픽을 나누는 기술도 있습니다.CDN(콘텐츠 전송 네트워크)이란? 기초 개념 정리에서 이어서 확인해보세요.

대역폭·지연시간 개념이 헷갈린다면

서버 성능을 이야기할 때 자주 등장하는 대역폭, 지연시간, 처리량의 차이가 궁금하다면대역폭·지연시간·처리량 차이 완전정복도 참고해보세요.

자주 묻는 질문

가중 라운드로빈은 언제 쓰나요?

서버 사양이 서로 다를 때 성능이 높은 서버가 더 많은 요청을 받도록 하는 방식입니다. 위키백과 문서도 가장 강력한 장비가 더 많은 요청을 먼저 받도록 가중할 수 있다고 설명합니다.

DNS 라운드로빈만으로도 부하 분산이 되나요?

하나의 이름에 여러 IP를 돌려주는 방식으로 어느 정도 분산은 가능하지만, 응답이 캐시되고 서버 상태를 직접 확인하지 않으므로 장애 대응은 느릴 수 있습니다. 짧은 TTL을 쓰는 이유이기도 합니다.

세션 고정을 쓰면 서버가 죽었을 때 로그인은 어떻게 되나요?

세션이 서버 메모리에만 있다면 그 서버가 죽을 때 함께 사라져 다시 로그인해야 할 수 있습니다. 세션 정보를 별도 저장소에 두는 설계가 대안으로 거론됩니다.

로드밸런서 자체가 고장 나면 어떻게 되나요?

로드밸런서가 단일 장애점이 되지 않도록, 실제 서비스에서는 로드밸런서 자체도 이중화(여러 대를 두고 하나가 죽으면 다른 하나가 대신 처리)해서 운영하는 경우가 일반적입니다.

작은 웹사이트에도 로드밸런싱이 필요한가요?

서버 한 대로 충분히 감당되는 트래픽이라면 당장은 필요하지 않습니다. 다만 방문자가 늘어나 서버를 여러 대로 늘리는 시점부터는 로드밸런서 없이는 트래픽을 나눠 받을 방법이 없기 때문에 필수적인 요소가 됩니다.