데일리 잡(Job) 지식

Nginx, Proxy 그리고 Load Balancer

개발하는 주디씨 2023. 11. 28. 10:27

 

저희 gateway Nginx로 되어있구요...

 

 

Nginx란

오픈소스 기반의 웹 서버로서 MIT Lisence이며, 트래픽이 많은 웹 서버에서 사용한다.

 

📌 웹서버!?
기존에 사용하는 WAS(Web Application Server)와 어떤 차이인지 헷갈릴 수 있을 것 같아 한번 정리하고 넘어가자.
💻 Web Server
단순히 정적 파일을 응답한다. 

💻 WAS(Web Application Server)
클라이언트 요청에 대해 동적인 처리가 이루어진 후 응답한다.

 

아래 공식문서를 보면 "고성능, 확장성, 고가용성 웹서버, 역방향 프록시 서비 및 웹 가속기(HTTP 로드 밸랜서, 콘텐츠 캐시 등의 기능 결합)이다."라고 소개하고 있다. nginx가 만들어진 배경은 1995년 유닉스 기반으로 만들어진 최초의 웹서버 NCSA HTTPd가 있었다. 하지만 버그가 굉장히 많았다. 그래서 이를 개선한 아파치 서버가 만들어지게 되는데 아파치 서버는 요청이 들어오면 커넥션을 생성하기 위해 프로세스를 생성하고, 새로운 요청이 들어올 때마다 프로세스를 새롭게 만드는 방식으로 동작했다.

아파치 웹 서버는 프로세스를 생성하는 시간이 적지 않았기 때문에 PREFORK 를 사용하여 미리 프로세스를 만들어두어 새로운 클라이언트의 요청이 있을 때 만들어진 프로세스를 가져다가 사용하는 것을 기본으로 동작하였으며 미리 만들어둔 프로세스가 없을 경우에만 추가로 프로세스를 생성하도록 하여 개발에 용이하다는 장점을 보여주었다.

 

그러나, 1999년부터는 서버 트래픽량이 높아져 서버가 동시에 연결된 커넥션이 많아졌을 때 더 이상 커넥션을 형성하지 못하는 이슈가 발생했다. 이를 C10K(Connection 1000 Problem)문제라고 하는데 크게 3가지로 볼 수 있다.

 

C10K 문제

  • 커넥션마다 프로세스를 할당하기에 메모리 부족
  • 프로세스의 리소스 양이 늘어나 프로그램이 무거워짐
  • 트래픽이 증가함에 따라 context switching이 자주 발생하여 CPU 부하가 높아짐

위 이슈처럼 동시 트래픽을 감당하기엔 아파치 서버의 구조가 적합하지 않았고, 2004년에 새로운 구조를 개선하며 탄생한 것이 바로 Nginx 이다. 

 

 

https://www.nginx.com/resources/faq/

 

NGINX FAQs - Frequently Asked Questions - NGINX

Get answers to questions about NGINX, features, updates, pricing, and more in our FAQs.

www.nginx.com

 

Proxy란

보통 프록시 서버라고 얘기하곤 하는데 프록시라는 이름 자체는 '대리한다' 라는 의미로 인터넷 접속을 할 때 중계서버라고 할 수 있다. 프록시는 크게 Forward와 Reverse 두 가지가 있는데 그 특징은 아래와 같다.

 

Forward Proxy

클라이언트 대신 프록시 서버가 목적 서버에 통신을 해주는 역할을 말한다.

 

Reverse Proxy

포워드 프록시와 달리 web서버 쪽에 위치하여 클라이언트의 접근을 최초로 받아 request에 해당하는 web서버에 배분해주는 역할을 한다. 사용자가 내부 서버에 직접 접근하여 서비스를 제공받을 수 있지만 이렇게 Reverse Proxy를 사용하는 이유는 보안 때문이다. 보통 기업 네트워크 환경은 DMZ존 이라는 공간이 있는데 내부 네트워크와 외부 네트워크 사이의 구간을 말한다. 메일, 웹, FTP서버 등 외부 서비스를 통해 제공하거나 제공받아야 할 서버들을 두게 되는데 이런한 이유들 때문에 Reverse Proxy를 두어 실제 서비스는 내부에 위치 시키고 프록시 서버가 내부 서버와 통신을 해서 데이터를 받아오는 형식으로 동작하는 아키텍처를 구성하게 된다.

 

Load Balancer란

Reverse Proxy 역할을 하고 네트워크 또는 어플리케이션 트래픽을 다수의 서버에 분산시키는 장치입니다. 우리가 티켓팅을 한다고 쳤을 때 동시에 다수의 클라이언트가 서버에 트래픽을 주게 된다. 간혹 "서버가 터졌다." 이런 말을 하는데 정말 트래픽이 터진 것이다..;;;;

