웹 서버(Web Server)는 HTTP를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트(이미지 파일 등)을 전송해주는 서비스 프로그램을 말한다.
웹 서버는 어떤 페이지나 이미지, 스크립트 파일과 같은 정적 컨텐츠를 요청하면 그 요청에 맞는 리소스를 반환해주는 역할을 한다. 여기서 말하는 정적 컨텐츠란 HTML, JS, CSS, 이미지, 정적 파일과 같이 특정 작업없이 즉시 응답 가능한 컨텐츠를 말한다. 비유해보자면 우리가 파일 탐색기에서 경로를 입력하면 그에 맞는 디렉토리를 탐색해서 우리 화면에 보여준다. 이처럼 단순히 요청, 요청에 맞는 리소스 반환 역할을 하는 것이 웹 서버다.
웹 애플리케이션 서버는 웹 애플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크이다. 인터넷 상에서 HTTP를 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해 주는 미들웨어로 볼 수 있다.
WAS는 정적 컨텐츠를 전달하는 웹 서버와 달리 동적 컨텐츠를 제공하기 위한 서버다. 웹 서버는 정적 파일(HTML, JS, CSS 등) 해당 리소스만 전달하면 끝이지만 동적 컨텐츠는 클라이언트(브라우저)에서 받은 요청 정보를 갖고 연산 또는 DB에서 데이터를 조회하는 것과 같은 추가 프로세스를 수행하고 결과 값을 전달한다. 우리가 흔히 아는 Tomcat, Jeuse가 WAS란 녀석이다. 그렇다고 웹 서버와 전혀 별개의 시스템이 아니라 웹 서버와 웹 컨테이너를 합친 개념이라고 이해하면 된다. 그니깐 WAS는 웹 서버와 연동하여 수행된다는 얘기다.
웹 컨테이너(web container, 또는 서블릿 컨테이너)는 웹 서버의 컴포넌트 중 하나로 자바 서블릿과 상호작용한다. 웹 컨테이너는 서블릿의 생명주기를 관리하고, URL과 특정 서블릿을 맵핑하며 URL 요청이 올바른 접근 권한을 갖도록 보장한다.
JAVA Servlet과 상호작용하는 WAS 구성요소로 분산 트랜잭션, 멀티 쓰레딩과 통신을 지원한다. 한마디로 웹 앱 백엔드 코드를 중개하는 역할을 하는데, 요청에 맞는 리소스에 찾아가 동적 컨텐츠를 구성하고 내부 로직을 수행하는 역할로 WAS의 핵심이다.
다음은 WAS의 구조를 도식화한 그림이다. 다음 그림에서 볼 수 있듯 WAS는 웹 컨테이너를 포함하고 있다. 웹 서버는 그렇지 않다. 이게 가장 결정적 차이고 이 차이로 웹 서버와 WAS를 구분할 수 있다.
한마디로 '웹 서버는 웹 컨테이너가 없기 때문에 동적 컨텐츠를 처리할 수 없다. WAS는 웹 컨테이너를 통해 동적 컨텐츠를 처리하고 전달한다.' 는 얘기다.
Web Server | WAS |
---|---|
IIS, Apache, tMax, WebtoB, NginX | Tomcat, tMax Jeus, oracle WebLogic, IBM WebSpere, JBOSS |
엔터프라이즈 앱 서비스 환경을 보면 웹 서버와 WAS를 분리하여 운영하는 구조를 띄는 곳이 많다. 맨 똑같은 놈들인데 왜 분리하는 걸까? 답은 운영에 있다. 늘 그렇지 뭐..
위에서 말한 것 처럼 WAS는 연산도 해야되고 DB도 들려야되고 JSP, EJB등 신경쓸게 많다. 그만큼 많은 요청이 가면 WAS 서버에 부하가 갈 수 밖에 없다. WAS와 웹 서버를 분리하여 운영하면 정적 컨텐츠 (서버코드없는 HTML, 이미지, CSS, JS) 등은 웹 서버가 담당하고 연산, DB 조회 등의 역할은 WAS로 전달하여 처리하는 구조를 갖는 것이다.
하드웨어나 클라우드 서버를 분리함으로 보안적인 측면을 강화할 수 있다. 웹 서버는 정적 컨텐츠, 즉 그 경로에 있는 리소스만 전달하는 역할이기 때문에 괜찮지만 WAS의 경우는 JAVA 소스를 다루기 때문에 시스템 리소스에 대한 취약점이 존재할 수 밖에 없다. 웹 서버를 통해 WAS의 진입 루트를 컨트롤하며 보안적인 측면을 강화할 수 있다. 모찌롱 요청까서 보면 다보이지만 설정을 통해 충분히 안전한 연결을 만들 수 있다. (요청 헤더 키, JWT나 CSRF토큰같은 걸로..)
웹 서버를 WAS 앞에 두고, 필요한 WAS들을 웹 서버에 플러그인 형태로 설정하면 효율적인 분산 처리가 가능하다. 이게 왜 필요하냐.. 가령 WAS 하나에 여러가지 웹 앱이 있다 치자. 그럼 앱별로 WAS 설정도 다르고 요구 스펙이 다를 것이다. 이때 솔루션 하나당 WAS를 1대씩 할당하여 운영하면 WAS 서버 부하도 줄고 하나의 통로를 통해 여러 동적 컨텐츠를 처리할 수 있는 구조가 된다.
오늘은 웹 서버와 WAS 그리고 두 녀석의 차이에 대해 알아봤다. 그냥 쉽게 정리해서 웹 서버는 책(리소스)만 찾아서 건내주는 도서관 사서, WAS는 책을 해석해서 독후감쓰는(연산 및 DB 조회 후 작업) 초등학생이라고 생각하면 될 것 같다.
오늘 저녁은 도라지무침이다. 🥕
참고 : https://helloworld-88.tistory.com/71
https://velog.io/@dlalstj0213/WEB-Application-%EA%B5%AC%EC%A1%B0-%EB%B0%8F-WEB-WAS-%EA%B0%9C%EB%85%90
https://codechasseur.tistory.com/25
https://gyoogle.dev/blog/web-knowledge/Web%20Server%EC%99%80%20WAS%EC%9D%98%20%EC%B0%A8%EC%9D%B4.html
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html