-
WAS(Web Application Server)와 WS(Web Server) 차이점WEB & CS 2023. 10. 4. 22:22

Static Pages
- 저장된 정적인 파일
- 예 : image, html, css, js
Dynamic Pages
- 웹 서버에 의해 실행되는 프로그램을 통해서 만들어지는 결과물
- Servlet : WAS 위에서 돌아가는 Java 프로그램
- 개발자는 Servlet에서 doGet()을 구현

Web Server
- 정적인 리소스를 서비스하는데 특화
- 클라이언트의 http 요청을 받아 요청에 맞는 정적 컨텐츠를 제공한다.
- 비즈니스 로직을 처리하지 않는다.
- SSL/TLS를 사용해 암호화된 HTTPS 연결을 제공하여 보안을 강화
- 여러 대의 서버로 분산된 트래픽을 처리하기 위해 로드밸런싱 수행 가능
- Reverse Proxy로 동작하여 클라이언트의 요청을 WAS로 전달이 가능하다.
- WS와 WAS를 분리하여 웹 애플리케이션의 보안과 성능을 개선
- 예 : Nginx, Apache 등등
Web Application Server
- Web Server + Web Container
- 웹 컨테이너 혹은 서블릿 컨테이너라고 불린다.
- jsp, servlet을 실행시킬 수 있는 소프트웨어를 만한다.
- 클라이언트 요청에 따라 동적인 웹 페이지를 생성
- 데이터베이스와의 상호작용, 트랜잭션 처리, 보안, 세션 관리 등 웹 애플리케이션의 핵심 비즈니스 로직을 수행
- 비즈니스 로직 실행 결과를 HTML, JSON 등의 형식으로 클라이언트에 전달한다.
- 웹 애플리케이션에서 발생하는 데이터베이스 등의 작업은 트랜잭션 단위로 관리
- 인증, 권한, 부여, 암호화 등의 보안 기능을 제공하여 보안을 강화한다.
- 세션 관리를 지원하여 클라이언트의 상태 정보를 저장하고 관리한다.
- 예 : Apache Tomcat, Red Hat JBoss 등이 있다.
WS와 WAS의 필요성
- Web Server에서는 정적 컨텐츠만 처리하도록 기능을 분배하여 서버의 부담을 줄일 수 있다.
- WAS를 통해 요청에 맞는 데이터를 DB에서 가져와서 비즈니스 로직에 맞게 그때 그때 결과를 만들어서 제공함으로써 자원을 효율적으로 사용할 수 있다.
- WS와 WAS를 분리하는 이유
- 서버 부하 방지 : 정적 컨텐츠 요청까지 WAS가 처리한다면 정적 데이터 처리로 인해 부하가 커지게 되고, 동적 컨텐츠의 처리가 지연됨에 따라 수행 속도가 느려져 페이지 노출 시간이 늘어난다.
- 보안 강화 : SSL에 대한 암복호화 처리에 Web Server를 사용
- 여러 대의 WAS 연결 가능 : 로드 밸런싱을 위해서 WS를 사용하고 무중단 운영을 위한 장애 극복이 쉽다.
- WS를 WAS 앞에 두고 필요한 WAS들을 WS에 플러그인 형태로 설정하면 더 효율적인 분산 처리가 가능
웹 서버 아키텍쳐

- Client - WS - WAS - DB 구조 동작과정
- WS가 클라이언트로부터 http 요청을 받는다.
- WS가 받은 http 요청(request)을 WAS로 보낸다.
- WAS는 관련 servlet을 메모리에 올린다.
- WAS는 web.xml을 참조하여 해당 servlet에 대한 Thread를 생성한다.
- HttpServletRequest와 HttpServletResponse 객체를 생성해 servlet에 전달한다.
- Thread는 servlet의 service() 메서드를 호출한다.
- service()메서드는 요청에 맞게 doGet(), doPost()를 호출한다.
- 호출된 메서드(doGet(), doPost())는 인자에 맞게 생성된 적절한 동적 페이지를 response 객체에 담아 WAS에 전달한다.
- WAS는 response객체를 HttpResponse 형태로 바꾸어 Web Server에 전달한다.
- 생성된 Thread를 종료하고 HttpServletRequest와 HttpServletResponse 객체를 제거한다.
참고)
MiddleWare
- Client - MiddleWare Server - DB Server(DBMS)
- MiddleWare 동작 과정
- Client는 단순히 요청만 중앙에 있는 MiddleWare Server에게 보낸다.
- MiddleWare Server에서 대부분의 로직이 수행된다.
- 이때, 데이터를 조작할 일이 있으면 DBMS에 부탁한다.
- 로직의 결과를 Client에게 전송한다.
- Client는 그 결과를 화면에 보여준다.
- 비즈니스 로직을 Client와 DBMS 사이의 MiddleWare Server에서 동작하도록 함으로써 Client는 입력과 출력만 담당하게 된다.
출처)
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
'WEB & CS' 카테고리의 다른 글
[CS 자료구조] 스택에 대한 개념 (0) 2023.11.08 객체 지향 프로그래밍의 개념 및 4가지 특징 (0) 2023.10.10 Redirect와 Forward의 차이점 (0) 2023.09.29 프로세스(Process) & 스레드(Thread) 정리 (0) 2023.08.13 Sync & Async & Blocking & Non-Blocking (0) 2023.08.11