[Web] Nginx

이수진·2022년 2월 10일
0

저번에 웹서버와 WAS에 대해서 공부하고 알아봤는데,
이번엔 웹서버중 현재 가장 많이 쓰이고있는, 웹 서버 중 점유율이 무려 35%나 되는 Nginx에 대해서 알아보겠습니다.

1. Nginx란 무엇인가

Nginx란

트래픽이 많은 웹사이트를 위해 확장성을 위해 설계한 비동기 Event-Driven 구조의 웹서버입니다.
OSI7 Layer 중 application level 아래의 level에서 Nginx 같은 웹서버가 HTTP 통신을 담당합니다.

Nginx는 단순히 정적 파일을 호스팅 해주는 웹서버입니다.
그리고 일명, "더 적은 자원으로 더 빠르게 서비스를 제공"의 컨셉을 갖고 있습니다.


2. Apache vs Nginx

Nginx에 대해 중점적으로 다룰 것이기 때문에, Apache웹서버는 간단하게 살펴보고 넘어가겠습니다.

2-1) Apache의 동작 방식과 한계

  • Apache는 클라이언트 접속마다 Process 혹은 Thread를 생성하는 구조입니다.
  • 1만 클라이언트로부터 동시접속 요청이 들어온다면 CPU와 메모리 사용이 증가하고, 추가적인 Process나 Thread 생성비용이 드는 등 대용량 처리에서 한계를 보입니다.
  • 또한, Apache서버의 프로세스가 blocking 될 때 요청을 처리하지 못하고 처리가 완료될 때까지 대기상태에 있습니다. 이는 Keep Alive(접속 대기)로 해결이 가능하지만, 효율이 떨어집니다.

➡️결론적으로, Apache는 "1개의 Thread : 1개의 Client' 라는 구조로 보면 됩니다.

  • Thread 방식

2-2) Nginx의 동작 방식

  • Event-driven 방식

아까 앞서서 Nginx는 적은 자원으로 서비스를 빠르게 제공한다고 했는데, 이는 바로 "이벤트 처리 방식"으로 가능합니다.

Apache의 Thread 기반은 매 요청당 하나의 Thread를 생성하기 때문에, 많은 요청 시 CPU의 부하를 걱정해야 하지만

  • Event-driven 방식은 여러 요청을 모두 다 Event Handler를 통해 비동기 방식으로 처리해 먼저 처리되는 것부터 로직이 진행되게끔 합니다.
  • 이는 요청을 하나의 Event라 보고 Event Handler로 관리를 하기 때문에 메모리의 낭비가 적습니다.

결국, 많은 요청에서 다른 웹서버보다 성능적 우위를 점할 수 있기 때문에 더 빠른 서비스를 적은 자원으로 이용할 수 있습니다.


3. Nginx로 할 수 있는 장점들

  • ❗️리버스 프록시(Reverse Proxy)로 사용 가능❗️
    이 리버스 프록시 기능을 이용하여 로드밸런싱을 할 수 있습니다.
    (로드 밸런싱: 여러 대의 서버를 두고 서비스를 제공하는 분산 처리 시스템으로, 서버 정보와 포트를 이용해서 어떤 서버가 어떤 작업을 처리할 것인지를 지정해서 부하 분산을 할 수 있습니다. - 이후에 nginx를 도커 컨테이너로 띄우는 과정에서 리버스 프록시와 로드 밸런싱에 대해서도 다루겠습니다.)
  • SSL 지원

  • 웹페이지 접근 인증

  • 압축

  • 비동기 처리

  • Sub Domain 처리
    (가상 호스팅과 관련된 내용으로 하나의 웹서버에서 여러 서비스를 호스팅할 수 있는 기능을 제공합니다.)

  • Keep Alive 설정
    (Http 설정으로 Http 연결 소켓이 얼마나 지속되어 연결될 지를 설정합니다.)

  • Cache 처리
    (특정 자원이나 이미지, CSS, JS와 같은 정적 데이터를 저장해서 웹 서비스의 응답 속도를 빠르게 처리할 수 있게 한다)

[Reference]

profile
꾸준히, 열심히, 그리고 잘하자

0개의 댓글