alt
Home Was vs Web Server(nginx, apache)
Post
Cancel

Was vs Web Server(nginx, apache)


Was(Web application server)

  • 사용자 요청에 맞게 동적인 컨텐츠를 전달
  • Web server + Web container
  • DB 서버가 같이 수행
  • 비즈니스 로직 처리
  • Node.js 서버, Spring boot 서버가 여기에 해당.
    • 정확하게는 node의 express, 서블릿을 지원해주는 Tomcat


Web server(e.g. nginx, apache)

  • 정적인 컨텐츠를 반환한다.(html, css 등)
  • 리버스 프록시 방식으로 동작한다. 클라이언트는 WAS의 위치, 존재 여부를 모른다.
  • 한 Web server는 여러 WAS로 전달될 수 있다.
  • 한 WAS가 scaled-out 되어있을 때 LB도 수행한다.
    • 이건 Proxy서버 또한 마찬가지: HAProxy에서 Redis 마스터, 슬레이브에 적절히 요청을 보내는 것을 생각하면 된다.
  • http 프로토콜 기반으로 클라이언트 요청을 서비스
  • 클라이언트 요청에 대해 가장 앞에서 요청 처리


Was는 Web server가 하는 일을 다 할 수 있다.

  • 효율적인 분산처리를 위해 Web server도 사용해야 함
  • 보통 Web server에 Was가 플러그인같이 붙은 형태


NginX vs Apache


  • 둘다 일단 .conf 와 같은 설정파일에 명시해 worker process 수를 정할 수 있다.(보통 서버의 코어 수)
  • 많은 요청에 대해 병렬적인 처리를 위해 기본적으로 멀티프로세스이다.


NginX

  • 싱글스레드 + 멀티프로세스 방식, 이벤트, 비동기 기반.
    • Node.js 서버와 사용하면 좋은 퍼포먼스를 낼 수 있다.
    • Apache보다 적은 스레드를 사용해 처리할 수 있다.
    • Master 프로세스는 worker 프로세스를 관리하는 역할만 수행한다. Worker process는 새로운 연결을 초기화하고, Run loop에 추가해주는 등등 싱글 스레드를 잘 사용하기 위한 작업들을 수행한다.
  • 다중 I/O처리에 적합하다. HTTP 요청 관점에서 한 스레드가 계속 돌면서 여러 요청들을 돌아가며 처리해주는것. 이 방식을 통해 스레드는 쉬지 않고 일하고, 좋은 Concurrency를 얻는다.(초당 수천개까지)
  • 점유율 2위. Apache에 비해 레퍼런스가 적다.(그래도 충분히 많다)


Apache

  • 멀티 프로세스 + 멀티 스레드 방식 fork를 통해 스레드를 늘릴수록 CPU, 메모리 사용량이 증가한다.
  • 멀티스레드의 스프링 부트처럼 한 Connection에 한 스레드가 사용된다.
    • 스레드가 동기적으로 Block되는 방식으로 동작하기 때문에, 스레드 낭비가 있을 수 있다.(스레드 각각이 유휴시간을 활용 못한다.)
  • 가장 높은 점유율을 차지한다. 따라서, 레퍼런스가 많다. 당연하게도 확장 모듈 또한 NginX에 비해 많다고 한다.



Reference)

https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html

https://jeong-pro.tistory.com/84

https://niklasjang.tistory.com/56

This post is licensed under CC BY 4.0 by the author.