시스템 확장을 위한 로드밸런서 설계: 부하 분산과 고가용성 확보
사용자 수가 급증함에 따라 웹 사이트 또는 애플리케이션의 시스템이 트래픽을 효율적으로 처리하도록 확장하는 것은 매우 중요합니다. 실무에서 트래픽이 몰리고 서버가 로드밸런서 구조로 설계되지 않아 무중단 서비스 배포가 불가능했던 장애를 경험한 적이 있습니다. 당시 장애 대응을 위해 여러 조치를 했고, 그중에서는 로드밸런서 구조로 아키텍처를 재설계하여 무중단 서비스 배포가 가능해졌습니다. 이 경험을 바탕으로 시스템 확장성을 고려한 로드밸런서 설계에 대해 학습하게 되었고, 이를 블로그 형태로 정리하고자 합니다.
로드밸런서란?
로드밸런서는 부하 분산 집합에 속한 웹 서버들에게 트래픽 부하를 고르게 분산하는 역할을 합니다. 사용자는 로드밸런서의 **공개 IP 주소(public IP address)**로 접속하며, 로드밸런서는 이를 각 웹 서버의 **사설 IP 주소(private IP address)**로 전달합니다.
이 과정을 통해 웹 서버들이 직접 클라이언트 요청을 처리하는 일이 줄어들고, 보안성과 시스템 확장성이 크게 향상됩니다.
로드밸런서 동작 흐름
로드밸런서의 동작 흐름을 이해하기 위해, 트래픽이 사용자로부터 웹 서버까지 어떻게 전달되는지 구체적으로 살펴보겠습니다.
동작 흐름 단계별 설명
1. DNS 요청
사용자가 웹 사이트에 접속할 때, 브라우저는 먼저 도메인 이름(mywebsite.com)을 IP 주소로 변환하기 위해 DNS(Domain Name System) 요청을 보냅니다. DNS 서버는 해당 도메인 이름에 매핑된 **공개 IP 주소(public IP address)**를 반환합니다. 이 과정에서 사용자는 로드밸런서의 공개 IP 주소(예: 88.88.88.1)를 받게 됩니다.
- DNS(Domain Name System): 도메인 이름을 IP 주소로 변환하는 시스템으로, 사람이 기억하기 쉬운 도메인 이름을 네트워크 장치가 이해할 수 있는 숫자 형식의 IP 주소로 변환합니다.
2. Public IP로 접속
DNS 서버로부터 반환된 공개 IP 주소를 받은 브라우저는 이 IP 주소를 사용하여 웹 사이트에 접속을 시도합니다. 이때 사용자는 직접 웹 서버에 접근하는 것이 아니라 로드밸런서를 통해 트래픽이 전달됩니다.
- Public IP Address: 인터넷 상에서 접근 가능한 IP 주소로, 로드밸런서가 클라이언트 요청을 수신하는 엔드포인트 역할을 합니다.
3. 로드밸런서가 트래픽 처리
로드밸런서는 클라이언트로부터 요청을 수신하면, 이를 **부하 분산 집합(load balancing pool)**에 속한 여러 대의 웹 서버 중 하나로 전달합니다. 로드밸런서는 다양한 알고리즘을 사용하여 트래픽을 분산할 수 있습니다.
- 부하 분산 알고리즘:
- 라운드 로빈(Round Robin): 각 서버에 순차적으로 요청을 전달하는 방식.
- 가중치 기반 분산(Weighted Load Balancing): 서버의 성능에 따라 요청을 가중치에 비례하여 분배하는 방식.
- 최소 연결 수(Least Connections): 현재 연결 수가 가장 적은 서버로 요청을 보내는 방식.
4. Private IP 통신
로드밸런서는 웹 서버와의 통신 시 **사설 IP 주소(private IP address)**를 사용합니다. 사설 IP 주소는 외부 네트워크에서는 접근할 수 없고, 내부 네트워크에서만 사용 가능하므로 보안이 강화됩니다. 이 방식으로, 외부 사용자는 서버의 실제 IP 주소를 알 수 없으며, 로드밸런서가 중간에서 요청을 처리합니다.
- Private IP Address: 내부 네트워크에서만 접근 가능한 IP 주소로, 외부로 노출되지 않아 보안성이 높습니다.
5. 최종 응답 반환
웹 서버가 클라이언트의 요청을 처리한 후, 응답은 다시 로드밸런서를 통해 클라이언트로 반환됩니다. 이 과정에서 로드밸런서는 클라이언트와 서버 간의 연결을 유지하고, 필요에 따라 세션을 관리하거나 SSL 인증을 처리할 수 있습니다.
- DNS (도메인: mywebsite.com -> IP 주소: 88.88.88.1)
- Public IP (88.88.88.1) -> 로드밸런서
- Private IP (10.0.0.1, 10.0.0.2)
로드밸런서의 주요 역할
- 부하 분산: 로드밸런서는 여러 대의 웹 서버에 트래픽을 분산시켜, 특정 서버에 과부하가 발생하지 않도록 합니다.
- 고가용성 확보: 하나의 서버가 다운되더라도 로드밸런서는 다른 서버로 트래픽을 전환하여 웹 사이트가 계속 가동되도록 보장합니다.
- 보안 강화: 로드밸런서와 웹 서버 간 통신은 사설 IP 주소를 사용하여 외부로부터의 직접적인 접근을 차단합니다.
장애 복구와 확장성
장애 복구 (Failover)
- 부하 분산 집합에 하나 이상의 웹 서버를 추가하면 장애를 자동 복구하지 못하는 문제(No Failover)를 해결할 수 있습니다.
- 예를 들어, 서버 1이 다운되면 로드밸런서는 모든 트래픽을 서버 2로 전송하여 웹 사이트가 다운되지 않도록 합니다.
확장성 (Scalability)
- 웹 사이트로 유입되는 트래픽이 급증하면 기존의 두 대의 웹 서버로는 감당할 수 없는 상황이 발생할 수 있습니다.
- 로드밸런서를 활용하면 웹 서버 계층에 새로운 서버를 추가하는 방식으로 확장할 수 있으며, 로드밸런서는 자동으로 트래픽을 새 서버에 분산시킵니다.
데이터 계층의 확장
현재 설계안에서는 하나의 데이터베이스 서버만 사용하고 있습니다. 이는 다음과 같은 문제를 초래할 수 있습니다:
- 단일 장애점(Single Point of Failure): 데이터베이스 서버가 다운되면 웹 사이트 전체가 중단될 수 있습니다.
- 성능 병목: 모든 데이터 요청이 하나의 데이터베이스 서버로 집중되면 성능 병목이 발생할 수 있습니다.
데이터베이스 다중화
이 문제를 해결하기 위해 데이터베이스 다중화를 고려해야 합니다. 읽기 전용 복제본(Read Replica), 마스터-슬레이브 구조(Master-Slave Architecture), 클러스터링(Clustering) 등 다양한 방법이 있습니다. 다음 글에서는 데이터베이스 다중화 전략에 대해 자세히 다룰 예정입니다.
결론
로드밸런서는 웹 계층의 가용성과 확장성을 보장하는 중요한 구성 요소입니다. 이를 통해 웹 서버가 직접 트래픽을 처리하지 않고 로드밸런서가 트래픽을 분산시킴으로써 보안과 성능이 향상됩니다.
다음 단계로는 데이터베이스 계층의 확장성을 고려하여, 시스템 전반에 걸쳐 고가용성과 장애 복구 능력을 더욱 강화할 수 있습니다.
'Network' 카테고리의 다른 글
[웹 보안] 디렉터리 트래버설(Directory Traversal) 공격이란? (0) | 2025.01.30 |
---|---|
[Network] 데이터베이스 다중화: 확장성과 안정성을 위한 설계 (0) | 2025.01.11 |
[Network] 사용자 수에 따른 규모 확장성: 수직적 확장과 수평적 확장 (0) | 2025.01.11 |
[Network] 웹 애플리케이션 및 모바일 앱의 서버와 데이터베이스 구조 개요 (0) | 2025.01.11 |
[네트워크 프로토콜] TCP/IP 프로토콜의 작동 원리와 최적화 전략 (0) | 2024.09.20 |