WS(Web Server)는 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠를 제공하고, WAS(Web Application Server)는 동적인 컨텐츠를 제공한다.
WS 와 WAS를 살펴보기 전에 정적 페이지와 동적 페이지에 대해 알아보자.
정적 페이지와 동적 페이지
정적 페이지(Satatic Pages)
- 정적 페이지(Static Pages)는 데이터베이스에서 정보를 가져오거나 별도의 서버에서의 처리 작업이 없이도 사용자들에게 보여지는 페이지.
- 어떠한 사용자가 접속하던 간에 동일한 페이지를 보여준다. (대부분 웹 사이트의 홈 화면에 접속하면 서로가 같은 페이지를 본다.)
- ex) html, css, js, image 파일과 같이 컴퓨터에 저장되어 있는 파일들
동적 페이지(Dynamic Pages)
- 서버가 데이터베이스에서 정보를 가져와서 처리하는 것처럼, 어떠한 요청에 의하여 서버가 일을 수행하고 해당 결과가 포함된 파일을 보여주는 페이지.
- 사용자마다 다른 페이지가 보여질 수 있다. (예를 들어 사용자 프로필 페이지는 유저마다 다른 결과 화면이 보여진다.)
Web Server
- 웹 서버(Web Server)는 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠를 제공하는 서버를 말한다.
- 다른 역할로는 동적인 컨텐츠가 필요한 요청이 클라이언트로부터 들어왔을 때, 해당 요청을 WAS에 보내고, WAS가 처리한 결과를 클라이언트에 응답한다.
- ex) Apache, Nginx 등
Web Application Server
- 웹 애플리케이션 서버(Web Application Server)는 DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Appication Server 이다.
- Web Server + Web Container
- (웹 컨테이너는 동적인 데이터들을 처리하여 정적인 페이지로 생성해주는 소프트웨어 모듈)
- 프로그램 실행 환경과 DB 접속 기능을 제공, 비지니스 로직을 수행
- ex) Tomcat 등
node.js 환경을 예로 들면,
- 클라이언트가 /myinfo 경로로 요청한다.
- WAS에서 DB에 접근하여 필요한 데이터를 가져온다.
- 원하는 데이터를 가공하여 myinfo.ejs 파일로 해당 데이터를 보내준다.
- ejs 파일을 html 로 바꿔준 다음에 웹 서버로 전송한다.
- 웹 서버는 절달받은 html 요소를 클라이언트에 보내준다.
WS 와 WAS 를 구분하는 이유
Web Server 가 필요한 이유
예를 들어, 이미지 파일과 같은 정적 파일들은 HTML 문서가 플라이언트로 보내질 때 함께 가지 않는다.
클라이언트는 HTML 문서를 먼저 받고, 그에 맞게 필요한 이미지 파일들을 다시 버서로 요청하고 나서야 이미지 파일을 받아온다.
웹 서버를 통해 정적 파일들을 애플리케이션 서버까지 가지 않고 앞단에서 빠르게 보내줄 수 있다.
따라서 웹 서버에서는 정적 컨텐츠만 처리하도록 기능을 분배하여 서버의 부담을 줄일 수 있다.
Web Application Server 가 필요한 이유
웹 페이지는 정적 컨텐츠와 동적 컨텐츠가 모두 존재하는데, 웹 서버만을 사용한다면 유저가 원하는 요청에 대한 결과값을 모두 미리 만들어 놓고 서비스를 해야 한다. 이는 비효율적이다.
따라서 WAS를 통해 요청에 맞는 데이터를 DB에서 가져와 비지니스 로직에 맞게 그때 그때 결과를 만들어 제공함으로써 자원을 효율적으로 사용할 수 있다.
웹 서버와 웹 애플리케이션을 조합하여 사용한다면
- 기능을 분리하여 서버의 부하를 줄일 수 있다.
- WAS는 DB 조회나 다양한 로직을 처리하느라 바쁘기 때문에 단순한 정적 컨텐츠는 웹 서버에서 빠르게 클라이언트에 제공하는 것이 좋다.
- 물리적으로 분리하여 보안 강화
- SSL 에 대한 암복호화 처리를 웹 서버에서 수행
- 여러 대의 WAS를 연결 가능
- 여러 웹 애플리케이션 서비스 가능
- 예를 들어, 하나의 서버에 PHP 애플리케이션, Java 애플리케이션을 함께 사용하는 경우
- 접근 허용 IP 관리, 2대 이상의 서버에서의 세션 관리 등도 웹 서버에서 처리하면 효율적이다.
Reference
https://melonicedlatte.com/web/2019/06/23/210300.html
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html