CS/Web

Web Server와 WAS(Web Application Server)

Lea Hwang 2022. 6. 30. 22:01

Web Server와 WAS(Web Application Server) 개념과 차이점을 학습하기 전에

먼저 정적 웹 페이지와 동적 웹 페이지에 대해 알고 있어야 합니다.

 

 

정적 웹 페이지(Static Web Page)

정적 웹 페이지는 언제 접속해도 같은 응답을 보내주는 페이지를 말합니다. 사용자가 요청을 보내면 서버는 미리 저장된 웹 페이지를 보내기만 하게 되며 사용자는 서버에 저장된 HTML, CSS, JS 등의 파일이 변경되지 않는다면 매번 같은 웹 페이지를 보게 됩니다. 

 

동적 웹 페이지(Dynamic Web Page)

동적 웹 페이지는 브라우저에게 요청을 받은 이후 서버가 추가적인 처리 과정을 거쳐 클라이언트에게 응답을 보냅니다. 예를 들면 날씨나 뉴스 등이 있습니다. HTML으로는 동적인 구현이 불가능하므로 Java와 같은 프로그래밍 언어를 섞어서 사용합니다. (JSP, PHP, ASP) 이렇게 Java 등의 프로그래밍 언어로 동적인 데이터들을 정립하면 이것을 다시 HTML 문서로 재조립하여 웹 브라우저에 리턴합니다.

 

 

Web Server와 WAS

 

1. Web Server

- 클라이언트에게 요청을 받고 정적인 Request라면 (html, css 등) 정적인 콘텐츠를 Response 합니다.

- 클라이언트에게 요청을 받고 동적인 Request라면 WAS로 처리를 이관한 뒤 WAS에서 처리한 결과를 클라이언트에게 전달합니다.

대표적인 Web Server :  Apache, WebtoB, Nginx, IIS 등등

 

2. WAS

DB 조회가 필요하거나 사용자의 입력을 받아 서버에서 가변적으로 로직을 수행하는 등의 동적인 처리가 필요한 요청을 처리하기 위해 만들어졌습니다. Web Container의 JSP/Servlet 구동 환경을 제공하고 프로그래밍 언어(JSP, ASP, PHP 등)로 작성한 뒤 HTML 문서로 만들고 Web Server로 전달합니다.

대표적인 WAS : Tomcat, Jeus, JBoss 등등

 

1. 프로그램 실행 환경과 데이터베이스 접속 기능을 제공.

2. 여러 개의 트랜잭션을 관리.

3. 업무를 처리하는 프로그래밍 언어의 비즈니스 로직을 수행.

4. Web Service 플랫폼으로서의 역할 병행

 

WAS 작동 프로세스

1. Web Server로 요청이 오면 컨테이너가 응답

2. 컨테이너는 web.xml을 참조하여 해당 서블릿에 대한 쓰레드 생성하고 httpServletRequest와 httpServletResponse 객체를 생성하여 전달

3. 컨테이너는 JSP/Servlet 호출

4. 호출된 Servlet의 작업을 담당하게 된 쓰레드(2번에서 만든 스레드)는 doPost()또는 doGet()을 호출

5. 호출된 doPost(), doGet() 메서드는 생성된 동적 페이지를 Response객체에 담아 컨테이너에 전달

6. 컨테이너는 전달받은 Response객체를 HTTPResponse형태로 바꿔 WebServer에 전달하고 생성되었던 스레드를 종료하고 httpServletRequest, httpServletResponse 객체를 소멸시킴

 

 


 

여기서 한 가지 의문이 들 수 있습니다.

번거롭게 Web Server와 WAS 둘 다 사용하지 않고 WAS만 사용하면 되지 않을까요? 두 개념을 학습할 필요도 없고 더 편리할 것 같은데 말이죠.

 

Web Server와 WAS를 분리해놓은 걸까요? 

이는 Web Server를 WAS 앞에 둠으로써 얻는 이점을 살펴보면 이유를 알 수 있습니다.

 

1. 기능을 분리하여 서버 부하 방지

Web Server를 두는 가장 큰 이유입니다.  만약 정적 콘텐츠 요청까지 WAS가 처리한다면 정적 데이터 처리로 인해 부하가 커지게 되고, 동적 콘텐츠의 처리가 지연됨에 따라 수행 속도가 느려집니다.  그렇기에 단순한 정적 컨텐츠 요청은 Web Server에서 빠르게 클라이언트에 제공하여 WAS로 넘어오지 않게 막는 것이 좋습니다. 

 

2. 물리적으로 분리하여 보안 강화

WebServer와 WAS는 Port번호가 다릅니다. 이렇게 물리적으로 두 개의 서버를 완전히 분리하여 보안을 강화시켜줄 수 있습니다. 또한 SSL에 대한 암복호화 처리에 Web Server를 사용하여 웹 서비스에 대한 보안을 강화시켜줄 수 있습니다.

 

3. 여러 대의 WAS를 연결 가능

Web Server하나에 여러 대의 WAS를 설치하고 Load Balancing을 하여 WAS의 부하를 더 낮춰줄 수도 있습니다. 

 

 

 

 

 

 

개념을 이해하는데 많은 도움을 받은 감사한 블로그 :

[Web] Web Server와 WAS(Web Application Server)에 대하여 (tistory.com)