이런 대참사를 방지하기 위해 필요로 하는 것이 바로 로드밸랜싱, 로드밸런서 이다.

 

로드 밸런서는 어플리케이션의 용량(동시 사용자)과 신뢰성을 높이기 위해 사용된다. 어플리케이션 및 네트워크 세션의 관리 및 유지 관리와 관련된 서버의 부담을 줄이고 어플리케이션별 작업을 수행함으로써 어플리케이션의 전반적인 성능을 향상시키게 된다.

로드 밸런서는 일반적으로 레이어 4와 레이어 7의 두 가지 범주로 분류되는데, 레이어 4 로드 밸런서는 네트워크 및 전송 레이어 프로토콜(IP, TCP, FTP, UDP)에 있는 데이터에 대해 작동한다. 레이어 7 로드 밸런서는 HTTP와 같은 어플리케이션 레이어 프로토콜에서 있는 데이터에 기초하여 요청을 분산시킨다. 요청은 두 유형의 로드 밸런서에 의해 수신되고, 이 요청은 구성된 알고리즘에 기초하여 특정 서버로 분산됩니다. 일부 업계 표준 알고리즘은 다음과 같다.

  • 라운드 로빈
  • 가중치 기반 라운드 로빈
  • 최소 연결
  • 최소 응답 시간

 

스케일 업(Scale Up)은 기존 서버의 성능을 향상시키는 방법으로 이는 CPU나 메모리를 업그레이드하는 것과 같은 작업을 포함합니다. 스케일 아웃(Scale Out)은 트래픽이나 작업을 여러 대의 컴퓨터나 서버에 분산시켜 처리하는 방법입니다. 

 

단, 스케일 아웃을 하게 되면 서버가 여러 대가 되기 때문에 각 서버에 걸리는 부하를 고르게 나누기 위해서는 로드밸런싱이 필수적으로 동반되어야 합니다. 로드 밸런싱은 여러 서버나 컴퓨터 자원에 작업을 고르게 분산하는 기술입니다. 

 

장점

1) 애플리케이션 가용성

서버 장애 또는 유지 관리로 인해 애플리케이션 가동 중지 시간이 늘어 방문자가 애플리케이션을 사용할 수 없게 될 수 있다. 로드 밸런서는 서버 문제를 자동으로 감지하고 클라이언트 트래픽을 사용 가능한 서버로 리다이렉션하여 시스템의 내결함성을 높이기 때문에 로드 밸런싱을 사용하여 다음 태스크를 더 쉽게 수행할 수 있다.

  • 애플리케이션 가동 중지 없이 애플리케이션 서버 유지 관리 또는 업그레이드 실행
  • 백업 사이트에 자동 재해 복구 제공
  • 상태 확인을 수행하고 가동 중지를 유발할 수 있는 문제 방지

2) 애플리케이션 확장성

로드 밸런서를 사용하여 여러 서버 간에 네트워크 트래픽을 지능적으로 전달할 수 있다. 로드 밸런싱이 다음을 수행하므로 애플리케이션에서 수천 개의 클라이언트 요청을 처리할 수 있다.

  • 한 서버에서 트래픽 병목 현상 방지한다.
  • 필요한 경우 다른 서버를 추가하거나 제거할 수 있도록 애플리케이션 트래픽을 예측한다.
  • 안심하고 조정할 수 있도록 시스템에 중복성을 추가한다.

3) 애플리케이션 보안

로드 밸런서에는 인터넷 애플리케이션에 또 다른 보안 계층을 추가할 수 있는 보안 기능이 내장되어 있다. 이는 공격자가 서버 장애를 일으키는 수백만 개의 동시 요청으로 애플리케이션 서버를 가득 채우는 분산 서비스 거부 공격을 처리하는 데 유용한 도구이며, 로드 밸런서는 다음을 수행할 수도 있다.

  • 트래픽 모니터링 및 악성 콘텐츠 차단
  • 공격 트래픽을 여러 백엔드 서버로 자동으로 리다이렉션하여 영향 최소화
  • 추가 보안을 위해 네트워크 방화벽 그룹을 통해 트래픽 라우팅

4) 애플리케이션 성능

로드 밸런서는 응답 시간을 늘리고 네트워크 지연 시간을 줄여 애플리케이션 성능을 향상시킨다. 다음과 같은 몇 가지 중요한 태스크를 수행한다.

  • 서버 간에 로드를 균등하게 배포하여 애플리케이션 성능 향상
  • 클라이언트 요청을 지리적으로 더 가까운 서버로 리다이렉션하여 지연 시간 단축
  • 물리적 및 가상 컴퓨팅 리소스의 신뢰성 및 성능 보장