ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Web Server와 WAS(Web Application Server)의 차이점 파악하기
    Web Programming 2022. 2. 12. 17:41

     

    안녕하세요! 이번 포스팅은 Web Server와 WAS(Web Application Server)의 개념과 차이점을 알아보도록 하겠습니다.

    Web Server 란?

     

    • 하드웨어 환경

         하드웨어 환경은 사용자와의 인터페이스 역할을 하는 클라이언트(Client) 그리고 클라이언트와 통신하여

     서비스를 제공하는 서버(Server)로 구성되어있습니다.

     

    여기서 서버는 사용 목적에 따라 웹 서버(Web Server), 웹 애플리케이션 서버(WAS), 데이터베이스 서버(DB Server),

    파일 서버(File Server) 등으로 구분됩니다.

    데이터베이스 서버와 파일 서버는 추후에 알아 보도록하고 이번 포스팅에서는 웹 서버와 WAS를 공부해보겠습니다.

     

    웹 서버를 한 문장으로 말하자면 '클라이언트로부터 직접 요청을 받아 처리하는 서버로, 저용량의 정적 파일들을 제공하는 서버' 라고 말할 수 있습니다.

    웹 서버의 대표적인 종류로는 Apache HTTP Server, Microsoft Internet Information Service, Google Web Server 등이

    존재합니다.

     

    그렇다면 정적 파일(Static File) 이란 무엇일까요?

    • 정적 파일은 인터넷 브라우저와 같은 클라이언트에서 별도의 처리 과정 없이 다운로드하여 사용자에게 보여주는 파일로 HTML, CSS, javascript, 이미지 파일 등이 있습니다.

    레스토랑으로 비유를 들어 보자면 레스토랑에서 제공하는 메뉴판, 테이블, 의자, 진열되어있는 상품은 정적인 요소들로 손님의 요청이 없어도 항상 준비가 되어있는 물건들입니다. 이런 것들을 관리하는 서버가 웹 서버이고 손님이 특정 음식을 주문하고 주방장이 요리를 만들어서 손님에게 제공하는 것이 바로 Web Application Server(WAS)의 역할입니다.

     

     

    그렇다면 웹 서버의 기능은 정적 파일을 제공하는것 말고도 또 어떤 기능이 있을까요?

    • 동적인 콘텐츠 제공을 위한 요청을 전달
    • 클라이언트의 요청(Request)을 WAS에 보내고, WAS가 처리한 결과를 클라이언트에게 전달(응답, Response)한다.
    • 클라이언트는 일반적으로 웹 브라우저를 의미한다.

     

    WAS(Web Application Server) 란?

    웹 애플리케이션 서버(WAS; Web Application Server)란 사용자에게 동적 서비스를 제공하기 위해 웹서버로부터 요청을 받아 데이터 가공 작업을 수행하거나, 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행하는 서버입니다.

    WAS의 대표적인 예로는 Tomcat, IBM WebSphere, Oracle WebLogic 등이 있습니다.

     

    그렇다면 동적 서비스(Dynamic Service)는 무엇일까요?

    • 동적 서비스는 사용자의 입력에 따라 다른 결과를 보여주는 서비스를 의미합니다. 쇼핑몽을 예로 들면, 상품들을 인기순으로 정렬하기 위해 클릭을 했을 때 나오는 화면은 미리 만들어져 있는 페이지가 아닌 클릭한 순간 상품들을 정렬하여 페이지를 구성한 후 표시하는 동적인 화면입니다.
    • 사용자의 요구에 따라 변하는 동적인 콘텐츠를 처리하기 위해 사용되는 미들웨어(Middleware)입니다.
    • 데이터 접근, 세션 관리, 트랜잭션 관리 등을 위한 라이브러리를 제공합니다.
    • 주로 데이터베이스 서버와 연동해서 사용합니다.
    • WAS가 JSP나 서블릿(Servlet)과 같은 프로그램을 구동하여 동적인 자료를 처리한 후 해당 정보를 웹 서버로 보내면, 웹 서버는 이를 클라이언트로 보내는 것입니다.

     

    간단히 말하자면 Web Server는 정적 자료를 제공하는 것이고 WAS는 동적 서비스를 제공하는 것이라 할 수 있습니다.

     

     

     

    Web Server와 WAS를 구분하는 이유

    • Web Server는 왜 필요한가요? 

    이미지 파일과 같은 정적 파일들은 HTML 문서가 클라이언트로 보내질 때 함께 가는 것이 아니라 클라이언트는 HTML 문서를 먼저 받고 필요한 이미지 파일들을 다시 서버로 요청하면 그때서야 이미지 파일을 받아옵니다.

    하지만 Web Server를 통해서 정적 파일들을 WAS까지 가지 않고 앞단에서 빠르게 처리할 수 있습니다.

    이렇게 웹 서버와 WAS의 역할을 분리한다면 서버의 부담을 줄일 수 있습니다.

     

    또한 아파치 웹 서버는 reverse proxy라는 기능을 제공합니다. 프락시는 무언가를 대신해준다는 뜻으로 reverse proxy는 클라이언트에게 서버의 정보를 감추는 역할을 합니다. 보안상 내부 구조를 감춰야 하기 때문에 예를 들어서 정적 리소스들이 저장되어있는 디렉터리를 감추고 서비스가 몇 번 포트로 돌고 있는 지등을 감춰주는 역할을 합니다.

     

    때문에 웹 서버를 두는 이유는 보안상의 이유도 존재합니다.

     

    • Web Application Server(WAS)는 왜 필요한가요?

    기존의 웹사이트는 정적인 콘텐츠뿐만 아니라 사용자들이 이용할 수 있는 다양한 기능을 제공합니다. 이런 기능을 제공하기 위해서는 데이터베이스에서 데이터를 관리해야 하고 사용자의 요청에 맞게 유동적인 응답을 해줘야 합니다.

    이때 Web Server만을 이용한다면은 사용자가 요구하는 요청에 따라 모든 경우의 수를 고려해서 결괏값을 미리 만들어서 제공해야 하는데, 이는 절대적으로 비효율 적이며 자원이 부족합니다.

     

     

    따라서 WAS를 통해 사용자의 Request에 맞는 데이터를 데이터베이스에서 가져와서 비즈니스 로직에 맞게 결과 만들어서 제공함으로써 자원을 효율적으로 사용할 수 있습니다.

     

    • WAS가 Web Server의 기능도 수행하면 되지 않을까요?
    1. Web Server와 WAS의 기능을 분리하여 서버 부하를 방지합니다.

            - WAS는 동적인 서비를 수행하기 위해 존재하는 서버이기 때문에 단순한 정적 콘텐츠는 Web Server에서 빠르게            클라이언트에게 제공하는 것이 좋습니다.

     

            - 정적 콘텐츠 요청까지 WAS가 처리한다면 부하가 커지게 되고 동적 콘텐츠의 처리가 지연돼서 수행 속도가

              느려집니다.

     

       2. 물리적으로 분리하여 보안을 강화합니다.

             

            -  SSL에 대한 암복호화 처리에 Web Server를 사용합니다.

       

       3.  여러 대의 WAS를 연결할 수 있습니다.

        

            - Load Balancing을 위해서 Web Server를 사용

                 * Load Balancing : 대용량의 트래픽이 몰릴 때 WAS에 분산해서 Request 전달

            - fail over(장애 극복), fail back 처리에 유리

            - 웹 서버와 WAS를 분리하여 무중단 운영을 위한 장애 극복에 쉽게 대응할 수 있습니다.

            - 예를 들어서 웹 서버에서 오류가 발생한 WAS를 이용하지 못하게 하고 WAS를 재시작함으로써

               사용자는 오류를 느끼지 못하고 이용할 수 있습니다.

     

    • Web Service Architecture(Client -> Web Server -> WAS -> DB) 구조

     

    1. 웹 서버는 클라이언트로부터 HTTP Request를 받습니다.

    2. 웹 서버는 클라이언트의 Request를 WAS에 보냅니다.

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

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

    5. HttpServletRequest와 HttpServletResponse 객체를 생성하여 Servlet에 전달합니다.

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

       전달합니다.

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

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

Designed by Tistory.