NGINX를 로드밸런서로 활용하는 법 with.NodeJS

우리밋_woorimIT
모던 애자일
Published in
7 min readJan 10, 2022

모-하🤎
안녕하세요 모던 애자일 1기 우리밋입니다.

이 글을 보고 계신 여러분은 아마 어느 정도의 백엔드 경험과 지식을 갖추고 있으며, Nginx를 로드밸런서로서 사용하고자 하거나 로드밸런싱에 대해 공부해보고자 하는 것이라 생각합니다.

포스팅 하단에는 동시 요청을 처리하기 위한 방법을 추가로 소개합니다.

Nginx, Node.js, MySQL을 사용한 환경에서의 동시 요청 처리 방법입니다.

필자는 로드밸런싱과 Nginx에 관련된 자료를 50개 이상을 참고하여 작성하는 것임을 알아주었음 한다. 정말 혹시나 잘못된 정보가 있다면, 댓글로 부탁드립니다.

로드밸런싱 구조.jpg

무턱대고 사용법을 공부하기 보다는, 로드밸런싱에 대한 개념을 먼저 잡는 것이 이해와 습득에 도움이 될 것입니다.

  • Nginx에 대해 잘 모른다면 아래 포스팅을 참고하세요. (영상 강의도 준비되어 있습니다.)

로드밸런싱이란

서버에 가해지는 부하(=로드)를 분산(=밸런싱)해주는 장치 또는 기술입니다. 아래 영상은 기본 개념에 대해 딱 필요한 정보를 아주 깔끔하고, 이해하기 좋게 설명된 강의라 생각합니다. 참고하면 도움이 될 것입니다.

어라운드허브 스튜디오.youtube

사업의 규모가 확장되고, 클라이언트의 수가 늘어나게 되면 기존 서버만으로는 정상적인 서비스가 불가능하게 되는데, 이런 증가한 트래픽에 대처할 수 있는 방법은 크게 두 가지 입니다.

Scale up : 서버 자체의 성능을 높이는 것
Scale out : 여러 대의 서버를 두는 것

Scale-out의 방식은 여러 대의 서버로 트래픽을 균등하게 분산해주는 것입니다. 이러한 로드밸런싱 환경 구축은 싫더라도 반드시 필요합니다.

로드밸런싱의 장점

핵심 : 무중단 서비스 & 배포가 가능하다.

서버를 여러 개 두고, 로드 밸런서가 각 서버로 부하를 분산시켜주기 때문에 가능한 일입니다.

즉, 하나의 서버를 버전업(배포)하기 위해 Down 시킨다 하더라도 다른 서버가 켜져있기 때문에 실제 클라이언트 사용자는 서버중 1개가 Down된 사실을 인지하지 못합니다.

로드밸런싱의 종류

1. 하드웨어 단에서의 로드밸런싱

(1) L4 로드밸런싱

  • OSI 7계층 중 4계층 단에서 부하를 분산시켜준다.
  • IP & PORT를 기준으로 분산

(2) L7 로드밸런싱

  • OSI 7계층 중 7계층 단에서 부하를 분산시켜준다.
  • 4계층을 지나므로 4계층의 기능을 포함하여, 일반적으로 더 좋은 성능을 가진다.
  • IP & PORT & Http Host & URL 등을 기준으로 분산

2. 소프트웨어 단에서의 로드밸런싱

아래 설명하는 프로그램들은 기본적으로 Reverse Proxy를 기반으로 하여 동작합니다.

로드밸런싱만을 위해 개발된 프로그램이 아니기에 전문적이지 않습니다. 다만, 기본적인 로드밸런싱이 요구하는 기능은 갖추고 있기에 사용할 때의 이점이 있는 것은 확실합니다. 또한, 프로그램만을 이용하여 구축하면 되기에 비용적으로 훨씬 저렴하며, 구축이 간편합니다.

(1) Nginx

  • 오픈소스 소프트웨어
  • 아쉽게도 무료 버전에서는 로드밸런싱의 일부 기능은 사용할 수 없다. (ex: Health Check)
  • 기본적인 로드밸런싱은 가능하나 로드밸런싱의 기존 성격을 띄면서 원하는대로 동작시키기 위해서는 유료버전인 Nginx Plus를 사용해야 한다.

(2) HAProxy (High Available Proxy)

  • 오픈소스 소프트웨어
  • Nginx와 달리 Health Check 등을 지원한다.

Nginx와 로드밸런싱의 오해

1. Nginx를 L4 계층의 로드밸런서와는 다른 개념임을 유의하자.

  • 실제로 이를 정확히 명시해둔 자료를 찾기까지 상당히 오래걸렸고, L4나 L7으로 명시되어 있는 자료도 있었습니다.

2. 로드밸런스는 기본적으로 무중단 서비스를 위해 이용하는 것이며, 구축 과정이나 사용한 시스템에 따라 성능을 향상 시킬 수도 있다. 일반적으로는 큰 성능의 개선을 기대하기는 어렵다는 것.

  • Nginx에서 로드밸런싱을 위해 제공하는 기본 모듈인 ‘Upstream Module’은 자체적으로 로드밸런싱을 실행해주고, 성능도 개선시켜주는 장점이 있습니다. 다만, 실제 다양한 테스트를 해본 결과 네트워크 상태에 따라 다른 결과가 나타났습니다. 결론, 성능 개선이 된다고는 하나 결과적으로는 비슷했습니다.
  • Nginx로 로드밸런싱을 시도할 때 동시에 요청을 많이 처리할 수 있게 하기 위해서는 로드밸런스의 개념보다는 Nginx와 구현하려는 프로젝트에 대한 환경, 그리고 인프라 전반에 대한 이해가 있어야 합니다.

NGINX를 활용한 로드밸런싱 구현

아래 자료는 마크다운으로 작성한 뒤 import하여 불러온 것입니다.

모던 애자일을 Follow하고 유익한 정보를 더 빠르게 만나보세요!

모애 화이팅!
모-바🤎

참고 자료

1. [번역] 최신 네트워크 로드 밸런싱 및 프록시 소개

2. HAProxy 와 Nginx 의 로드밸런싱

3. 무중단 배포란? 무중단 배포를 위한 환경 이해하기

4. 로드밸런서 (L4, L7, NginX, HAProxy)

5. nginx upstream 성능 최적화

6. nginx no live upstream 에러 이해하기

7. nginx 총정리

8. nginx 성능 향상시키기

--

--

우리밋_woorimIT
모던 애자일

코딩/개발 유튜브 ‘우리밋_woorimIT’ 을 운영하고 있습니다.