article thumbnail image
Published 2022. 10. 25. 23:56
728x90

 

 

 

Nginx 란 무엇일까?

Nginx 란?

 

Nginx는 경량의 고성능 웹 서버(Web Server) 입니다.

Nginx는 높은 트래픽 처리를 위해 개발되었다고 합니다. =)

 

좀 더 살펴보자면 과거에는 Apache 웹서버를 많이 사용하였지만 2000년대에 들어서며 컴퓨터의 보급량이 늘어났고 이용자도 늘어남에 따라 높은 트래픽을 감당 할 수 없었고 C10k 문제가 발생했다고 해요.

 

C10k 문제란?

C10k 문제는 동시에 많은 수의 클라이언트를 처리하도록 네트워크 소켓 을 최적화하는 문제라고 합니다.
C10k 라는 이름은 10,000개의 연결을 동시에 처리하기 위한 숫자 입니다.

높은 트래픽을 동시에 처리하는 것과 초당 처리하는 속도가 높은 것은 다른 개념입니다.
동시에 처리하는 것은 빠르지 않아도 효율적으로 스케줄링하는 것을 필요로 하죠. =)


 

스레드 기반은 하나의 커넥션 당 하나의 스레드를 점유한다. 즉, 불피요한 자원까지 점유를 하게됨.

 

기존 Apache 구조는 요청이 들어올 때마다 프로세스를 할당하는 구조였습니다. 즉, 이용자가 많아지면 그만큼 프로세스로 비례하여 증가하고, 결국 메모리 부족을 야기했죠. Apache의 장점이였던 확장성 덕분에, 다양한 모듈을 추가할 수 있었고 프로세스가 차지하는 리소스의 양도 증가한 상황이였습니다.

 

또한 많은 요청이 들어옴에 따라 cpu 코어는 계속해서 프로세스를 바꾸어가며 일을 해야 했고, 이를 Context-Switching 이라 하는데 즉,  cpu가 감당해야 하는 작업이 증가한 상황이였습니다. 이에따라 수많은 트래픽을 감당하기에는  Apache의 구조가 적합하지 않았습니다.

 

 

Nginx의 탄생

 

 

이를 보완하기 위해 러시아의 개발자 이고르 시쇼브(Igor Sysoev)가 2002년 Nginx 개발을 시작하여 2004년에 릴리즈를 하였습니다. Nginx의 주요 기능으로는 HTTP Server 로써의 역할로 정적 파일을 응답해주는 웹서버, Reverse Proxy Server 로써 요청으로부터 애플리케익션 서버에 로드밸런싱, Mail Proxy Server 가 있습니다.

 

Nginx의 구조를 살펴보면 Nginx는 하나의 Master Process다수의 Worker Process로 수성되어 실행이 됩니다.

 

- Master Process

설정 파일을 읽고, 유효성을 검사 및 Worker Process를 관리합니다.

 

- Worker Process

실질적으로 모든 요청은 Worker Process에서 처리를 합니다. Master Process에서 배정받은 listen socket을 통해 클라이언트와 커넥션을 형성하고, 해당 커넥션은 keep-alive 시간만큼 유지가 됩니다. Worker process는 커넥션을 하나만 담담하는 것이 아닌 형성된 커넥션에 아무런 요청이 없는 경우 새로운 커넥션을 형성 또는 이미 만들어진 기존의 커넥션에 요청이 들어오면 해당 요청을 처리합니다.

 

추가적으로 Nginx는 시간이 오래걸리는 요청 처리를 위해 이들을 모아 따로 처리하는 쓰레드 풀을 만들었습니다. 만약 Worker Process에서 특정 작업이 오래 걸릴경우 쓰레드 풀에 그 작업을 위임하고 다른 요청들을 처리하게 됩니다.

 

Worker Process는 일반적으로 cpu 코어 갯수만큼 생성되는데 이러면 코어가 담당하는 프로세스를 바꾸는 횟수를 줄일 수 있죠. 즉 cpu가 부가적인 작업을 하지 않아도 되니 cpu의 Context-Switching 사용을 줄일 수 있습니다.

 

 

