Web Server와 WAS

Jay Jang·2022년 8월 12일
0

WEB

목록 보기
2/2
post-thumbnail

들어가며


이틀 전 면접에서 받은 질문이다. "웹 서버와 WAS의 차이에 대해서 설명해주세요"

... ㅠㅠ

아는 줄 알았는데 횡설수설 하다가 그냥 넘어갔다. 다음을 위해 정리해야겠다.


웹 서비스의 전체적인 흐름을 먼저 살펴보자.

Web Service의 전체적인 흐름



출처 : https://coding-factory.tistory.com/741

웹 개발을 하면 백엔드 에서는 다음과 같은 구조로 시스템을 구성하게 된다.
웹 브라우저에서 Web ServerHTTP Request를 보내고, 정적 데이터를 요청하는 경우에는 Web Server에서 곧 바로 응답을 한다. 하지만 동적 데이터를 요청하는 경우에는 Web Server가 아닌 Web Application Server WAS에 요청에 대한 처리를 위임한다. Web Application Server는 Web Server에서 받은 요청을 컨테이너가 응답하여 동적 콘텐츠를 삽입할 수 있는 프로그래밍 언어인 Java를 사용할 수 있게끔 JSP/Servlet을 실행한 뒤, DB에서 값을 가져오는 등의 동적인 값을 확정하고 컨테이너는 그 요청 결과를 HTML 문서로 재 정의하여 다시 Web Server로 넘긴 후 그것을 웹 브라우저에서 다시 응답한다.


복잡한 과정이다. 각 과정의 사용되는 기능과 용어, 그리고 왜 그들이 필요한지 차근차근 정리해보자.

먼저, 정적 페이지와 동적 페이지를 먼저 알아보자

Static Web Pages, Dynamic Web Pages


정적 웹 페이지 Static Web Page

정적 웹 페이지는 항상 동일한 페이지(데이터)를 응답을 보내준다.

Web Server는 파일 경로 이름을 받아 경로와 일치하는 file contents(image, html, css, JS file 등)를 반환하는데, 항상 동일한 페이지를 반환한다.
블로그 문서나, about 페이지와 같이 정적인 데이터를 보여주는 것이 정적 웹 페이지의 예시가 된다. 정적 웹 페이지는 사용자가 요청을 보내면 서버는 미리 저장된 웹 페이지를 보내기만 하면 되며, 사용자는 서버에 저장된 HTML, CSS, JS 등의 파일의 변경되지 않는다면 항상 같은 웹 페이지를 마주하게 된다.

동적 웹 페이지 Dynamic Web Page

동적 웹 페이지는 브라우저에게 요청을 받은 이후 서버가 추가 작업을 거친 이후 클라이언트에게 응답한다.

클라이언트가 요청할 때 마다 서버가 작업을 하기 때문에, 항상 같은 페이지를 보여주진 않는다.

브라우저를 켜 네이버 페이지를 한번 보자.

눈에 한번 담고, 새로고침하여 페이지를 다시 한번 로드해보자.

잘 보면 몇 가지 달라진 점이 있다. 회원 정보 상단에 날씨 정보가 바뀌었고, 그 아래 Adobe 광고가 바뀌었다.

동적 웹 페이지란 이런 것을 말한다. 정적 웹 페이지에서 주로 사용하는 HTML 만으로는 동적인 구현이 불가능하므로, 프로그래밍 언어를 통해 동적인 데이터를 HTML 문서와 함께 웹 브라우저에 돌려주는 것이다.

Web Server와 WAS


Web Server


Web Server의 개념은 하드웨어소프트웨어로 나누어 생각할 수 있다.
하드웨어의 관점에서는 Web Server가 설치되어 있는 컴퓨터를 말하고,
소프트웨어의 관점에서는 클라이언트가 서버에 HTTP 요청을 하면 정적인 컨텐츠(.html, .jpeg, .css 등)을 제공하는 미들웨어 프로그램이라고 할 수 있다.

Web Server의 기능


HTTP 프로토콜을 기반으로 클라이언트(웹 브라우저 또는 웹 크롤러)의 요청을 서비스하는 기능을 담당한다.

클라이언트의 요청에 따라 조금 더 세부적인 기능으로 나눌 수 있다.

  1. 클라이언트에게 요청을 받고 정적인 데이터에 대한 Request라면 (html, png, css 등) 정적인 콘텐츠를 Response한다.
  2. 클라이언트에게 요청을 받고 동적인 데이터에 대한 Request라면 WAS로 처리를 위임한 뒤 WAS에서 처리한 결과를 클라이언트에게 전달한다.

대표적인 Web Server로 Apache, WebtoB, NginX, IIS(Windows 전용 Web 서버) 등 이 있다.


WAS (Web Application Server)


