본문 바로가기
책벌레와 벌레 그 사이 어딘가/개념쌓기

[개념쌓기]NginX? + 설치까지

by veganwithbacon 2022. 8. 23.
반응형

  Nginx란?

트래픽이 많은 웹사이트의 서버(WAS)를 도와주는 비동기 이벤트 기반구조의 웹 서버 프로그램이다

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

 

Nginx는 경량 웹 서버로,클라이언트로부터 요청을 받았을 때 요청에 맞는 정적 파일을 응답해주는 HTTP Web Server로 활용되기도 하고, Reverse Proxy Server로 활용하여 WAS 서버의 부하를 줄일 수 있는 로드 밸런서로 활용되기도 한다.

 

 

웹서버(Web Server)란 무엇일까? => 단순한 정적 파일 응답

주로 정적 콘텐츠(이미지,정적 HTML등)를 제공하기 위해 설게되었고 동적 콘텐츠 요청을 식별하여 앱서버로 요청을 전달하는 역할을 수행하는 서버다. 

 

WAS(Web Application Server) : 클라이언트 요청에 대해 동적 처리가 이뤄진 후 응답

 

 

  

  Nginx 흐름

 

  • Nginx는 Event-Driven 구조로 동작하기 때문에 한 개 또는 고정된 프로세스만 생성하여 사용하고,
    비동기 방식으로 요청들을 Concurrency 하게 처리할 수 있습니다.
    위의 그림에서 보이듯이 Nginx는 새로운 요청이 들어오더라도 새로운 프로세스와 쓰레드를 생성하지 않기 때문에 프로세스와 쓰레드 생성 비용이 존재하지 않고,적은 자원으로도 효율적인 운용이 가능합니다.
    이러한 Nginx의 장점 덕분에 단일 서버에서도 동시에 많은 연결을 처리할 수 있습니다.

 

  역방향 프록시(reverse proxy) 

:  클라이언트의 요청을 받아 웹서버로 전달하여 응답을 받은 후 다시 클라이언트에 전달하는 역할을 수행하는 서버

   즉,클라이언트와 웹 서버 사이에 존재하는 서버

 

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

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

 

이러한 특징때문에 몇가지 이점이 주어진다

1. 로드 밸런싱 

만약 요청이 많은 사이트를 운영하는 경우 하나의 서버가 아닌 여러대의 서버를 두고 운영을 하게 된다.

그럴경우에는 특정 서버에만 요청이 몰리지 않게 여러대의 서버에 골고루 분포하게 하는 역할을 엔진엑스가 수행한다.

2.공격으로부터 보호

엔진엑스를 사용하면 웹사이트나 서비스에서 실제서버의 IP주소를 쓰지않기 때문에 해킹이나 디도스공격이 들어와도

엔진엑스 프로그램을 공격하지, 실제 서버에는 공격을 할 수가 없다.

3.캐싱

엔진엑스는 콘테츠를 캐싱할 수 있어 결과를 더 빠르게 응답하여 성능을 높일 수 있다.

 

엔진엑스를 설치 후에는 아래 명령어 들로 시작,종료,재시작을 손쉽게 하는 것이 가능하다.

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

 


  NginX의 구조

 

NginX는 하나의 Master Process와 다수의 Worker Process로 구성되어 실행된다. Master Process는 설정 파일을 읽고, 유효성 검사 및 Worker Process를 관리한다.

모든 요청은 Worker Process에서 처리한다. 엔진엑스는 이벤트 기반 모델을 사용한다고 위에 적었다. Worker Process 사이에 요청을 효율적으로 분배하기 위해 OS에 의존적인 매커니즘을 사용한다.

Worker Process의 개수는 설정 파일에서 정의되고, 정의된 프로세스 개수와 사용 가능한 CPU코어 숫자에 맞게 자동으로 조정된다.

 


++++MacOS를 사용할 경우

homebrew를 사용하면 NGINX를 설치하는 것이 가능하다.

brew install nginx

 

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

 

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

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

 

특히 대용량의 트래픽을 받아서 처리해야 하는 경우에는 앱서버만 둔다면 처리가 거의 불가능하기 때문에 웹서버를 통해 처리하는 것이 훨씬 효율적인 방법 중 하나가 될 수있다.

 

 

 

참고 자료 : 

https://ssdragon.tistory.com/60

https://velog.io/@wijihoon123/Nginx%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

https://dkswnkk.tistory.com/513

https://medium.com/@su_bak/nginx-nginx%EB%9E%80-cf6cf8c33245

https://sonnyeonyida.tistory.com/29

반응형

댓글