Nginx란

Evie·2024년 11월 26일
post-thumbnail

⚠️ 선행 지식 필요

이번 포스팅은 Nginx에 대해 다루고 있습니다.
Nginx가장 보편적인 웹 서버 중 하나이며, 프록시 관련 기능도 갖추고 있습니다. 따라서 웹 서버와 WAS, 프록시와 그 종류에 대해서 기본적인 지식을 갖추고 읽는 것을 추천드립니다.

Nginx

Nginx란

nginx ("engine x") is an HTTP web server, reverse proxy, content cache, load balancer, TCP/UDP proxy server, and mail proxy server. Originally written by Igor Sysoev and distributed under the 2-clause BSD License. (nginx 공식 사이트)


nginx ("engine x")는 HTTP 웹 서버, 리버스 프록시, 컨텐츠 캐시, 로드밸런서, TCP/UDP 프록시 서버, 그리고 메일 프록시 서버입니다. Igor Sysoev가 처음 작성했고, BSC 라이선스 2항에 의거해 배포됩니다. (*주: BSC 라이선스는 오픈소스 라이선스의 한 종류입니다.)

Nginx는 기본적으로 경량 웹 서버입니다. 높은 안정성과 대규모의 커뮤니티, ~등을 기반으로 하여 현재 가장 많이 쓰이는 웹 서버 중 하나인데요.

Nginx의 구성

Nginx는 단일 마스터 프로세스, 다수의 워커 프로세스, 프록시 캐시, 캐시 로더와 캐시 매니저로 구성되고, 이 구성 요소들을 이용해서 Event-Driven 방식으로 동작합니다.

마스터 프로세스

실제로 일하는 건 워커 프로세스이고 마스터 프로세스는 워커 프로세스를 비롯한 구성 요소 전체를 관리하는 역할이죠.

  • 구성 파일을 읽고, 유효성을 검사합니다.
  • 워커 프로세스를 관리합니다. 시작하거나 종료하고, 삭제하기도 합니다.
  • 소켓을 열거나 바인딩하고 닫습니다.

워커 프로세스

직접적으로 웹 서버의 기능을 수행하는 모듈입니다.
위에서 말했듯이 여러 개가 생성될 수 있기도 하고요.

  • 클라이언트의 연결을 수락합니다.
  • 리버스 프록시 및 필터링 기능을 제공합니다.

프록시 캐시

프록시 서버에서 캐싱한 데이터를 저장하는 곳입니다.

  • 캐시 메모리입니다.

캐시 로더

  • 온디스크 캐시 항목을 확인하고, Nginx 메모리 내의 데이터베이스를 캐시 메타데이터로 채웁니다.

캐시 매니저

장애가 발생할 경우 마스터 프로세스에 의해 다시 시작됩니다.

  • 캐시 만료 및 무효를 담당합니다.

Nginx의 작동 방식

  1. Nginx가 실행되면 우선적으로 마스터 프로세스가 생성됩니다.
    마스터 프로세스는 설정 파일을 읽고 워커 프로세스를 생성합니다.
    생성된 워커 프로세스는 내부에 listen 소켓을 배정받습니다.
  2. 클라이언트에 요청이 들어오면 마스터 프로세스가 소켓에 커넥션을 형성하고 처리합니다.
    이 때, 커넥션은 여러 개가 구성될 수 있으며 정해진 keep-alive-time만큼 유지됩니다.
  3. 서버에서 처리해야 할 작업 / 상황을 이벤트 event라고 합니다. 이벤트는 큐에 담긴 이후 워커 프로세스의 처리 시점까지 비동기 방식으로 대기합니다.
    3-1. 워커 프로세스는 하나의 스레드로 이벤트를 꺼내 처리합니다.
    3-2. 만약 요청의 시간이 오래 걸리면 Thread pool을 만들어 요청을 따로 수행하도록 위임하고, 워커 프로세스는 다른 이벤트를 처리합니다.

3번을 통해 코어가 담당하는 프로세스 변경 횟수를 줄이면서 CPU의 컨텍스트 스위칭을 줄입니다.

Nginx의 특장점

  • 비동기 처리로 인한 고성능 / 메모리 효율성
    • 커넥션 발생 시 Event-Driven Model에 따라 비동기적으로 처리하고, 이에 따라 동시에 여러 처리를 하므로 동시접속 처리가 빠릅니다.
    • 코어 수만큼 워커 프로세스가 생성되기 때문에 메모리 사용량이 적습니다.
  • Reverse Proxy / Load Balancer 가능
    • 서버 바로 앞단에 웹 서버인 Nginx를 사용하여 Reverse Proxy, Load Balancer의 역할을 수행하도록 할 수 있습니다.
  • SSL 지원
    • Nginx는 HTTPS 인증서를 제공합니다.
  • 데이터 압축 가능
    • 데이터가 Text일 경우 gzip을 이용해 데이터를 압축할 수 있습니다.
  • 캐싱

마무리

작동 방식 부분에도 사실 시각 자료를 넣고 싶었으나... 그리기에 너무 어려워 아쉽게 생략하였습니다.

이번 글에 혹여 틀린 점이 있을 경우 피드백 주시면 수정하도록 하겠습니다.
글 읽어주셔서 감사합니다!

참고 자료

profile
끄적그적

0개의 댓글