참고 자료
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
https://melonicedlatte.com/web/2019/06/23/210300.html
Web Server와 WAS에 대해서 알아보기 전에 Static Pages(정적 페이지)와 Dynamic Pages (동적 페이지)에 대해서 알아보자
1. Static Pages, Dynamic Pages
(1) Static pages(정적 페이지)
정적 페이지란 변하지 않는 Page를 의미하는 데, 유튜브나 페이스북, 인스타그램의 메인 페이지처럼 시간 혹은 로그인 여부 등에 따라 안에 들어있는 콘텐츠가 유동적으로 변하지 않고 기업 소개와 같이 변하지 않는 페이지를 의미한다.
Web Server는 요청을 받을 때, 파일 경로와 이름을 받아서 이와 일치하는 HTML와 같은 정적 파일을 반환하게 되며 이는 항상 동일한 페이지를 반환해야한다.
정적 페이지로는 Image, Html, Css, Javascript와 같이 컴퓨터에 저장되어잇는 파일을 의미한다.
(2) Dynamic Pages(동적 페이지)
동적 페이지란 정적 페이지와 반대로 변하는 Page를 의미한다. 유튜브, 페이스북의 메인창과 같이 누가 로그인 했는 지에 따라 혹은 시간에 따라 다른 콘텐츠를 보여주는 데, 이는 요청을 받을 때 받는 인자에 따라 그에 맞는 Contents를 반환하는 것이다.
즉 Web Server에 의해서 실행되는 프로그램을 통해서 만들어진 결과물이다.
2. Web Server, WAS의 차이
(1) Web Server
Web Server는 소프트웨어와 하드웨어로 구분된다. 하드웨어는 Web Server가 설치되어 있는 컴퓨터를 의미하며, 소프트웨어는 클라이언트, 즉 웹 브라우저로부터 HTTP 요청을 받아서 Static Content인 Html, Css, Image 등을 제공하는 컴퓨터 프로그램을 의미한다.
Web Server는 HTTP 프로토콜을 기반으로 하여 클라이언트의 요청을 받아서 그에 서비스를 응답하는 기능을 담당하게 되는 데, 요청에 따라서 두 가지 기능을 적절하게 선택하여 수행하게 된다.
첫번째는 Static Content를 제공하는 것으로 이는 WAS를 거치지 않고 바로 리소스를 제공하게 되며, 두번 째는 Dynamic Content를 제공하는 것인데, 클라이언트의 요청을 WAS로 보내고, WAS가 처리한 결과를 클라이언트에게 전달하는 역할을 한다.
Web Server에는 Apache Server나 Nginx, lls등이 있다.
(2) Container
Container는 Dynamic Data를 처리하여 Static Page로 생성해주는 소프트웨어 모듈이다. 사용자가 로그인을 하여 My Page 메뉴어 들어가게 되면, 사용자가 누군지에 따라 이름, 이메일, 연락처와 같은 보여질 정보들이 달라지게 된다. 사용자의 요청이 들어오면 Web Server는 정적인 요소만 클라이언트에 보낼 수 있으며, 동적으로 처리해야하는 부분은 처리할 수 없기 때문에 Container는 이러한 부분을 대신 처리해서 Web Server에 정적인 파일로 만들어서 보내주는 모듈이다.
클라이언트 측에서 개발자 도구를 이용하여 파일을 살펴보면 php, ejs 파일로 만든 소스코드도 전부 HTML로 전송되는 것을 볼 수 있는 데, 이는 해당 파일에서 동적으로 처리해야할 부분을 처리하고, 정적 파일로 만든 후에 클라이언트에 전송되었다고 생각하면 편한다.
따라서 PHP, JS 등으로 처리한 코드 부분은 클라이언트에서는 볼 수 없으며, 자바 기반의 서버에서는 서블릿을 많이 사용한다.
(3) WAS, Web Application Server
WAS는 Web Application Server의 줄임말로, Database 조회와 같은 다양한 로직 처리를 요구하는 동적인 콘텐츠를 제공하기 위해서 만들어진 Application Server이다. HTTP 프로토콜을 통하여 컴퓨터나 장치에 어플리케이션을 수행해주는 미들웨어(소프트웨어 엔진)이라고 볼 수도 있으면서, Web Container(웹 컨테이너), Servlet Container(서블릿 컨테이너)라고도 불린다.
웹 서버로부터 오는 동적인 요청을 처리하는 서버이며, Web Server와 Container를 붙여놓은 서버라고 보면 되는 즉 WAS는 JSP, EJS, PHP, Servlet를 실행시킬 수 있는 구동환경이다.
WAS는 Web Server 기능들을 구조적으로 분리하여 처리하고자하는 목적으로 만들어졌으며, 분산 트랜잭션, 보안, 메시징, 쓰레드 처리 등의 기능을 처리하는 분산 환경에서 사용되는 데, 주로 DB 서버와 같이 수행된다.
현재는 WAS가 가지고 잇는 Web Server도 Static Content를 처리하는 데 성능상 큰 차이가 없으며, WAS의 주요 기능은 아래와 같다.
- 프로그램 실행 환경과 DB 접속 기능 제공
- 여러 개의 트랜잭션 관리 기능
- 업무를 처리하는 비즈니스 로직 수행
WAS는 Tomcat, JBoss, Jeus 등이 있다.
3. Web Server와 WAS를 구분하는 이유
(1) Web Server가 필요한 이유
클라이언트에 이미지 파일와 같은 Static Content를 보내는 과정을 생각해보면, JPEG와 같은 Static File은 HTML이 클라이언트로 보내질 때 함께 가는 것이 아닌, HTML을 먼저 보내고, 클라이언트가 그에 맞게 필요한 이미지를 다시 서버로 요청하면 그 때 이미지 파일을 전송하는 것이다.
Web Server를 사용하면, Static File을 Application Server까지 가지 않고 빠르게 보내줄 수 있으며, 이는 Web Server에서는 Static 콘텐츠만 처리하도록 기능을 분배하여 서버의 부담을 줄인다.
(2) WAS가 필요한 이유
우리가 보는 Web Page는 Css, Image와 같은 Static Content는 물론, 요청에 따라 달라지는 Danymic Content가 모두 존재하기에, 사용자의 요청에 맞게 적절한 콘텐츠를 제공해야한다. 이 때 Web Server만 이용한다면, 사용자의 원하는 요청에 대한 모든 결과 값을 미리 만들어 놓고 서비스를 해야하는 데, 이는 자원적으로 불가능에 가깝다.
따라서 WAS를 통해 요청에 맞는 데이터를 Database에서 가져와서 로직에 맞게 그 때 그 때 결과를 만들어서 제공하여 자원을 효율적으로 사용할 수 있다.
(3) Web Server와 WAS 모두 사용해야하는 이유
Web Server는 Static Content만 처리할 수 있고, WAS는 Dynamic Content도 처리할 수 있다. 그렇다면 모든 기능을 WAS가 수행해도 되진 않을까라는 생각은 기능을 분리하여 서버의 부하를 방지하기 위해서 옳지 않다.
WAS는 DB 조회나 다양한 로직을 처리하느라 과부하가 심하기에, 단순한 Static Content는 Web Server가 빠르게 클라이언트에 제공하는 것이 효율적이며, WAS는 기본적으로 동적인 콘텐츠를 제공하기 위한 서버이기도 하며, 만약에 Static Content 요청까지 WAS가 처리하게 된다면 Static FIle 처리로 인하여 부하가 커지고, Dynamic Content 처리가 지연되어 속도가 느려지면 유저 경험을 만족시킬 수 없다.
또한 Web Server와 WAS를 물리적으로 분리하여 SSL에 대한 암복호화 처리에 Web Server를 사용해 보안을 강화할 수도 있으며, 여러 대의 WAS를 연결할 수도 있다.
Load Balancing을 위하여 Web Server를 사용할 수 있으며, Fail Over와 Fail Back 처리에도 유리하게 되고, 대용량 웹 서비스 같은 경우에는 Web Server와 WAS를 분리하여 무중단으로 24시간 운영하기 위한 장애 극복에 쉽게 대응할 수도 있는 데, 이는 Web Server에서 오류가 발생한 WAS를 이용하지 못 하도록 한 후에 WAS를 재시작하면 사용자는 오류를 느끼지 못 하게된다.
PHP와 Java Application을 같이 사용하여 여러 웹 서비스를 제공할 수도 있으며, 접근 허용 IP 관리나, 세션 관리 등도 Web Server에서 한다면 효율적이라고 한다.
결론적으로 Web Server와 WAS를 두 개를 적절하게 잘 사용하여 서버에 대한 부하를 줄이고 효율적인 자원 관리를 통하여 서비스를 하기 위함이다.
'DevOps > Server' 카테고리의 다른 글
Turborepo로 프로젝트 구성하기 (0) | 2024.05.07 |
---|---|
Serverless에 대해서 알아보자! (0) | 2023.04.21 |
Apache와 Tomcat와 그 차이에 대해서 (0) | 2023.01.04 |