Nginx는 멀티프로세스 싱글 스레드 방식으로 동작합니다. Event-Driven 방식으로 여러개의 커낵션을 Event Handler를 통해 비동기 방식으로 처리해 먼저 처리되는 것부터 실행을 하게 됩니다. 이러한 방식은 기존의 apache 방식과 비교하였을 때 요청이 없어 방치되던 프로세스와 컴퓨터 자원을 훨씬 효율적으로 쓸 수 있게 되는거죠. =)

 

Nginx의 장점

  • 기존의 apache 구조보다 동시 커넥션 수가 최소 10배 가량 증가하였고, 생성되는 프로세스 수도 적어 가볍고, 동일한 커넥션 수일 때 속도가 2배 가량 향상됩니다.
  • Master process는 동적으로 변경된 설정파일을 읽고 해당 설정에 맞게 worker process를 생성합니다. 그렇기 때문에 기존의 Worker process의 커넥션 형성을 막고, 처리하던 이벤트들이 모두 완료되면 해당 worker process를 종료하고 그 다음부터는 새롭게 설정이 변경된 Worker process로 이벤트들을 처리하게 되는거죠. =)

 

Nginx의 단점

  • 개발자가 기능을 추가하는 것을 시도 하였을 때 돌아가고 있던 worker process를 종료하는 상황이 생길 수 있어 직접 모듈을 만들어 사용하기가 어렵다고 합니다.

 

Nginx의 기능

 

리버스 프록시

Apache앞에 Nginx를 이용하여 리버스 프록시의 장점을 활용할 수 있음. 

 

로드밸런싱

Nginx 하나에 여러대의 서버가 연결되었을 때 한 서버에만 부하가 가지 않도록 요청을 분배해줍니다.(분산부하)

 

 

SSL 터미네이션

Nginx가 서버와는 http 통신을 하고 클라이언트와 https 통신을 합니다. 이러한 기능으로 서버가 복호화 과정을 담당하지 않게 해주어 서버는 비지니스 로직에 집중할 수 있도록 부하를 줄여줍니다. 일반적으로 Nginx와 서버는 같은 네트워크 상에 있기 때문에 http통신을 하여도 보안 이슈가 비교적 적다고 합니다. =)

 

 

캐싱

한번 서버로부터 받은 응답을 보관하고 클라이언트에게 응답합니다.

 


 

 

이러한 Nginx의 이점에도 불구하고 아직까지 Apache를 많이 사용하는 이유는 Apache의 안정성과 다양한 모듈을 자유롭게 추가할 수 있는 확장성으로 인함 이라고 합니다. =)

 

또한 Nginx는 윈도우에서는 제대로 된 성능을 보여주지 못하고 호환성이 높지는 않다고 해요!

 

 

 

 

(참고자료)

 

C10K부터 Event-Driven까지

하드웨어 자원이 충분함에도 불구하고 IO 처리방식의 문제 때문에 프로세스가 제대로 처리하지 못하는 문제. BSD 소켓을 처음 설계할 때 10K 클라이언트를 처리할 하드웨어 여력이 되지 않았다.

applefarm.tistory.com

 

 

Nginx 동작 방식부터 프록시, 로드밸런서까지

nginx란? Apache와 같은 웹 서버로 클라이언트로부터의 요청에 맞는 정적 파일을 응답해주는 WebServer로 사용되기도 하고, 동적인 리소스를 처리하기 위해 WAS로 요청을 전달해주기도 한다. 이러한 역

willseungh0.tistory.com

 

 

Nginx란 무엇인가?

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

velog.io

 

 

Nginx 이해하기 및 기본 환경설정 세팅하기

NGINX Nginx의 개요 엔진엑스(Nginx)는 Igor Sysoev라는 러시아 개발자가 동시접속 처리에 특화된 웹 서버 프로그램이다. Apache 보다 동작이 단순하고, 전달자 역할만 하기 때문에 동시접속 처리에 특화

whatisthenext.tistory.com

 

 

[Server] Ngnix 왜 사용할까?

Nginx 탄생 비포 애프터 비교해보자! 뭐가 그렇게 좋은걸까?

velog.io

 

728x90
반응형
복사했습니다!