ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Ngnix란?
    CS 2024. 8. 22. 03:55

     Nginx 서버 ❓

    웹 서버 소프트웨어로, 컴퓨터가 서버 역할을 할 수 있도록 도와주는 프로그램이다.

     

    웹 서버 개념이 조금 헷갈릴 수 있어서 체크하고 넘어가자면,

     

     웹 서버 

    서버 측에서 웹사이트를 제공하는 역할을 하는 소프트웨어이다.

     

    이를 통해 웹 브라우저와 상호작용하면서 클라이언트에게 정보를 제공할 수 있다.

    이는 다른 말로 HTTP 서버라고도 부르며, 브라우저와 서버 간의 HTTP 통신을 통해 웹사이트를 제공하는 역할을 한다.

     

    💡 [헷갈릴 수 있는 개념] WAS(Web Application Server) 💡
    웹 애플리케이션의 비즈니스 로직을 처리하고 동적 콘텐츠를 생성하는 서버 소프트웨어이다.
    Java EE, .NET, Python 등의 프로그래밍 언어로 작성된 애플리케이션을 실행하여 웹 페이지를 동적으로 생성한다.

    🔥 [참고] Web Server와 WAS의 차이 🔥
    웹 서버
    는 주로 정적 자원의 제공에 중점을 두며, WAS애플리케이션의 비즈니스 로직과 동적 콘텐츠 생성을 담당한다.

    이 두 가지는 함께 사용되어 웹 애플리케이션의 전체적인 성능과 기능을 향상시킨다.

     

    🧐 웹 서버의 종류 🧐

    Apache

    오래 전부터 널리 사용된 웹 서버로, 초기 웹 개발 요구사항을 반영하여 설계되었다.

    그렇기에 많은 기능들이 있지만, 그만큼 현재는 불필요한 기능들도 많아, 크고 무거운 경향이 있다.

     

    Nginx

    성능과 가벼움에 중점을 두고 개발된 차세대 웹 서버로, 적은 자원으로 더 빠르게 데이터를 서비스할 수 있다.

     

    🔥 Apache와 Nginx의 차이 🔥

    이 둘은 웹 서버 소프트웨어로, 똑같이 클라이언트에게 서버의 리소스를 제공하는 역할을 하지만, 둘의 차이는 구조와 작동 방식에서 큰 차이를 보인다.

     

    작동 방식

    • Apache 멀티 프로세스 모듈 즉, MPM 방식을 사용한다. 사용자의 요청이 들어올 때마다 새로운 프로세스를 생성하거나, 한 프로세스 내에서 여러 스레드를 생성해 요청을 처리한다. 이 방식은 많은 메모리와 CPU 자원을 소비하며, 요청이 많을 경우 성능 저하가 발생할 수 있다.
    • Nginx 이벤트 기반(event-driven) 방식으로 작동한다. 한 개의 워커 프로세스가 비동기적으로 여러 요청을 처리하며, 적은 자원으로도 효율적이게 대규모 트래픽을 처리할 수 있다. 이 비동기 처리를 통해 자원 소비를 최소화하며, 성능을 극대화한다.

    모듈 확장성

    • Apache 런타임 시에 모듈을 동적으로 로드하거나 제거할 수 있어, 확장성이 높다. 다양한 모듈이 기본적으로 제공되며, 이를 통해 기능을 손쉽게 확장 가능하다.
    • Nginx 모듈을 컴파일 시에 추가해야 하며, 동적 모듈 로딩은 최근에서야 도입되었다. 하지만 기본적으로 필요한 기능들이 최적화되어 제공되기에, 성능 저하 없이 효율적인 확장이 가능하다. 

    성능 및 자원 효율성

    • Apache 성능 면에서 Nginx보다 무겁고 많은 자원을 소모하는 경향이 있다. 특히, 높은 트래픽 환경에서는 성능이 저하될 수 있다.
    • Nginx 적은 자원으로도 높은 성능을 발휘하며, 특히 동시 접속자 수가 많은 환경에서 유리하다.

     

    📌 Nginx의 주요 특징 📌

    1️⃣ 이벤트 기반 작동 방식

    Nginx는 이벤트 기반(event-driven) 방식으로 작동하여, 적은 자원으로도 높은 성능을 발휘할 수 있다.

     

    이 방식은 서버가 클라이언트의 요청을 처리할 때, 각 요청마다 새로운 프로세스나 스레드를 생성하는 대신, 이벤트 루프라는 구조를 통해 비동기적으로 요청을 처리하는 것을 의미한다.

     

    2️⃣ 마스터 프로세스와 워크 프로세스

    Nginx는 마스터 프로세스와 워크 프로세스로 구성된 다중 프로세스 아키텍처를 사용하여 요청을 처리한다.

    이 구조는 높은 안정성과 효율성을 제공하는 데 중요한 역할을 한다.

     

    • 마스터 프로세스(Master Process): Nginx의 마스터 프로세스는 전체 서버의 관리와 제어를 담당한다. 
      • 설정 파일 로드 검증: Nginx 서버가 시작될 때 설정파일(nginx.conf)을 로드하고 구성을 검증한다.
      • 워크 프로세스 생성 및 관리: 마스터 프로세스는 하나 이상의 워크 프로세스를 생성하고 관리한다. 워크 프로세스가 종료되거나 비정상 작동을 할 경우, 마스터 프로세스는 새로운 워크 프로세스를 생성하여 이를 대체한다.
      • 시그널 처리: 시작, 재시작, 종료, 재구성 등의 시그널을 처리하고 워크 프로세스에 이를 전달한다.
    • 워크 프로세스(Worker Process): 실제로 클라이언트의 요청을 처리하는 역할을 한다.
      • 이벤트 처리: 이벤트 루프를 사용하여 클라이언트의 요청을 비동기적으로 처리하여 서버의 성능을 극대화한다.
      • I/O 처리: 비동기 방식으로 네트워크 및 파일 I/O 등의 작업을 수행하며, 이러한 작업이 완료되면 이벤트 루프를 통해 다음 작업을 처리한다.

    마스터 프로세스는 서버의 핵심 관리자로서, 워크 프로세스가 중단되더라도 전체 서버의 안정성을 유지하도록 보장한다.

     

    또한, 워크 프로세스는 여러 개가 동시에 작동하기에 Nginx가 높은 트래픽을 효율적으로 처리할 수 있고, 이 각각의 워크 프로세스는 CPU 코어와 연결되어, 멀티 코어 시스템 성능을 극대화한다는 특징이 있다.

     

    이 각 워크 프로세스는 독립적으로 작동하며, 이로 인해 하나의 워크 프로세스에서 문제가 발생하더라고 다른 프로세스에는 영향을 미치지 않는 점이 서버의 안정성을 보장한다.

     

    3️⃣ 리버스 프록시 (Reverse Proxy)

    Nginx는 리버스 프록시 기능을 내장하고 있어, 클라이언트의 요청을 여러 백엔드 서버로 전달한다.

     

    리버스 프록시는 클라이언트가 직접 백엔드 서버와 통신하는 대신, Nginx가 중간에서 요청을 받아 전달하고, 응답을 클라이언트에게 다시 전달하는 역할을 한다. 이를 통해 백엔드 서버를 보호하고, 다양한 보안 및 성능 최적화 기능을 제공할 수 있다.

     

     요약 
    클라이언트 요청 > Nginx > 서버

     

    4️⃣ 로드 밸런싱 (Load Balancing)

    Nginx는 여러 백엔드 서버로 트래픽을 분산시켜 서버의 부하를 균등하게 나누는 로드 밸런싱 기능을 제공한다.

    이는 서버의 가용성을 높이고, 대규모 트래픽을 효율적으로 처리하는 데 매우 효과적이다.

     

    다양한 로드 밸런싱 알고리즘(예: Round Robin, Least Connections)을 통해 트래픽을 분산시킬 수 있으며, 장애 조치(failover) 기능도 제공한다.

     

    5️⃣ SSL/TLS 지원

    Nginx는 SSL/TLS 설정을 통해 웹 서버와 클라이언트 간의 통신을 암호화하여 보안을 강화할 수 있다.

     

    SSL/TLS는 데이터 전송 중에 발생할 수 있는 도청이나 변조를 방지하며, HTTPS를 통해 웹사이트의 보안을 강화한다.

    Nginx는 SSL/TLS 설정이 용이하며, 고급 암호화 기능과 함께 리버스 프록시를 통해 백엔드 서버를 보호하는 역할도 수행할 수 있다.

     

    💧Nginx의 단점 💧

    Nginx는 많은 장점이 있지만, 단점 또한 존재한다.

     

    1️⃣ 모듈 지원의 제한

    Apache와 차이점을 설명할 때 언급했던 것처럼 Nginx는 모듈을 컴파일 시에 추가해야 하며, 동적 모듈 로딩은 최근에 도입되었다.

    이는 즉, 새로운 기능을 추가하거나 모듈을 사용하는 데 유연성이 떨어질 수 있음을 의미한다.

     

    또한 Apache와 비교했을 때 기본적으로 제공하는 모듈이 적어, 추가 기능이 필요할 경우 별도의 모듈을 직접 컴파일하거나 외부 모듈을 찾아야 할 경우가 생긴다.

     

    2️⃣ 복잡한 설정

    Nginx의 설정 파일은 초보자나 경험이 적은 사용자에게는 설정이 어려울 수 있고, 디버깅과 문제 해결이 어려울 수 있다.

     

    3️⃣ 동적 콘텐츠 처리의 제약

    기본적으로 정적 파일 처리에 최적화되어 있기에, 동적 콘텐츠 처리에 있어서는 별도의 애플리케이션 서버인 PHP나 Node.js와 연동하여 사용해야 할 수 있다.

     

     왜 Nginx가 떠오르는가 ✨

    충분히 위의 내용들만으로도 Nginx가 떠오르는 이유는 쉽게 파악할 수 있다. 하지만 결론적으로 한번 더 체크하고 가자.

     

    1️⃣ 높은 성능과 확장성

    이벤트 기반 아키텍처 덕분에 높은 성능과 확장성을 제공한다.

    이로 인해 동시 접속자 수가 많은 대형 웹사이트에서 Nginx를 선호하는 경향이 있다.

     

    2️⃣ 리버스 프록시 및 로드 밸런싱

    Nginx는 리버스 프록시와 로드 밸런싱 기능을 내장하고 있어, 여러 서버로 트래픽을 분산시키고, 서버의 가용성을 높이는 데 매우 효과적이다.

     

    이 기능은 특히 마이크로서비스 아키텍처와 클라우드 환경에서 중요한 역할을 한다.

     

    3️⃣ 경량화된 서버

    시스템 자원을 적게 소모하면서도 빠른 응답 속도를 제공하기에, 트래픽이 폭증하는 상황에서도 안정적인 서비스 유지를 보장한다.

     

    4️⃣ 보안과 안정성

    Nginx는 보안과 안정성을 강화하기 위한 다양한 기능을 제공한다.

    SSL/TLS 설정이 용이하며, 리버스 프록시 기능을 활용해 백엔드 서버를 보호할 수 있다.

     

Designed by Tistory.