Apache vs Nginx

임현규·2023년 5월 8일
0

개인 공부

목록 보기
4/11
post-custom-banner

Web Server & WAS

nginx와 apache 모두 web server로서 사용되기 위해 만들어진 웹 서버 프로그램이다. 그렇기에 web server와 was에 대해서 간단히 이해할 필요가 있다.

Web Server

Http 프로토콜을 기반으로 하며, 클라이언트의 요청을 서비스하는 기능을 담당한다

요청에 따라 2가지 기능 중 적절히 수행을 담당할 수 있다.

  • 정적인 컨텐츠 제공
    • WAS를 거치지 않고 바로 자원 제공
  • 동적인 컨텐츠를 제공하기 위한 요청 전달
    • 클라이언트의 요청을 WAS에 보내고, WAS 결과를 받아 응답하는 역할 수행
  • 여러 대의 WAS를 연결하며 로드 밸런싱 역할을 수행
  • WAS와의 분리를 통해 SSL에 대한 암복호화 처리를 Web Server에서 처리
  • Proxy Server로 활용하여 보안을 강화할 수 있다.

웹 서버로는 Apache server와 Nginx 등이 있다.

WAS(Web Application Server)

DB 조회나 다양한 요청에 대해 동적으로 응답하기 위해 만들어진 서버이다.

동적이란 말은 동일한 요청에도 DB에 저장되어 있는 상태에 따라 다른 응답을 할 수 있다고 이해하자

Web Server의 기능을 분리해서 처리하는 목적으로 구성된 개념으로 이해할 수 있다.

주요 기능은 다음과 같다.

  1. 프로그램 실행 환경 및 DB 접속 기능 제공
  2. 여러개의 트랜잭션을 관리
  3. 업무를 수행할 비즈니스 로직 수행

대표적은 WAS로는 Tomcat, JBoss, Jeus 등이 있다.

Apache Http Server

Apache Software Foundation에서 만든 웹 서버 프로그램이다. 오랫동안 사용되었고 레퍼런스가 풍부한 장점이 있다.

동작 방식

apache 서버는 기본적으로 요청당 프로세스 또는 쓰레드를 생성하여 처리한다. 멀티쓰레드 동기 방식으로 처리하는데 이 방식의 좋은 점은 동시성을 통해 사용자의 요청을 동시에 처리하는 데 뛰어나지만 쓰레드 또는 프로세스가 많이 생성될 경우 Context Switching으로 인한 성능 저하가 일어난다.

Apache 서버의 경우 동시 커넥션이 많아질 경우 더 이상 커넥션(프로세스 또는 쓰레드)를 생성하지 못하는 상황이 발생한다. 이를 C10K 문제라고 한다.

C10K: (connection 10,000)

Apache에서 요청을 처리하는 방식은 크게 2가지이다.

  1. PreFork MPM(Multi-Process Module)

    • 요청에 대해 자식 프로세스를 생성해 처리함
    • 하나의 자식 프로세스당 하나의 자식 쓰레드를 가지는 구조
    • 프로세스를 생성하여 요청을 처리하기 때문에 쓰레드 간 메모리 공유는 일어나지 않음
    • single, multi cpu에서 성능이 좋은편임
  2. Worker MPM

    • 각 프로세스에서 쓰레드를 생성해 요청을 처리하는 구조
    • 프로세스당 최대 64개의 쓰레드 처리 가능
    • 각 쓰레드당 하나의 요청을 담당
    • Prefork보다 메모리 사용량이 적고, 동시 접속자 수가 많은 사이트에 적합함

Nginx

Event-Driven 구조의 웹 서버 소프트웨어이다. 한 개 또는 고정된 프로세스만 생성하고, 여러 개의 Connection을 모두 Event-Handler를 통해 비동기 방식으로 처리하고 이 덕분에 Apache Server와 달리 Context Switching 비용 문제가 크지 않기 때문에 CPU를 효율적으로 사용하면서 수많은 요청을 처리할 수 있다. C10K 문제에 대해서 특히 효과적이다.

동작 방식

Event Handler를 이용해 다양한 요청에 대해서 하나의 코어의 하나의 쓰레드로 효과적으로 처리 가능. 쓰레드를 복사하고나 스위칭할 일이 요청마다 일어나지 않기 때문에 많은 요청에 대해서 효과적으로 처리 가능

참고

Web server vs WAS 관련 블로그

web server 관련 블로그

Apache & Nginx 차이점

profile
엘 프사이 콩그루
post-custom-banner

0개의 댓글