로드밸런싱 정의
- 네트워크 또는 서버에 가해지는 부하 트래픽을 분산시켜주는 기술
- 한 서버만 일을 하면 과부하가 오니 다른 서버들에게 일을 분산시키는 것
- 즉 로드밸런싱을 통해 서버를 여러 개로 구축하면서 작업을 분산시키고 가용성 및 응답시간을 최적화할 수 있음
서버 확장하는 방법(Scale up, Scale out)

Scale-up(수직적 확장)
- 기존 서버의 자체 사양을 높이는 것을 뜻함
- 기존 서버의 자원이 한계에 도달한 경우 하드웨어적으로는 서버에 디스크를 추가하거나 CPU, RAM같은 자원을 업그레이드 시키는 것을 의미
- 소프트웨어적으로는 AWS와 같은 클라우드 서비스의 인스턴스 사양을 높일 수 있음
- 장점: 추가적인 네트워크 연결 없이 서버의 자원을 늘리면서 수평적 확장(Scale out)보다 관리 비용이나 운영 이슈가 적고 확장 방식이 비교적 간단하며 서버 대수가 결국 1대이므로 데이터 일관성이 유지됨
- 단점: 하드웨어적 비용 부담이 크고 업그레이드 범위가 정해져서 성능 향상의 한계가 존재, 서버 한 대가 모든 부하를 감당해야 하고 결국 서버가 터져서 서비스 장애로 이어질 수 있음
Scale-out(수평적 확장)
- 서버의 개수를 늘리는 것을 뜻함
- 기존 서버의 사양이 한계에 도달하면 비슷한 사양의 서버를 추가로 연결해서 트래픽을 분산시켜 기존 서버의 부하를 줄이는 로드 밸런싱 기술을 사용 가능
- 클라우드 서비스의 경우 리소스 사용량을 모니터링(추적) 하여 자동으로 서버를 증설해주는 Auto scaling 기술도 지원
- 서버의 개수를 가로로 늘리는 것으로 Horizontal scaling으로도 불림
- 장점: 유연한 확장성을 가져서 서버 한 대가 다운되어도 나머지 서버로 서비스 운영 가능, 즉 확장에 대한 제한 사항이 없음
- 단점: 여러 노드를 연결해 병렬 컴퓨팅 환경을 구성해야 하므로 아키텍처에 대한 높은 이해도가 요구, 여러 노드에 균등하게 부하를 분산시키기 위해 로드 밸런서가 필요
내 생각: Scale up vs Scale out
무한한 확장이 가능한 것으로 보았을 때 Scale out이 Scale up 보다 요즘 트랜드에 맞는 유연한 설계인듯 아무래도 서버 한 대로만 운영하고 아무리 스펙을 높여봤자 한계가 있고 비용적으로도 만만치 않을테니 ㄹㅇ 굳이 일듯 ㅇㅇ
로드 밸런서(Load Balancer) 정의와 역할 종류
로딩을 앞에서 밸런스 즉 균형있게 분배하기 위해 존재하는 도구
- 클라이언트와 서버 사이에서 서버의 부하를 분산시키는 하드웨어 혹은 소프트웨어를 의미
- 이런 로드 밸런서는 네트워크 트래픽과 클라이언트 요청을 여러 서버에 적절하게 분배
- 정상 서버에만 요청을 전송하고 다운된 서버가 있으면 다른 서버로 리다이렉트 함
- 서비스의 중단 없이 서버를 추가 혹은 뺄 수 있음
로드 밸런서 주요 기능
- 부하 분산
- 오토 스케일링
- 조건에 맞춰서 필요 시 서버의 수를 늘리거나 줄여서 부하를 관리할 수 있음(Scale out, Scale in)
- 즉 자동으로 서버를 늘렸다(Scale out)가 줄일(Scale in) 수 있는 것
- Health Check
- 해당 포트에 트래픽을 보내서 애플리케이션이 올바르게 작동하는지 여부 판별
- 보안 서비스
- WAF(Web Application Firewall): 웹의 비정상 트래픽을 탐지하고 차단하기 위한 방화벽
- Cloud NAT(Network Address Translation)
로드 밸런서 종류
1. L4 Load Balancer
- OSI 7 Layer에서 4계층인 전송 계층을 기반으로 해서 포트 번호를 바탕으로 부하를 분산시키는 로드밸런서를 뜻함
- 4계층 이하의 모든 정보를 갖고 있기에 IP 주소(3계층, IP 프로토콜)와 포트번호(4계층, TCP 프로토콜) 등을 로드 밸런싱의 데이터로 활용
- 한 대의 서버가 각각 다른 포트 번호를 부여하여 다수의 프로그램을 운영한다면 최소 L4 이상의 로드 밸런서를 사용해야함
=> IP주소 혹은 포트번호로 로드 밸런싱(서버 분리) 시킴
2. L7 Load Balancer
- OSI 7 Layer에서 7계층인 애플리케이션 계층(HTTP 프로토콜)을 기반으로 하므로 HTTP 헤더, 쿠키와 같은 사용자의 요청 정보를 기준으로 특정 서버에 대한 부하를 분산시키는 로드밸런서
- URL, HTTP 헤더의 쿠키 값에 따라 트래픽을 각 서버로 분산시켜 클라이언트의 요청을 보다 세분화시켜 서버로 전달시킬 수 있음 중간에서 !
로드 밸런싱 알고리즘
1. 라운드 로빈(Round Robin)
- 로드 밸런싱에서 가장 많이 사용되는 알고리즘, 클라이언트의 요청을 여러 대의 서버에 순차적으로 분배하는 방식
- 추가적인 연산 없이 들어온 요청을 빠르게 서버로 분산하는 게 포커스
- 모든 서버의 스펙이 동일하거나 비슷한 경우 사용하는 밸런싱 알고리즘
- 가장 단순해서 그냥 요청을 순서대로 돌아가며 서버에 분배하는 것(요청1 -> A서버, 요청2 -> B 서버, 요청 3 -> C 서버, 요청 4 -> 다시 A 서버...)
2. 가중 라운드 로빈
- 각 서버마다 처리량을 설정하고 가중치가 높은 서버부터 클라이언트의 요청을 우선 전달하는 방식
- 주로 서버의 트래픽 처리량이 달라서 특정 서버의 스펙이 더 좋은 경우 이 방식 씀 왜냐하면 처리량이 좋은 것부터 받아서 우다다다다 해야지 ㅇㅇ 그래야 효율 좋으니