[CS-WEB]Web Server와 WAS의 차이

지영·2023년 8월 7일
0

CS

목록 보기
56/77

📍 미리 알고가면 좋은 지식

  • 정적 데이터 : 웹 서버에서 클라이언트가 요청한 페이지를 만들기 위해 미리 저장된 파일(HTML, CSS, JS, IMG)를 말함.
  • 동적 데이터 : 정보의 변경이 잦은 정보(EX. 날씨, 주식, 이벤트, 게시글 등)들을 ajax와 같은 라이브러리를 사용하여 동적으로 받아오는 데이터를 말함

✔ Static Pages와 Dynamic Pages

웹서버와 WAS의 차이를 이해하기 이전에 정적페이지, 동적 페이지의 과정을 이해해야 합니다.

Static Pages(정적 페이지)

  • Web Server는 파일 경로 이름을 받아서 경로와 일치하는 파일 컨텐츠를 반환한다.
  • 항상 동일한 페이지를 반환한다.

Dynamic Pages(동적 페이지)

  • 인자의 내용에 맞게 동적인 컨텐츠를 반환한다.(-> 웹 서버에 의해서 실행되는 프로그램을 통해서 만들어진 결과물)
    예시) servlet : was위에서 돌아가는 자바 프로그램
  • 따라서 개발자는 servlet에서 doGet()을 구현하게 된다.

✔ WebServer와 WAS란,

WebServer

  • 역할
    • 클라이언트가 브라우저 주소창에 url을 입력하여 어떤 페이지를 요청하게 되면 http요청을 받아들여 html문서와 같은 정적인 콘텐츠를 사용자에게 전달해줌.
    • 단순히 저장된 웹 리소스들을 클라이언트로 전달하고 클라이언트로부터 콘텐츠를 전달받아 ㅇ저장하거나 처리함.
    • 클라이언트로부터 동적인 요청이 들어왔을 때, 해당 요청을 웹서버 자체적으로 처리하기 어려워서 WAS에게로 요청함.
  • 종류 : Apache, Nginx, IIS

WAS (Web Application Server)

  • 역할

    • 웹서버가 할 수 있는 기능 대부분이 WAS에서도 처리가 가능함. 또한 비지니스 로직이 있기 때문에 동적인 콘텐츠를 전달할 수 있음.
    • 주로 데이터베이스 서버와 같이 수행됨.
  • 종류 : Tomcat, JBoss 등

✔ WebServer와 WAS의 차이

📍 사용하는 목적이 다름

WebServerWAS
정적인 데이터를 처리하는 서버. WAS만 이용하는 경우보다 빠르고 안정적인 수행능력을 가짐동적이 데이터를 위주로 처리. DB와 연결되어 데이터를 조작이 필요한 경우에 활용함.

따라서, 효율적인 사용을 위해서는, 단순한 정적 콘텐츠는 웹서버에게 맡기고 나머지는 기능을 분리하여 WAS 서버의 부하를 방지하는 방향으로 가야한다. 왜냐하면 WAS가 정적인 콘텐츠 요청까지 처리한다면 부하가 커지면서 처리 속도가 느려지며 페이지 노출 시간도 늘어나는 문제가 발생하기 때문이다.

효율적인 아키텍쳐

웹서버를 WAS 앞 단에 두고, 웹서버가 처리하기 힘든 로직은 WAS에서 수행하는 방식

동작과정

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

0개의 댓글