(NGINX) NGINX란?

Su Bak
4 min readSep 18, 2021

--

NGINX는 최신 웹의 증가하는 요구를 지원하기 위해 개발된 고성능 웹서버입니다. NGINX는 높은 성능, 높은 동시성 그리고 낮은 자원 사용에 중점을 두고 있습니다.

웹서버(web server) : 주로 정적 콘텐츠(이미지나 정적 HTML 등)를 제공하기 위해 설계되었으며 동적 콘텐츠 요청을 식별하여 앱서버(app server)로 요청을 전달하는 역할을 수행하는 서버.

NGINX는 대부분 웹서버로 많이 알려져있지만 사실 NGINX는 역방향 프록시입니다.

역방향 프록시(reverse proxy) : 클라이언트의 요청을 받아 웹서버로 전달하여 응답을 받은 후 다시 클라이언트에 전달하는 역할을 수행하는 서버. 즉, 클라이언트와 웹서버 사이에 존재하는 서버.

NGINX가 역방향 프록시이기 때문에 클라이언트의 요청을 중간에 가로채어 응답을 받는 실제 서버에 전달하고 서버에서 응답이 오면 요청을 했던 클라이언트에게 전달하는 역할을 수행합니다.

서버 앞에서 클라이언트의 요청을 가로채는 역할을 수행하다 보니 클라이언트들은 직접적으로 실제 서버에는 통신할 수 없다는 특징을 가지게 됩니다.

NGINX가 클라이언트와 서버 사이에 있다보니 클라이언트와 서버가 직접적으로 통신을 주고 받는건 NGINX가 되는 것이죠.

그렇다보니 몇가지의 큰 이점이 주어지게 됩니다.

  1. 로드 밸런싱 : 요청이 많은 사이트를 운영하는 경우 하나의 서버가 아닌 여러 대의 서버를 두고 운영을 하게 됩니다. 그럴 경우 특정 서버에만 요청이 몰리지 않도록 하는 역할을 NGINX가 수행하게 됩니다.
  2. 공격으로 부터 보호 : NGINX를 사용하면 웹사이트나 서비스에서 실제 서버의 IP 주소를 필요로 하지 않기 때문에 DDoS와 같은 공격이 들어와도 NGINX를 공격하게 되지 실제 서버에는 공격이 들어오는 것을 막을 수 있습니다.
  3. 캐싱 : NGINX는 콘텐츠를 캐싱할 수 있어 결과를 더 빠르게 응답하여 성능을 높일 수 있습니다.

이런 장점을 가진 NGINX가 만들어진 계기는 매우 개발자(?)스러운 이유 때문입니다.

NGINX가 만들어지기전 Igor Sysoev 라는 러시아인 개발자가 오래된 웹서버들이 10,000개 이상의 동시 요청을 처리하지 못하는 것에 실망해 2002년 부터 만들기 시작하여 2004년에 릴리즈 된것이라고 합니다.

그리고 NGINX의 또다른 특징으로는 설정 파일이 있는데요. 이 설정 파일의 경우 다양한 스크립트 언어로 부터 영감을 받았기 때문에 많은 설정을 쉽게 설정하는 것이 가능합니다.

이 글은 간단히 NGINX에 대해 소개하는 글이라 설정 파일을 자세히 다루진 않지만 아래의 주소에서 설정 파일을 예시를 확인하실 수 있습니다.

MacOS를 사용하실 경우 homebrew를 사용하여 손쉽게 NGINX를 설치하는 것이 가능합니다. 아래 명령어 한번이면 끝이죠.

brew install nginx

매우 간단하죠?

NGINX를 설치 후 아래 명령어 들로 시작, 종료, 재시작을 손쉽게 하는 것이 가능합니다.

nginx : NGINX 시작
nginx -s stop : NGINX 종료. -s는 signal을 뜻하며 stop, quit, reopen, reload 할지를 지정하는 옵션입니다.

웹서버와 앱서버는 각각 수행하는 역할에 차이가 있기 때문에 명확히 구분하는 것이 중요합니다.

특히 대용량의 traffic을 받아서 처리해야 하는 경우 앱서버만 두어서는 처리가 거의 불가능하기 때문에 웹서버를 통해 처리하는 것이 효율적인 방법 중 하나가 될 수 있습니다.

--

--

Su Bak

Backend Developer. Mainly use JavaScript but try not to have language constraints. Always trying to acquire new knowledge