DB 조회나 다양한 로직 처리를 요구하는 동적 컨텐츠를 제공하기 위해 만들어진 Application Server 미들웨어이다.

HTTP를 통해 컴퓨터나 장치에서 애플리케이션을 수행한다. DB 조회가 필요하거나, 사용자의 입력을 받아 서버에서 가변적으로 로직을 수행하는 등, 동적인 처리가 필요한 동적인 요청을 처리하기 위해 만들어졌다.

Web Container 웹 컨테이너, 또는 Servlet Container 서블릿 컨테이너 라고 불리는데, 이 때 컨테이너란 JSP, Servlet을 실행시킬 수 있는 소프트웨어를 말한다.
WAS는 JSP, Servlet 구동 환경을 제공하며, 프로그래밍 언어로 작성한 뒤 HTML 문서로 만들고 Web Server로 전달한다.

WAS의 기능


  1. 프로그램 실행 환경과 데이터베이스 액세스를 제공한다.
  2. 여러 개의 트랜잭션을 관리한다.
  3. 업무를 처리하는 프로그래밍 언어의 비즈니스 로직을 수행한다.
  4. Web Service 플랫폼으로서의 역할 병행
  5. 동적인 페이지를 생성할 수 있는 서버

그림에서 볼 수 있듯이, WAS는 웹 서버와 웹 컨테이너를 포함하고 있다.

대표적인 WAS로 Tomcat, Jeus, JBoss, Netty 등이 있다.

WAS 작동 프로세스

  1. Web Server로 요청이 오면 컨테이너(Servlet)가 응답
  2. 컨테이너는 web.xml을 참조하여 해당 서블릿에 대한 쓰레드를 생성하고 httpServletRequest와 httpServletResponse 객체를 생성하여 전달한다.
  3. 컨테이너는 JSP/Servlet을 호출한다.
  4. 호출된 Servlet의 작업을 담당하게 된 쓰레드는 doPost() 또는 doGet()을 호출한다.
  5. 호출된 doPost(), doGet() 메소드는 생성된 동적 페이지를 Response 객체에 담아 컨테이너에 전달한다.
  6. 컨테이너는 전달받은 Response 객체를 HttpResponse 형태로 바꾸어 WebServer에 전달한다.
  7. 생성되었던 스레드를 종료하고, httpServletRequest, httpServletResponse 객체를 소멸시킨다.

Web Server와 WAS를 분리해놓은 이유


WAS는 동적인 컨텐츠만 처리하도록 설계된 것이 아니라, 정적인 컨텐츠도 함께 처리할 수 있게 설계되었다. 때문에 WAS 하나만 사용하여 웹 서비스를 제공하는 것도 가능하다. 트래픽이 적다면 WAS 하나만 사용하여 서비스하는 것이 복잡하지 않아 유지 보수하기도 좋다. 하지만 WAS는 DB 조회나 프로그래밍 로직 처리로 인해 많은 트래픽을 처리량에 있어 약점을 보인다. 트래픽이 많아진다면 WAS앞에 Web Server를 하나 더 두어 정적인 요청은 Web Server가 처리하도록 하여 트래픽을 분산시키는 것이 좋다.

보안적인 측면도 고려할 수 있다. 물리적으로 분리함으로써 보안을 강화할 수 있고, 특히 SSL에 대한 암복호화 처리에 Web Server를 사용한다.

Web Server를 통해 여러 대의 WAS를 연결하여 로드 밸런싱 Load Balancing를 할 수도 있다. 이로 인해 fail over, fail back 처리에 유리하다. 특히 여러 대의 서버를 사용하는 대용량 웹 애플리케이션의 경우 Web Server와 WAS를 분리하여 무중단 운영을 위한 장애 극복에 쉽게 대응할 수 있다.
또한 다양한 웹 애플리케이션 서비스를 제공할 수 있다. 언어, 프레임워크 기술에 있어서 Java Application이나 PHP, Python 등을 Web Server 와 연결하여 하나의 서비스로 제공할 수 있다.

이 모든 이유가 자원 이용의 효율성이라는 하나의 맥락으로 통한다. 또한 장애 극복, 배포 및 유지 보수의 편의성 또한 Web Server와 WAS 분리의 이유가 되겠다.

REFERENCE


https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
https://gyoogle.dev/blog/web-knowledge/Web%20Server%EC%99%80%20WAS%EC%9D%98%20%EC%B0%A8%EC%9D%B4.html
https://codechasseur.tistory.com/25
https://coding-factory.tistory.com/741
https://velog.io/@gillog/Web-Server%EC%99%80-Web-Application-Server%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://www.youtube.com/watch?v=NyhbNtOq0Bc
https://www.youtube.com/watch?v=70bzGTx-BHo

profile
그때는맞고지금은틀리다

0개의 댓글