본문 바로가기
클라우드, 인프라

nginx 정의

by dharana7723 2021. 12. 28.

nginx는 비동기 event-driven기반의 구조로 다수의 연결을 효과적으로 처리가 가능합니다. 대부분 코어 모듈이 아파치보다 적은 리소스로 더 빠르게 동작가능하며, 더 작은 쓰레드로 클라이언트의 요청들을 처리 가능합니다.

 

nginx는 아파치와 비교를 많이 하는데 아파치와 nginx의 가장 큰 차이는 쓰레드 방식과 event-drive의 차이라고 합니다. 쓰레드 기반은 하나의 커넥션 당 하나의 쓰레드를 사용하지만, event-driven방식은 여러 커넥션을 모두 event-handler를 통해 비동기 방식으로 처리해서 먼저 처리되는 것부터 로직이 진행됩니다.

 

nginx가 사용될 수 있는 곳은 정적 파일을 처리는 web server의 역할- HTTP server의 역할-과 로드 밸런싱 기능을 수행하는 - 클라이언트의 요청을 application 서버에 배분해 부하를 분산하는- reverse proxy server 등이 있습니다.

 

좀 더 정리하자면,

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

 

nginx는 아파치의 C10K 문제점( 한 시스템에 동시 접속자수가 1만명이 넘어갈 때 효율적인 방안)을 위해 만들어진 이벤트 드라이븐 구조의 웹 서버 sw라고 합니다. OSI Layer 중 어플리케이션 레벨 아래의 레벨에서 nginx같은 웹 서버가 http 통신을 담당하게 됩니다.

 

이러한 정보를 찾아보면서 좀 더 직관적으로 nginx에 대해 이해할 수 있었고 구조를 보다 직접적으로 이해했습니다.

다음에 직접 사용할때 좀 더 흥미로운 기분으로 활용할 수 있을 것 같습니다.