본문 바로가기
네트워크

Web Server, Apache, Nginx

by 고선제 2024. 7. 30.

아직 공부하고 있는 학생이니 틀린 점이 있을 수 있으니 피드백은 대환영 입니다.

 

목차

  1. WebServer
  2. Apache
  3. Nginx
  4. Apache vs Nginx

 

1. 웹 서버 (Web server)

👉 이해하는 데 도움이 되는 개념! 💡

  1. 호스트 🖥️ : 웹 서버 소프트웨어가 실행되는 물리적 또는 가상 컴퓨터를 말해요. 웹 서버가 HTTP 요청을 처리하고, 요청된 파일(HTML, CSS, 이미지 등)을 제공하는 역할을 한다면, 호스트는 이 역할을 수행하는 서버, 즉 컴퓨터 자체를 의미합니다.
    예) http://localhost:3000
  2. 호스팅 🌐 : 웹사이트의 파일, 요소 및 콘텐츠를 인터넷 브라우저에게 전달하는 서비스입니다. 사용자가 도메인 명을 입력하면 일련의 과정(DNS)을 통해 웹사이트의 IP 주소로 변환되고, 그 IP 주소가 가리키는 서버로 연결됩니다. 호스팅 서비스는 웹사이트에 IP 주소를 할당해주고, 해당 서버가 인터넷에 연결될 수 있도록 네트워크 연결을 제공합니다.
    예) AWS가 이 역할을 해줍니다.

 

웹 서버란 인터넷 상에서 클라이언트(웹 브라우저를 통해)로부터의 요청을 받아들이고, 이를 처리하여 적절한 응답을 제공해주는 소프트웨어입니다. 주로 HTTP를 사용하여 통신해요.

위 글로 간단하게 정의할 수 있습니다. 

 

위 그림을 통해 웹 서버가 하는 일을 설명해보자면,

  1. 웹 서버는 파일들을 저장하는 역할을 해요. 📂
    • 이 파일들은 웹사이트를 구성하는 파일로, HTML 문서, 이미지, CSS 스타일시트, JavaScript 파일 등이 포함됩니다.
  2. 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, 웹 페이지를 구성하기 위한 자원(HTML, CSS 등)을 HTTP 응답으로 제공해줍니다. 📥📤
    • 정적인 자원을 처리하고 동적인 자원만을 WAS에 넘겨줌으로써 WAS의 작업 부담을 줄여줍니다.

아래에서 설명할 Apache와 Nginx는 모두 웹 서버에 속해요.

2. Apache 🚀

일반적으로 Apache라고 불리는데, 풀 네임은 Apache HTTP Server입니다. 이름처럼 HTTP를 통해 웹 콘텐츠를 제공하죠.

Apache는 1995년에 처음 출시되었어요. 현재 Windows, Linux, macOS와 같은 많은 운영 체제와 호환이 가능하고, HTTP뿐만 아니라, HTTPS, WebSocket 및 HTTP/2를 포함한 다양한 통신 프로토콜을 지원합니다.

