Web Server와 WAS(Web Application Server) 란
제일 먼저 웹 서버와 WAS 에 대해서 정의를 하고 넘어가겠습니다.
웹 서버(Web Server)란
wikipedia 의 Web Server 항목이나 MDN 의 항목에서는 웹 서버를 H/W와 S/W 2가지를 정의하고 있습니다.
1. 하드웨어 측면에서, web server는 web server의 소프트웨어와 website의 컴포넌트 파일들을 저장하는 컴퓨터입니다. (컴포넌트 파일에는 HTML 문서, images, CSS stylesheets, 그리고 JavaScript files가 있습니다.) Web server는 인터넷에 연결되어 웹에 연결된 다른 기기들이 웹 서버의 데이터(컴포넌트 파일들)를 주고받을 수 있도록 합니다.
2. 소프트웨어 측면에서, web server는 기본적으로 웹 사용자가 어떻게 호스트 파일들에 접근하는지를 관리합니다. 이 문서에서 web server는 HTTP서버로 국한합니다. HTTP 서버는 URL(Web addresses)과 HTTP(당신의 브라우저가 웹 페이지를 보여주기 위해 사용하는 프로토콜)의 소프트웨어 일부입니다.
역할
하지만 본 강의에서 얘기하는 웹 서버는 웹 서비스를 제공하는 S/W 웹 서버만을 의미하며 다음과 같은 역할을 수행합니다.
- HTTP(Hyper Text Transfer Protocol) 를 이해하고 이에 맞게 Web Browser 가 요청한 정적 리소스(HTML, 그림, CSS, Java script등)를 전달합니다.
- Web Browser의 요청을 분석하고 설정에 따라 적절한 WAS 에게서 정적/동적 리소스를 받아와서 Client(Web Browser) 에 전달합니다.
- 로깅(Logging) 기능이 있어서 웹 브라우저의 접속 정보(시간, IP, 요청 리소스, 성공 여부등)를 파일로 기록합니다.
- 기타 제품에 따라서 인증(Authentication) 을 처리하거나 하나의 H/W에서 여러 개의 도메인을 서비스하기 위한 기능인 가상 호스팅(Virtual hosting) 등을 제공합니다.
Web Server 의 종류나 plugin 설치 여부에 따라서 동적 리소스 처리도 가능하지만 여러 가지 이유로 이런 기능은 WAS 를 사용합니다.
Web Server 는 보통 비무장지대(DMZ; Demilitarized Zone)라고 부르는 네트워크 대역에 위치하고 있으며 이 대역은 외부에서 직접 연결이 가능한 서비스(HTTP, Email 등)를 제공하는 회사 네트워크의 일부입니다.
제품
주요 웹 서버 제품으로는 Apache HTTPD Server, Nginx, IIS, Caddy 등 수많은 제품이 있으며 wikipedia 에 따르면 2021년 2월 전 세계 웹 서버의 점유율은 다음과 같습니다.
제품 | 벤더 | 점유율 |
---|---|---|
nginx | NGINX, Inc | 34.54% |
Apache HTTPD | Apache | 26.32% |
IIS | Microsoft | 6.5% |
OpenResty | OpenResty Software | 6.36% |
Cloudflare Server | Cloudflare, Inc | 5.0% |
웹 애플리케이션 서버(WAS)란
역할
WAS 는 프로그래밍 언어를 사용해서 비즈니스 로직을 구현하고 돌아갈 수 있게 해주는 서버로 Middle ware 라고도 하는 software framework 를 내장하고 있습니다. 보통 DBMS 와 연결하여 비즈니스 로직을 통해 동적인 페이지를 만드는 역할을 수행합니다.
많은 WAS 들은 서비스의 안정성과 확장성을 위해 clustering 이나 fail-over 기능을 제공하므로 개발자들은 비즈니스 로직에 집중할 수 있습니다.
다수의 WAS 들은 웹 서버 기능을 내장하고 있으므로 정적인 리소스를 서비스할 수 있지만 일반적으로는 WAS 의 웹 서버 기능은 사용하지 않고 nginx 나 apache httpd 같은 전문 Web Server 를 사용합니다.
제품
WAS 는 특정 프로그래밍 언어로 구현한 비즈니스 로직을 실행할 수 있으므로 개발 언어와 밀접한 관련을 갖고 있습니다.
Java 언어의 대표적인 WAS 는 Apache tomcat 과 JBoss, Web Logic, Jetty 등이 있습니다.
PHP 는 PHP-FPM 이나 Zend Server 가 있으며 Python 은 uWSGI, gunicorn 등이 있으며 Ruby 는 Unicorn 이나 Puma 등이 있습니다.