Web server / WAS

초심자의 가장 쉬운 이해를 위해 했던 이야기를 정리함.
역사, L4, 클러스터링 같은 내용은 청중의 적정수준이 아니라 배제됨.

1. Web server는 무엇인가?

  • 클라이언트에서 보내는 HTTP 요청을 처리하여 응답을 다시 내려보냄.
  • 응답의 종류에는 200,302,404,503 등등이 있다.
  • 예를들어 200응답에는 메시지 바디에 HTML문서 등을 실어서 클라이언트에 응답으로 보냄.
    • 실어보내는 응답은 text, html, jpg, gif 등 모두 정적 컨텐츠임
  • 응답을 받은 웹브라우저는 렌더링을 통해 우리가 아는 웹 페이지로 보여준다.
  • 가장 유명한 web server로 Apache(httpd)와 nginx가 있음
    • Apache는 http 처리에 가장 전통적이고 확실한 web server
    • nginx는 http외에도 tcp stream 등을 처리할 수 있는 다목적 성격을 가짐.
    • → 성능의 우위는 없다. 무조건 XXX가 좋다고 떠드는 사람이랑은 거리를 둘 것.

2. WAS는 무엇인가?

  • Web Application Server의 약자.
  • 클라이언트에서 보내는 HTTP 요청에 동적 로직을 거쳐 응답을 다시 내려보냄.
  • Web server와 WAS의 가장 큰 차이점은 web server의 기능과 더불어 언어를 통한 동적 처리를 지원한다는 점임 (정적컨텐츠 + 동적처리)
  • 동적처리를 위한 언어는 우리가 일반적으로 잘 아는 Java, python, PHP, Ruby등이 있음.
  • WAS는 요청을 받아서 프로그래밍 코드에 위임하는 역할을 함.
  • 이 요청을 처리하는 프로그래밍 코드를 Servlet이라고 함. WAS는 한마디로 Servlet container 역할을 함.
  • WAS의 종류는 언어를 따라간다.
    • Java - Apache Tomcat, Tmax Jeus(국산), IBM WebSphere, Oracle WebLogic, RedHat JBoss
    • Python - Django, Flask
    • PHP ← 얘는 특이함. 태생적으로 web server에 인터프리터 모듈을 직접 걸어서 사용함. 즉, WAS가 따로 없고 web server 프로세스에 기생함.
    • Ruby - RubyOnRails

3. 그럼 WAS만 쓰면 되지 왜 web server를 분리해서 쓰는거야?

  • 내가 생각하는 첫번째 이유 : 정적 처리와 동적 처리의 분리 → WAS에 정적 처리까지 하면 오버헤드가 많다

WAS는 웹서버의 역할중에서 동적처리에 대한 부분을 별도로 빼놓은 서버.
(역사적 흐름에서) 웹서버가 점점 동적처리를 담당하다보니 복잡해져서 동적처리를 하는 부분(웹 어플리케이션)만 특화하여 분리함

  • 내가 생각하는 두번째 이유 : 한 대의 서버에서 WAS를 여러개 관리함으로써 대용량 트랜잭션을 처리할때 프로세스 락에 대비해 web server 관리하에 있는 다른 WAS프로세스로 요청을 분산처리 (Apache PassengerHelper..)
  • 내가 생각하는 보너스 : web server와 WAS의 박스를 물리적으로 분리하면 물리적인 결합도가 약해지므로 첫번째와 두번째 이유 뿐만 아니라 장애 대응이나 업데이트에도 유연한 처리가 가능하다 (롤링업데이트 등등)

물론 면접가서 이렇게 말하면 안됨..

Comments