Nginx는 오픈소스 웹 서버 및 리버스 프록시 서버 소프트웨어로, 다양한 운영 체제에서 사용되며 높은 성능과 안정성을 가지고 있습니다. Nginx는 이벤트 기반 구조를 사용하여 비동기적으로 동작하며, 적은 자원으로 많은 연결을 처리할 수 있어 인기 있는 소프트웨어입니다.
이전에 작성한 Nginx에 대한 소개 글에 이어 Nginx의 구조에 대해 살펴보겠습니다.
https://damecasol.tistory.com/86
[Nginx] Nginx 소개
사내 솔루션을 ASIS JSP + Spring로 구성된 WAS 단일서버에서 Vue.js + Spring으로 UI 차세대를 진행하였습니다. 그에따라 Web서버를 구성해야 할 필요성이 생겼으며, Nginx로 Web서버를 구성하기 위해 찾은
damecasol.tistory.com
Nginx의 구조
NGINX는 이벤트 구동, 비동기 및 비차단 모델을 지원하여 마스터-슬레이브 아키텍처로 구성되어있습니다.
- Master process : 모든 워커 프로세스를 관리하는 부모 프로세스입니다.
- Worker process : 클라이언트 요청을 처리하는 자식 프로세스입니다.
- Event module : Nginx의 비동기 이벤트 처리 엔진으로, I/O 처리를 담당합니다.
- Cache module : 자주 요청되는 리소스를 캐시하여 처리 속도를 높입니다.
- HTTP module : HTTP 요청 및 응답 처리를 담당합니다.
- Reverse proxy module : 웹 서버에서 클라이언트 요청을 받아 백엔드 서버로 전달하는 역할을 합니다.
- Load balancing module : 여러 백엔드 서버로 부하를 분산하는 로드 밸런싱을 수행합니다.
- SSL module : SSL/TLS 암호화 연결을 지원합니다.
위의 이미지에서 핵심 부분 3가지를 조금 더 정리하면 다음과 같습니다.
Master Process
클라이언트의 요청에 따라 작업자에게 작업을 할당합니다. 작업자에게 작업이 할당되면 마스터는 작업자의 응답을 기다리지 않는 클라이언트의 다음 요청을 찾습니다. 작업자로부터 응답이 오면 마스터가 클라이언트에 응답을 보냅니다.
Worker Process
워커는 NGINX 아키텍처의 슬레이브이며 마스터를 리스닝합니다(원문 heed). 각 워커는 단일 스레드 방식으로 한 번에 1000개 이상의 요청을 처리할 수 있습니다. 프로세스가 완료되면 응답이 마스터로 전송됩니다. 단일 스레드는 다른 메모리 공간 대신 동일한 메모리 공간에서 작업하여 RAM 및 ROM 크기를 절약합니다. 다중 스레드는 다른 메모리 공간에서 작동합니다.
Cache
Nginx 캐시는 서버에서 가져오는 대신 캐시 메모리에서 가져와 페이지를 매우 빠르게 렌더링하는 데 사용됩니다. 페이지에 대한 첫 번째 요청 시 페이지가 캐시 메모리에 저장됩니다.
정리
Nginx의 구조를 알아보면서 마스터-슬레이브 아키텍처, 그리고 Nginx가 멀티프로세스 - 단일스레드 방식으로 작동한다는 것을 알게 되었습니다.
위의 내용에 대해서는 후에 더 정보를 찾아봐야 겠습니다.
참고자료
https://www.nginx.com/blog/inside-nginx-how-we-designed-for-performance-scale/
Inside NGINX: Designed for Performance & Scalability
Take a deep dive inside NGINX and learn why NGINX is perfectly suited for applications and servers that require high performance and scalability
www.nginx.com
https://medium.com/@premsuryamj/nginx-architecture-9f97cf7887e2
NGINX — Architecture
NGINX is a web server is used to render the pages that we have developed using HTML, CSS, and JavaScript. It is one of the topmost web…
medium.com
'IT > WEB' 카테고리의 다른 글
[Nginx] Nginx 소개 (0) | 2023.04.05 |
---|---|
[Web] URL Encoding (0) | 2022.07.17 |
[WEB]Session이란? (0) | 2022.06.14 |