Nginx란 무엇인가? (대표적인 설계 방식 및 구조) - 마티의 지식저장소
IT/서버 / / 2023. 10. 25. 10:17

Nginx란 무엇인가? (대표적인 설계 방식 및 구조)

Nginx는 보통 실무에서 WEB/WAS를 구성한다고 할 때 WEB 서버로 많이 사용되는 서버 소프트웨어입니다. 가볍고 오픈 소스이기 때문에 토이 프로젝트에서도 많이 사용됩니다.

 

목차

    Nginx 동작 원리 및 구조

    Nginx는 Event-Driven 구조로 동작하기 때문에 한 개 또는 고정된 프로세스만 생성하여 사용합니다. 또한 비동기 방식으로 요청들을 Concurrency 하게 처리할 수 있습니다. 이는 새로운 요청이 들어와도 새로운 프로세스와 쓰레드를 생성하지 않기 때문에 따로 비용이 들지 않습니다.

     

    이러한 특징 때문에 Nginx 단일 서버에서도 동시에 많은 연결을 처리할 수 있게 해줍니다. (Apache는 클라이언트 요청에 따라 쓰레드를 생성하지만 Nginx는 미리 쓰레드(Worker Process)를 만들어 두고 거기서 계속 일을 하게 한다.)

    Nginx의 아키텍처는 단일 프로세스 및 다중 프로세스 모델로 구성되어 있으며, 이는 Nginx의 높은 성능, 확장성 및 안정성을 가능하게 합니다. Nginx는 크게 Master ProcessWorker Processes로 구성되어 있습니다.

     

    Master Process는 모든 작업 프로세스를 관리합니다. 이 마스터 프로세스는 Nginx 시작 및 중지, 설정 파일 로드 및 재로드, 신규 프로세스 생성 등과 같은 관리 작업을 담당합니다.

     

    Worker Processes는 실제로 클라이언트 요청을 처리하는 본래의 Nginx 프로세스입니다. 워커 프로세스는 다중 프로세스 또는 다중 스레드 모델로 동작하며, 각 프로세스 또는 스레드는 독립적으로 클라이언트 요청을 처리합니다. 이를 통해 Nginx는 다중 CPU 코어를 효과적으로 활용하고 동시 다수의 연결을 처리할 수 있습니다. Worker Process는 보통 CPU 코어 개수만큼 생성합니다.

     

     

    결국 Master Process가 다수의 Worker Process를 관리하는 형태로 구성되어 있습니다.

     

    그리고 Nginx는 설정 파일에 의해 제어되는데 그 설정파일은 nginx.conf입니다. 해당 파일에는 가상 호스트, 리버스 프록시, 로드 밸런싱, 캐싱 및 보안 등의 설정이 포함되어 있습니다.

    Nginx 대표적인 설계 방식

    Nginx는 다양한 웹 서버 및 프록시 서버 구성 방식을 지원하며, 대표적인 설계 방식으로는 아래의 7가지가 있습니다. 주로 백엔드 앞 단에서 Proxy 서버 겸 web 서버로 사용하는 경우가 많습니다. 어떻게 보면 7개의 설계 방식을 본인이 원하는 환경과 기능에 따라 취사 선택하여 사용하실 수 있습니다.

     

    1) Reverse Proxy

    웹 서버 앞에서 리버스 프록시로 사용되는 경우가 많습니다. 이 경우, Nginx는 클라이언트 요청을 받아 웹 서버로 전달하고 응답을 클라이언트에게 반환합니다. 이를 통해 로드 밸런싱, SSL 종료, 캐싱, 보안 등 다양한 기능을 구현할 수 있습니다.

     

    2) Load Balancer

    여러 웹 서버 뒤에서 로드 밸런서로 사용될 수 있습니다. 클라이언트 요청을 여러 웹 서버에 분배하여 웹 서버 부하를 분산시키고 가용성을 향상하는 역할을 수행합니다.

     

    3) Web Server

    웹 서버로 사용될 수 있습니다. 정적 콘텐츠(HTML, 이미지, CSS, JavaScript)를 서빙하는 데 효과적이며, 소수의 동적 요청도 처리할 수 있지만 주로 WAS와 함께 사용됩니다.

     

    4) SSL 종료 (SSL Termination)

    SSL/TLS 암호화 트래픽을 해독하고 원격 서버로는 암호화되지 않은 트래픽으로 전달하는 역할을 수행합니다. 이렇게 함으로써 백엔드 서버에서 SSL 암호화를 처리하는 부담을 줄일 수 있습니다.

     

    5) 캐싱

    프록시 서버로서 클라이언트 요청에 대한 응답을 캐시에 저장하여 동일한 요청에 대한 응답을 빠르게 반환하도록 할 수 있습니다. 이는 웹 서버의 부하를 줄이고 Client에게 좀 더 향상된 경험을 제공할 수 있게 해 줍니다.

     

    6) 웹 방화벽

    보안 정책을 적용하고 악의적인 트래픽을 차단하는 데 사용될 수 있으며, 모니터링 및 로깅을 통해 보안 사고 탐지 및 대응이 지원 가능합니다.

     

    7) Docker 환경에서의 프록시

    도커 환경에서 컨테이너 간 통신을 관리하고 외부 요청을 컨테이너로 라우팅 하기 위한 프록시로 사용될 수 있습니다.