주요 특징 ⭐

  1. 모듈 기반 아키텍처
    • Apache 서버는 높은 성능과 유연성을 제공하는 모듈 시스템으로 유명해요. 이 모듈을 사용하면 사용자는 필요에 따라 서버를 수정하기 위해 기능을 쉽게 추가하거나 제거할 수 있답니다.
  2. 운영 방식 (MPM, Multi-Processing Modules)
    • MPM 중 Prefork, Worker 모드가 주로 사용되는데, Nginx가 개발되기 이전 시점의 문제점을 알아보기 위해 Prefork 방식만 주로 살펴보도록 할게요.
    • Prefork MPM
      • 각 요청을 처리하기 위해 별도의 프로세스를 생성하는 방식입니다.
      • 요청 1개당 프로세스 1개를 생성하죠.
      작동 방식 🛠️
      1. 서버 시작:
        • Apache 서버가 시작될 때 여러 개의 프로세스가 미리 생성됩니다. 이들 프로세스는 요청이 들어오기를 기다리죠.
        • 이 미리 생성된 프로세스들을 "자식 프로세스"라고 부릅니다.
      2. 요청 수신:
        • 클라이언트가 웹 서버에 요청을 보냅니다.
      3. 커넥션 형성:
        • 요청이 들어오면 대기 중이던 자식 프로세스 중 하나가 이 요청을 처리하기 위해 선택됩니다.
      4. 요청 처리:
        • 선택된 자식 프로세스가 요청을 처리하고, 결과를 클라이언트에게 응답으로 반환합니다.
        • 요청 처리가 완료되면 자식 프로세스는 다시 대기 상태로 돌아가 다음 요청을 기다립니다.
      장점 👍
      1. 안정성:
        • 각 요청이 하나의 독립된 프로세스에서 처리되기 때문에, 하나의 프로세스에서 문제가 발생해도 다른 요청에 영향을 미치지 않아요.
      2. 호환성:
        • 스레드를 사용하지 않기 때문에, 스레드 안정성을 보장하지 않는 라이브러리와도 잘 호환됩니다.
      단점 👎
      1. 메모리 사용량:
        • 각 요청이 별도의 프로세스를 사용하기에 메모리 사용량이 많아요.
      2. 성능:
        • 트래픽의 수가 많아질 때, 성능이 떨어질 수 있어요. (C10K 문제)

3. Nginx 🌟

Nginx는 Apache 서버의 문제인 동시 최대 접속 가능 수가 10000개였던 C10K 문제를 해결하기 위해 개발되기 시작했어요.

아래와 같은 기술적인 장점을 통해 Apache의 문제를 해결하였습니다.

주요 특징 ✨

  1. 이벤트 기반 아키텍처 (Event-Driven)
    • 비동기 방식으로 작동하여 높은 동시성 처리가 가능해요.
    • 여러 개의 요청을 단일 스레드에서 처리할 수 있습니다.
  2. 역방향 프록시 (Reverse Proxy)
    • 클라이언트의 요청을 받아 백엔드 서버로 전달하고, 백엔드 서버의 응답을 클라이언트에게 반환하는 중간 서버 역할을 해요.
  3. 로드 밸런싱 (Load Balancing)
    • 여러 서버에 트래픽을 분산시켜 서버 부하를 균등하게 하는 기술이에요.
  4. 정적 콘텐츠 제공 성능 최적화
    • 정적 파일 제공시에도 새로운 프로세스를 생성하는 Apache와는 달리, 정적 파일 제공에 최적화 되어 있어, 매우 빠르고 효율적으로 정적 콘텐츠를 제공합니다
  5. 설정 및 확장성
    • 설정 파일이 Apache보다 상대적으로 간단하고, 로드 밸런서, 리버스 프록시 등의 기능을 손쉽게 설정할 수 있어 확장성이 뛰어나다.

4. Apache vs Nginx 간단 비교 🆚

항목 Apache Nginx
아키텍처 프로세스/스레드 기반 비동기 이벤트 기반
운영 모드 Prefork, Worker, Event 단일 이벤트 루프
자원 사용량 높음 낮음
성능 낮은 동시성, 정적 파일 속도 보통 높은 동시성, 정적 파일 속도 빠름
모듈 및 기능 확장 풍부한 모듈 및 기능 제한된 모듈 및 기능
설정 파일 .htaccess 지원 단일 설정 파일
역방향 프록시 제한적 지원 기본 제공
로드 밸런싱 모듈을 통해 제공 기본 제공
커뮤니티 및 문서화 광범위하고 풍부한 자료 상대적으로 적음

요약 및 결론 📌

  • Apache는 요청 1개당 1개의 프로세스를 생성하기 때문에, 안정성이 보장되지만 메모리와 동시성 측면에서 성능이 좋지 않다
  • Nginx는 성능 측면에서 Apache보다 우수하지만, 보안적인 측면에서는 떨어질 수 있다.

-> 대규모 트래픽을 처리해야 할 때에는 Nginx, 보안적인 측면, 다양한 기능을 생각해야 할 때 Apache

 

[참고 자료]

'네트워크' 카테고리의 다른 글

HTTP 1.1과 HTTP 2.0  (0) 2024.09.19
비연결성과 비상태성  (1) 2023.09.30
쿠키와 세션  (0) 2023.09.30