ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [web] Web Server와 WAS 차이점, 동작과정 알아보기
    IT/CS지식 2022. 10. 9. 22:30

     

    📑 Static Pages와 Dynamic Pages

     

    웹서버와 WAS의 차이를 알아보기 전에 정적페이지와 동적페이지에 대해 짚고 넘어가려한다. 

     

     

    🎃 Static Pages

     

    : Web Server는 파일 경로 이름을 받아 경로와 일치하는 file contents를 반환한다. 항상 동일한 페이지를 반환한다. 

    ex) image, html, css, javascript 파일과 같이 컴퓨터에 저장되어 있는 파일들이 대표적이다. 

     

    🎃 Dynamic Pages

     

    : 인자의 내용에 맞게 동적인 contents를 반환한다. 웹 서버에 의해서 실행되는 프로그램을 통해 만들어진 결과물

    ex) servlet

     

     


     

     

    📑 Web Server란?

     

    📌 개념

     

    :웹 서버는 소프트웨어랑 하드웨어로 구분되는데 하드웨어는 web 서버가 설치되어 있는 컴퓨터를 의미하고, 소프트웨어는 웹 브라우저 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠 (.html .jpeg .css 등)을 제공하는 컴퓨터 프로그램이다. 

     

    정적인 파일을 들고 서빙한다고 생각하면 되는데, html을 특정 사용자마다 다르게 보여줄 순 없다.

     

     

    📌 기능

     

    : HTTP 프로토콜을 기반으로 하여 클라이언트(웹 브라우저 또는 웹 크롤러)의 요청을 서비스하는 기능을 담당한다. 요청에 따라 아래 두 가지 기능 중 적절하게 선택하여 수행한다.

    - 정적인 컨텐츠 제공, WAS를 거치지 않고 바로 자원을 제공한다. 
    - 동적인 컨텐츠 제공을 위한 요청 전달, 클라이언트의 요청(Request)를 WAS에 보내고, WAS가 처리한 결과를 클라이언트에게 전달(응답, Response)한다. 

     

     

     

    📌 예시

    : Apache Server, Nginx, IIS ,,, 

     

     

     

    WAS (Web Application Server)

     

     

    📌 개념

     

    : WAS는 DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Application Server이다. HTTP를 통해 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어(소프트웨어 엔진)이다. 

    웹 컨테이너(Web Container) 혹은 서블릿 컨테이너(Servlet Container)라고 불린다. 여기서 컨테이너란 JSP, Servlet을 실행시킬 수 있는 소프트웨어를 말한다. 즉) WAS는 JSP, Servlet 구동 환경을 제공한다.

     

    추가적으로 동적 HTML, HTTP API(JSON) , 스프링 MVC 등등 프로그램 코드를 실행해서 애플리케이션 로직을 수행하기에 사용자에 따라 다른 화면을 보여줄 수 있다. 

     

     

    📌 역할과 기능

     

    : WAS = Web Server + Web Container 를 의미하며 Web Server 기능들을 구조적으로 분리하여 처리하고자 하는 목적으로 제시되었다. (분산 트랜잭션, 보안 , 쓰레드 처리 등등) 주로 DB 서버와 같이 수행된다. 

     

     

    📌 개념

     

    : Tomcat, JBoss, Jeus, Web Sphere 등 

     

     


     

     

    📑 Web Server와 WAS 차이

     

    📌 Web Server가 필요한 이유?

     

    : 클라이언트(웹 브라우저)에 이미지 파일(정적 컨텐츠)을 보내는 과정을 생각해보자. 이미지 파일과 같은 정적 파일들은 웹 문서가 클라이언트로 보내질 때 함께 가는 것이 아니다. 클라이언트는 HTML 문서를 먼저 받고 그에 맞게 필요한 이미지 파일들을 서버로 다시 요청하면 그때서야 이미지 파일을 받아온다. Web Server를 통해 Application Server까지 가지 않고 앞단에서 빠르게 보내줄 수 있다. 

     

    즉) Web Server에서 정적 컨텐츠만 처리하도록 기능을 분배해서 서버의 부담을 줄일 수 있다. 

     

     

    📌 WAS가 필요한 이유?

     

    : 웹 페이지는 정적 컨텐츠와 동적 컨텐츠가 모두 존재한다. 사용자의 요청에 맞게 적절한 컨텐츠를 만들어 제공해야 한다. 만약 Web Server만 이용한다면 미리 사용자의 요청에 맞는 적절한 동적 컨텐츠를 만들어두고 서비스를 해야한다. 이는 절대적으로 자원의 부족을 초래한다. 따라서 WAS를 통해 요청에 맞는 데이터를 DB에서 가져와 비즈니스 로직에 맞게 그때 그때 결과를 제공해 자원을 효율적으로 사용할 수 있다. 

     

     

     

     

     

    📑 Web Service Architecture 동작 과정

     

     

     

    위의 구조는 Client -> Web Server -> WAS -> DB 순서이다. 이 순서의 동작과정을 적어보려한다.

     

    1. Web Server는 웹 브라우저 클라이언트로부터 HTTP 요청을 받는다. 

    2. Web Server는 클라이언트의 요청(Request)을 WAS에 보낸다.

    3. WAS는 관련된 Servlet을 메모리에 올린다.

    4. WAS는 web.xml을 참조하여 해당 Servlet에 대한 Thread를 생성한다. (Thrad Pool) 이용

    5. HttpServletRequest와 HttpServletResponse 객체를 생성해 Servlet에 전달한다. 

     5-1. Thread는 Servlet의 service() 메서드를 호출한다.

     5-2. service() 메서드는 요청에 맞게 doGet() , doPost() 메서드를 호출한다.

    6. doGet() 또는 doPost() 메서드는 인자에 맞게 생성된 적절한 동적 페이지를 Response 객체에 담에 WAS에 전달한다.

    7. WAS는 Response 객체를 HttpResponse형태로 바꾸어 Web Server에 전달한다.

    8. 생성된 Thread를 종료하고 HttpServletRequest와 HttpServletResponse 객체를 제거한다. 

     

     

     

     

    📑 참고!! Thread Pool 특징

     

    쓰레드풀은 필요한 쓰레드를 쓰레드 풀에 보관하고 관리한다. 쓰레드 풀에 생성 가능한 쓸드의 최대치를 관리하는데, 톰캣은 최대 200개를 기본 설정으로 해뒀다. (변경가능!) 

     

    쓰레드가 필요하면, 이미 생성되어 있는 쓰레드를 쓰레드 풀에서 꺼내서 사용한다. 사용을 종료하면 쓰레드 풀에 해당 쓰레드를 반납한다. 만약 최대 쓰레드가 모두 사용중이라면? 기다리는 요청은 거절하거나 특정 숫자만큼 대기하도록 설정할 수 있다. 

     

    쓰레드가 미리 생성되어 있으므로, 쓰레드를 생성하고 종료하는 비용(CPU)이 절약되고, 응답 시간이 빠르다. 생성 가능한 쓰레드의 최대치가 있으므로 너무 많은 요청이 들어와도 기존 요청은 안전하게 처리될 수 있다. 

     

     

    🎃 그럼 쓰레드 최대치의 적정 숫자는 어떻게 찾는거죠?

     

    애플리케이션 로직의 복잡도, CPU, 메모리, IO 리소스 상황에 따라 모두 다르므로 성능 테스트를 통해서 찾아야 되는데 WAS는 멀티 쓰레드를 지원해주고 있어 개발자가 멀티 쓰레드 관련 코드를 신경쓰지 않아도 된다.! 마치 싱글 쓰레드 프로그래밍을 하듯이 편리하게 소스 코드를 개발하면 된다. 다만) 싱글톤 객체 (서블릿, 스프링 빈)는 주의해서 사용해야 된다.

     

     

     

     

     

     

     

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

    반응형

    댓글

Designed by Tistory.