개인공부/네트워크

[네트워크] 다중화 & 로드밸런싱

개바리여리 2025. 5. 28. 12:53

네트워크 흐름에서 안정성을 높이기 위한 다양한 방법이 있다. 안전성을 높이기 위해서는 우선 가용성을 챙겨야 한다.

 

- 가용성 : 특정 기능을 실제로 의미있게 수행 가능한 시간 -> 고가용성이라 하면 가용성이 높다고 볼 수 있다.

 

가용성을 높이기 위헤서는 정상적인 사용이 불가능한 시간인 다운타임을 낮추어야 한다.

 

보통의 다운타임들의 원인은 무수히 많고 가변적이기 때문에 문제의 원천 차단보다는 문제가 발생해도 정상적인 운영이 가능하도록

하는 것이 중요하다.

 

이러한 방법에는 이중화(백업본) 및 다중화 , 로드밸런싱 기법이 있을 수 있다.

 

이중화

문제가 발생하면 치명적인 기능 결함이 있는 대상을 바탕으로 복사본을 만든다.

이러한 문제 발생 가능한 대상을 SpoF (Single Point of Failure) 라고 한다.

 

구성 방법

 

* Active-Standby 구성

한 시스템은 가동하고, 다른 시스템은 백업 용도로 사용하는 방식

비교적 안전한 구동방법이다. 액티브에 문제가 발생하면 스탠바이가 가동가능하다.

하지만 성능상에 변화는 기대하기 어렵다.

 

* Active-Active 구성

두 시스템을 모두 가동하는 방식이다.

하나가 문제 생기면 다른 시스템이 가동될 수 있지만 트래픽이 몰릴 수 있다.

 

다중화

이중화에서 여러 시스템이 같이 결합하여 다수의 시스템이 되는 것을 다중화라고 한다.

 

 

로드 밸런싱

서버를 다중화 하였어도 고가용성을 확보하지 못할 수 있다.

서버 가용성에 중요한 척도 중 '트래픽'을 분산 및 처리하는게 중요하다.

 

트래픽의 고른 분배를 위한 기술이 로드 밸런싱이며 이러한 기능을 하는 장비가 로드 밸런서이다.

 

하드웨어적으로는 IP주소와 포트번호와 같은 전송 계층까지의 정보를 바탕으로 로드 밸런싱을 하는

L4스위치,

URI, HTTP 정보, 쿠키 등 응용계층 까지의 정보까지 활용하여 로드 밸런싱 하는 L7 스위치가 있다.

 

소프트웨어적인 로드 밸런서는 대표적으로 Nginx 같은 것들이 있다.

 

일반적으로 로드밸런서는 다중화 서버와 클라이언트 사이에 위치하여 트래픽을 분산 및 핸들링한다.

 

어느 분산 서버에 트래픽을 할당할지 선택을 하는 알고리즘을 로드 밸런싱 알고리즘이라고 한다.

 

로드 밸런싱 알고리즘

 

- 라운드 로빈 알고리즘 : 서버를 순차적으로 돌아가며 부하 분산 하는 방식

- 최소 연결 알고리즘 : 연결이 적은 서버부터 우선적으로 할당

- 그 외에 무작위 알로기즘, 해쉬 알고리즘 등이 있다.

 

하지만 서버마다 사양과 가용성이 다르기 때문에

가중치를 활용한 서버마다 가중치를 다르게 설정하여 가중치를 활용한 라운드 로빈 알고리즘 등이 사용될 수 있다.

 

 

보통은 클라이언트와 서버 사이에는 수많은 서버가 존재할 수 있다.

이 중간서버에는 대표적으로 프록시(포워드 프록시) , 게이트웨이 (리버스 프록시) 가 있다.

 

- 프록시(포워드 프록시)

보통 오리진 서버보다 클라이언트와 가깝게 위치해 있다.

클라이언트(사용자)가 직접 목적지 서버에 요청하지 않고, 프록시 서버를 통해 요청을 대신한다.

 

주요 용도:

  • 사용자가 차단된 웹사이트에 접근 (우회)
  • 내부망 사용자들이 인터넷을 사용할 때 IP를 숨김
  • 캐싱으로 요청 속도 향상
  • 로깅 및 트래픽 제어

프록시는 "대리인"처럼, 사용자가 요청을 직접 하지 않고 대신 해주는 서버예요.

ex : 학교나 회사에서 인터넷 접속 제어 or VPN 서비스 

 

- 게이트웨이 (리버스 프록시)

보통 오리진 서버와 가까이 위치해 있다.

오리진 서버처럼 역할하는 중간 수행자이며, 

외부 클라이언트가 원래 서버에 요청할 때, 게이트웨이가 대신 받아 내부 서버로 전달한다.

 

  • 주요 용도:
    • 내부 서버의 IP/구조를 감춤 (보안)
    • 로드 밸런싱(요청 분산 처리)
    • SSL 종료(암호화 처리)
    • 캐싱 및 압축으로 서버 부담 경감

경비원처럼, 외부 요청을 받아서 내부 서버에게 전달해주는 역할을 한다.

 

ex : Nginx, Apache HTTP Server 등