Study/기술 및 용어 정리

Ngnix 개념 및 Apache 와 비교

토기발 2023. 6. 16. 16:51

다른 기술스택들을 참고하던 와중 Ngnix 라는 단어를 많이 보게 되었다.

평소 프로젝트는 Apache로만 진행했기 때문에 어떤 점이 다른지 공부가 필요할 것 같아 정리해 보았다.

 

웹서버에 대해서는 이 포스팅에서 설명했으니 생략!

 

Web Server와 WAS의 차이

WS(Web Server) Http 프로토콜을 기반으로, 클라이언트의 요청을 서비스하는 기능을 담당 비즈니스 로직을 넣을 수 없음 정적 컨텐츠 제공 - was를 거치지 않고 바로 제공 동적 컨텐츠 제공을 위한 요

dsdsds.tistory.com

 

 


Nginx

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

클라이언트로부터 요청을 받았을 때 요청에 맞는 정적 파일을 응답해주는 HTTP Web Server로 활용되기도 하고,

Reverse Proxy Server로 활용하여 WAS 서버의 부하를 줄일 수 있는 로드 밸런서로 활용되기도 한다.

 

 

Apache 서버와의 차이점

 

 

 

Apache는 요청이 들어오면 connection을 생성한다. 그래서 새로운 클라이언트의 요청이 올 때마다 새로운 프로세스 또는 스레드를 생성한다.

이 아키텍쳐의 장점은 개발자가 다양한 모듈을 만들어 서버에 빠르게 기능을 추가할 수 있다는 것이다. (확장성이 높음)

더불어 요청을 받고 응답을 처리하는 과정을 하나의 서버에서 해결할 수 있다.

 

단점은 요청마다 스레드가 생성되기 때문에 접속하는 사용자가 많으면 스레드가 그만큼 생성되어 자원 소모가 커진다.

더불어 확장성이 좋다는 것은 리소스가 많다는 뜻이기도 하기 때문에 프로그램이 무거워지며, 많은 connection 요청이 들어오면 context switching을 많이 하기에 CPU 부하가 증가한다.

 

 

 

 

 Nginx는 Event-Driven 구조로 동작하기 때문에 한 개 또는 고정된 프로세스만 생성하여 사용하고, 비동기 방식으로 요청들을 Concurrency 하게 처리할 수 있다.  Nginx는 새로운 요청이 들어오더라도 새로운 프로세스와 스레드를 생성하지 않기 때문에 프로세스와 스레드 생성 비용이 존재하지 않고 적은 자원으로도 효율적인 운용이 가능하다.

(동시 커넥션 양 100~1000배 증가, 동일한 커넥션 수일 때 속도 2배 향상) 

 

단점으로는 개발자가 작동중인 Worker Process를 종료할 경우 해당 Worker Process가 관리하고 있던 커넥션과 관련된 요청을 더이상 처리할 수 없게 된다. 그래서 개발자가 직접 모듈을 만들기가 어렵다.

 

Nginx의 구조

 

Nginx는 하나의 Master Process와 다수의 Worker Process로 구성되어 실행된다.

Master Process는 설정 파일을 읽고, 설정에 맞게 Worker Process를 생성한다.

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

Worker Process가 만들어질 때 각자 지정된 listen 소켓을 배정받고, listen 소켓에 클라이언트의 요청이 들어오면 커넥션을 형성하고 그 요청을 처리한다. 

커넥션은 정해진 keep alive시간만큼 유지된다.

 

커넥션이 형성되었다고 해서 워커프로세스가 해당 커넥션 하나만 담당하지는 않고, 형성된 커넥션에 요청이 없으면 새로운 커넥션을 형성하거나 이미 만들어진 커넥션에 들어온 요청을 처리한다.

 

 

 

 

Nginx는 이벤트 기반 모델이라고 부른다. 

(이벤트 : 커넥션 형성, 커넥션 제거 및 새로운 요청을 처리하는 것)

이벤트들은 OS커널이 큐 형식으로 Worker Process로 전달한다.

이벤트들은 큐에 담긴 상태에서 Worker Process가 처리할 때까지 비동기 방식으로 대기한다. 

Worker Process는 하나의 스레드로 이벤트를 꺼내서 처리해나간다. 

 

Apache의 경우 요청이 없다면 프로세스가 방치되지만, Nginx는 Worker Process가 끊임없이 일하기 때문에 서버 자원을 효율적으로 사용할 수 있다. 

 

 

 


 

참고

 

https://aosabook.org/en/posa/warp.html

https://icarus8050.tistory.com/57

https://youtu.be/6FAwAXXj5N0

 

'Study > 기술 및 용어 정리' 카테고리의 다른 글

[AWS] AWS의 개념 및 특징 (+EC2)  (0) 2023.06.17
클라우드란?  (0) 2023.06.16
[Spring JPA] JPA의 개념과 장단점  (0) 2023.06.15
Docker란?  (0) 2022.07.25
Spring과 Spring Boot의 개념과 차이  (0) 2022.07.22