[Spring] | Web Server와 WAS(Web Application Server)

제롬·2022년 5월 17일
2

Spring

목록 보기
1/1

Web Server


Web Server란?

웹 서버란 HTTP 프로토콜을 기반으로 클라이언트로 부터 요청을 받아 그에 해당하는 정적 콘텐츠를 제공하는 소프트웨어입니다.
이때 정적 콘텐츠는 HTML, CSS, 이미지 등 즉시 응답가능 자원을 말하며 개발자가 변경하지 않는이상 항상 동일하게 유지되는 자원을 말합니다.

Web Server의 기능

  • WAS(Web Application Server)를 거치지않고 바로 자원(정적 콘텐츠)을 제공한다.
  • 동적 콘텐츠 제공을 위해 클라이언트 요청(Request)을 WAS에 전달하고 WAS가 처리한 결과를 클라이언트에게 전달(응답, Response)한다.
  • 대표적으로 사용되는 웹 서버의 예
    • NginX
    • Apache Server
    • IIS(Window 전용 Web Server)

Web Application Server


WAS(Web Application Server)란?

WAS란 웹 서버와 웹 컨테이너의 기능을 모두 수행하는 프로그램으로 웹 서버가 클라이언트로부터 동적 콘텐츠에 대한 요청을 받을 경우 해당 요청을 전달받아 DB조회 또는 비즈니스 로직처리 등의 작업을 수행하여 클라이언트에게 동적 콘텐츠를 제공하는 기능을 한다.

WAS의 기능

  • WAS는 HTTP 프로토콜을 기반으로 애플리케이션을 수행시켜주는 미들웨어이다.
    • 웹 어플리케이션 실행 환경과 DB접속 기능을 제공한다.
  • WAS = Web Server + Web Container
    • 즉, 웹서버의 기능을 포함하고 있어 정적 콘텐츠를 제공할 수 있다.
  • WAS는 웹 컨테이너 혹은 서블릿 컨테이너라고도 부른다.
    • 웹 컨테이너는 JSP, Servlet을 실행시킬 수 있는 구동환경을 제공한다. 자바 계열에서는 웹 어플리케이션 컨테이너라고도 부른다. 웹 어플리케이션 컨테이너는 웹 어플리케이션이 배포되는 공간을 말한다.
  • 여러 웹 어플리케이션 서비스가 가능하다.
    • jsp, asp, php와 같은 언어들을 사용해 동적인 페이지를 생성가능하다. 프로그램(웹 어플리케이션)을 실행시켜 비즈니스 로직을 처리해 그 결과를 웹 서버에 전달해준다.
  • 대표적으로 사용되는 WAS
    • Tomcat, JBoss, Jeus 등

Web Server와 WAS


WAS만 사용했을 경우

  • WAS는 웹 서버의 기능을 포함하기 때문에 웹 서버의 기능을 제공할 수 있다.
  • WAS와 DB만으로도 시스템 구성이 가능하지만, WAS가 너무 많은 기능을 담당해 서버 과부하의 우려가 생긴다.
  • 정적 컨텐츠의 요청까지 WAS가 처리한다면 정적 데이터 처리로 인해 서버에 부하가 커지게 되고, 동적 컨턴츠의 처리가 지연됨에 따라 서비스의 속도가 느려질 수 있다.
  • WAS 장애시 오류화면 노출이 불가능해진다.

Web Server와 Was를 함께 사용하는 이유

  • 웹 서버를 통해 정적인 파일들을 WAS까지 가지 않고 앞단에서 빠르게 처리할 수 있다.
  • 비즈니스 로직같은 동적인 처리가 필요하면 WAS에 요청을 위임한다.
  • WAS는 기본적으로 애플리케이션 로직을 처리하여 동적 페이지를 제공하기 위해 최적화 되어있는 서버이다.
  • 위처럼 웹 서버와 WAS를 함께 사용하면 효율적인 리소스 처리가 가능해진다.
    • 정적 리소스의 요청 증가시 웹 서버만 별도로 증설할 수 있으며 동적 리소스의 요청 증가시 마찬가지로 WAS만 증설하여 서버를 안정적으로 관리할 수 있다.

