[Web] Web Server vs WAS(Web Application Server), 웹 서버와 WAS
프로그래밍 언어/Web

[Web] Web Server vs WAS(Web Application Server), 웹 서버와 WAS

반응형

Web Server

Web :

인터넷을 기반으로 한 정보를 공유, 검색할 수 있게 하는 서비스

URL, HTTP, HTML

 

Server : 

클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템

 

Web Server : 

클라이언트의 요청을 기다리고, 웹 요청(http)에 대한 데이터를 만들어서 응답.

이때 데이터는 웹에서 처리할 수 있는 html, css, image등 정적인 데이터로 한정

 

즉, 클라이언트로 부터 http 요청을 받아 html 문서와 같은 정적인 컨텐츠를 제공하는 서버

 

정적 컨텐츠?

어떤 사용자의 요청이든 항상 동일한 컨텐츠

정적 웹 페이지의 경우 Web Server에 미리 저장된 파일(Html, css, JS, Image 등)을 불러와 구성하는 페이지 이다.

서버에 저장된 데이터가 변경되지 않는 한 사용자는 고정된 웹 페이지를 보게 된다.

 

웹 서버는 정적인 컨텐츠만 줄 수있다.

WAS (Web Application Server)

클라이언트가 요청한 인자의 내용에 맞게 동적인 컨텐츠를 반환한다.

 

WAS는 웹 서버 단독으로는 처리할 수 없는 데이터베이스의 조회나 다양항 로직처리가 필요한 동적 컨텐츠를 제공

WAS는 JSP,servlet 구동환경을 제공해주기 때문에 웹 컨테이너 혹은 서블릿 컨테이너 라고도 불린다.

*웹 컨테이너 : 웹 서버가 보낸 jsp,php등의 파일을 수행한 결과를 다시 웹서버로 보내주는 역할을 함

동적 컨텐츠?

page를 이용하는 사용자에 따라서 사용자에 맞춘 다른(동적인 page)page 컨텐츠를 제공


Client 데이터 요청 처리 과정

Client의 정적인 컨텐츠 요청

    : Web Server에서 바로 응답

1) Client -> Web Server (request)

2) Client <- Web Server (response)

 

Client의 동적인 컨텐츠 요청

    :WAS를 통해서 전달

1)Client -> Web Server (request) 

              (동적인 컨텐츠이네?) 

               Web Server -> WAS (request)

2)WAS 데이터 처리

3)Client <- Web Server <- WAS (response)

 

정적 컨텐츠 : WAS를 거치지 않고 바로 자원 제공

동적 컨텐츠 : 클라이언트 요청을 WAS에 보내고, WAS에서 처리한 결과를 클라이언트에게 전달


그렇다면 우리가 서버를 구성할때 Web Server를 사용하지 않고, WAS로만 처리하면 되는거 아니야?

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

WAS는 DB조회등 페이지를 만들기 위한 다양한 로직을 처리하는데, 단순한 정적 컨텐츠를 WAS에서 제공한다면 다른 작업에 사용하는 리소스들로 인해 지연이 생겨 날 수 있다.

정적 컨텐츠 = Web Server

동적 컨텐츠 = WAS

 

2)보안적인 측면

공격에 대해 Web Server를 앞단에 두어 중요한 정보가 담긴 DB나 로직까지 (WAS까지)전파되지 못하게 한다.

 

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

Load Balancing을 위해서 Web Server를 사용

예를 들어, 앞단의 WebServer에서 오류가 발생한 WAS를 이용하지 못하도록 한 후 WAS를 재시작함으로써 사용자는 오류를 느끼지 못하고 이용할 수 있다.

 

Web Server를 WAS 앞에 두고 필요한 WAS들을 Web Server에 플러그인 형태로 설정하면 더욱 효율적인 분산 처리가 가능하다.

동작과정

1. Web Server는 웹 브라우저 클라이언트로부터 HTTP 요청을 받는다.
2. Web Server는 클라이언트의 요청(Request)을 WAS에 보낸다.
3. WAS는 관련된 Servlet을 메모리에 올린다.
4. WAS는 web.xml을 참조하여 해당 Servlet에 대한 Thread를 생성한다. (Thread Pool 이용)
5. HttpServletRequest와 HttpServletResponse 객체를 생성하여 Servlet에 전달한다.
    5-1. Thread는 Servlet의 service() 메서드를 호출한다.
    5-2. service() 메서드는 요청에 맞게 doGet() 또는 doPost() 메서드를 호출한다.
    protected doGet(HttpServletRequest request, HttpServletResponse response)
6. doGet() 또는 doPost() 메서드는 인자에 맞게 생성된 적절한 동적 페이지를 Response 객체에 담아 WAS에 전달한다.
7. WAS는 Response 객체를 HttpResponse 형태로 바꾸어 Web Server에 전달한다.
8. 생성된 Thread를 종료하고, HttpServletRequest와 HttpServletResponse 객체를 제거한다.

 

참고

https://velog.io/@gillog/Web-Server%EC%99%80-Web-Application-Server%EC%9D%98-%EC%B0%A8%EC%9D%B4

https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html

반응형