Web Server와 WAS를 구분함으로써 얻는 이점

  • 기능을 분리하여 서버 부하 방지
    • WAS가 웹 서버의 기능을 포함해 모든 역할을 혼자 수행할 수 있지만 그만큼 WAS가 감당해야하는 작업이 많아지게 된다. 그렇기 때문에 각 서버가 감당하는 작업을 줄여 보다 효율적인 사용이 가능하도록 하기 위해 웹 서버와 WAS를 분리한다.
  • 물리적으로 분리하여 보안 강화
    • WAS에는 웹 어플리케이션이 올라가있기 때문에 외부와 직접 연결되어 있다면 중요한 설정이나 파일들이 외부로 노출될 위험이 있다. 웹 서버를 WAS 앞에 위치시켜 리소스를 보다 안전하게 보호할 수 있다.
  • 웹 서버에 여러대의 WAS를 연결 할 수 있다.
    • Load Balancing(서버나 컴퓨터에 가해지는 부하를 분산해주는 기술)을 위해서 Web Server를 사용한다.
    • fail over(작동 중지된 WAS 대신 다른 WAS를 사용해 장애 극복)에 유용
    • fail back(작동 중지된 WAS를 재작동 시킴)에 유용
    • 특히 대용량 웹 어플리케이션의 경우(여러개의 서버 사용) Web Server와 WAS를 분리하여 무중단 운영을 위한 장애 극복에 쉽게 대응할 수 있다.
      • 예를 들어, 앞 단의 Web Server에서 오류 발생시 WAS를 이용하지 못하도록 한 후 WAS를 재시작함으로써 사용자는 오류를 느끼지 못하고 이용할 수 있다.
  • 여러 웹 어플리케이션 서비스 가능
    • 예를 들어, 하나의 서버에서 PHP Application과 Java Application을 하나의 웹 서버에 연결해 함께 사용할 수 있다.

Web Service Architecture


웹 시스템은 다양한 구조로 설계가 가능하다.

  • Client - Web Server - DB
  • Clinet - WAS - DB
  • Client - Web Server - WAS - DB

이중에서 Client - Web Server - WAS - DB의 웹 시스템 구성이 가장 효율적으로 리소스를 관리할 수 있는 구성이다.

Web Server를 WAS앞에 두고 정적 콘텐츠를 Web Server가 처리하고 동적 콘텐츠는 WAS에게 요청을 위임함으로써 WAS는 중요한 애플리케이션 로직 처리를 전담할 수 있게 된다.

Client - Web Server - WAS - DB 웹 시스템 구조의 요청 처리 순서

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

DBMS와 MiddleWare


DBMS(DataBase Management System)

  • 다수의 사용자들이 DB내의 데이터를 접근할 수 있게 해주는 소프트웨어
  • DBMS는 보통 서버의 형태로 서비스를 제공한다.
    • MySQL, MariaDB, Oracle 등
  • DBMS에 클라이언트 시스템이 많이 접속하여 동작하면 여러 문제가 발생할 수 있다.
    • Client에 로직이 많아지고 Client 프로그램의 크기가 커진다.
    • 로직이 변경될때마다 매번 다시 배포해줘야한다.
    • Client에 대부분의 로직이 포함되어 배포되기 때문에 보안문제가 발생할 수 있다.
    • 이런 문제를 해결하기 위해 MiddleWare가 등장했다.

MiddleWare

  • Client - MiddleWare - DB Server(DBMS)의 구조를 갖는다.
  • MiddleWare의 동작과정
    • Client는 단순히 요청만 중앙에 있는 MiddleWare Server에 보낸다.
    • MiddleWare Server에서 대부분의 로직이 수행된다.
    • 이때, 데이터 조작이 필요할 경우 DBMS에게 요청한다.
    • 로직 결과를 Client에게 전송한다.
    • Client는 그 결과를 화면에 보여준다.
  • 비즈니스 로직을 Client와 DBMS사이에 MiddleWare가 담당하면서 Client는 입출력만 담당하게 된다.

[Reference]
Heee's Development Blog
김영한 - 스프링 MVC 1편
Tecoble - 로드 밸런싱
Joo Studio
테코톡 - 웹서버 vs 와스
toy-crane

1개의 댓글

comment-user-thumbnail
2023년 7월 25일

유익한 글 감사합니다!

답글 달기