[Web] Web의 기본 구성요소(2) - Web Server, WAS, 정적페이지, 동적페이지
이전 포스팅에서 Web Client에 대해 정리했었다. 웹에서 Client가 요청을 보내는 대상은 Server이다. 즉, Web Client는 Web Server에 요청을 보낸다. 그런데 Web Server만 있으면 될 것 같은데, 왜 Web Application Server(WAS)까지 필요할까? 이번 포스팅에서 그 이유를 살펴보자!
1. 정적 페이지와 동적 페이지
웹클라이언트가 요청하는 페이지에는 크게 두가지 종류가 있다.
바로 정적 페이지와 동적 페이지이다.
간단하게 말하면, 정적 페이지는 안바뀌는 거고 동적 페이지는 바뀌는거다.
그리고 클라이언트가 정적 페이지를 요청하면 웹서버가 처리하고, 동적 페이지를 요청하면 WAS가 처리하는 것이다.
따라서 Web Server 와 WAS를 이해하기 위해서는 먼저 정적 페이지와 동적 페이지에 대한 이해가 필요하다.
1.1 정적 페이지 (Static Pages)
- image, html, css, javascript 파일과 같이 컴퓨터에 저장되어있는 파일들
- 웹서버에서 요청에 알맞은 파일을 반환하며, 항상 동일한 페이지를 반환한다.
- 웹서버에서 제공한다.
→ 누가, 언제 요구하더라도 항상 같은 내용을 표시하는 웹페이지, 동일한 리소스의 요청에 대해서 항상 동일한 내용의 페이지 반환한다.
예를 들어, 기업 홈페이지에서 보여주는 기업 인재상 페이지를 떠올려보자. 누가 해당 페이지에 접속하던, 항상 동일한 페이지를 보여준다.
1.2 동적 페이지 (Dynamic Pages)
- 들어온 요청에 맞게 동적으로 만들어진 컨텐츠를 의미
- 데이터베이스, 서버 내 로직 등을 활용해 만들어진 컨텐츠를 반환한다.
→ 누가, 언제 어떻게 요구하였는지에 따라 각각 다른 내용이 반환되는 웹페이지, 페이지 요청 시점에 HTML 문장을 만들어낸다.
예를 들어, 네이버에 로그인되어 보이는 화면은 전체적인 틀은 비슷하지만 로그인한 계정에 따라 다른 화면을 보여준다.
HANI 계정으로 로그인했다면 데이터베이스에서 HANI 계정에 대한 정보를 가져와 홈페이지 틀에 HANI 계정에 대한 정보를 끼워넣어 보여줄 것이다.
이렇게 '데이터베이스에서 정보 가져오기'와 같은 추가 작업을 수행한 후 페이지를 보여주는 것을 WAS가 담당하게 되는 것이다.
그렇다면, 정적 페이지의 요청을 수행하는 Server는 Web Server가 될 것이고,
동적 페이지의 요청을 수행하는 Server는 Web Application Server가 될 것이다.
2. Web Server와 Web Application Server
다음은 웹 클라이언트, 웹서버, 웹 애플리케이션 서버의 전체적인 구조에 대한 그림이다.
이 그림을 보고 의문이 드는 사람이 있을 것이다.
위의 정적 페이지, 동적 페이지를 설명하면서는 정적페이지는 웹서버가 담당하고 동적페이지는 웹 애플리케이션 서버가 담당한다며!
왜 따로 따로가 아니고 한줄로 있는거임??
웹서버 개념과 웹애플리케이션 서버 개념을 보고 나면 이해가 될 것이다.
2.1 웹 서버 (Web Server)
웹서버의 역할
- 웹 클라이언트의 요청을 받아 정적 컨텐츠를 제공한다.
- 정적 페이지(HTML, CSS, JavaScript, 이미지 등)는 미리 생성되어 웹 서버에 저장되어 있으며, 웹 클라이언트가 요청하면 해당하는 정적페이지를 보여주어 응답한다.
- 주로 정적 페이지인 HTML, 이미지, CSS, js 파일 처리
- WAS로부터 전달받은 결과(HTML, JSON 등)를 웹 클라이언트에게 전달한다.
- 즉,
- 정적 페이지 요청 -> 웹서버가 찾아서 Client에게 보여줌
- 동적 페이지 요청 -> 웹서버가 WAS에게 처리하라고 위임 -> WAS가 처리하여 정적 컨텐츠 형태로 웹서버에게 전달 -> 웹서버가 Client에게 보여줌
웹서버 예시
- Apache httpd
- Nginx
- lighthttpd
- IIS
⇒ 따라서 웹서버는 사용자에게 보여질 화면을 담당한다.
2.2 웹 애플리케이션 서버 (Web Application Server)
웹 애플리케이션 서버의 역할
- 웹서버로부터 동적 페이지 요청을 받아 처리 및 결과를 웹서버로 반환
- 주로 데이터 처리나 비즈니스 로직을 실행한다.(e.g. 로그인 기능, 회원가입 로직)
- 동적 페이지 생성을 위해 서버 사이드 로직을 실행하고, 데이터베이스와 연동하여 데이터를 처리한다
- 웹서버와 DB의 중간역할을 담당한다.
- WAS가 동적으로 생성한 컨텐츠는 이미 HTML 형태로 만들어져 웹서버로 전달되며, 웹서버는 이를 별도 변환 없이 클라이언트에게 전달
웹 애플리케이션 서버 예시
- Apache Tomcat
- JBoss
- WebLogic
- Jeus
- Gunicorn 등
⇒ 따라서 웹 애플리케이션 서버는 비즈니스 로직을 실행시켜 동적 페이지를 처리하는 역할을 수행한다.
그러면 다시 이 그림을 봐보자.
웹 클라이언트가 웹서버에게 요청하는 페이지의 종류는 크게 두가지 이다.
정적 페이지를 요청하면,
웹서버에 저장되어있던 정적 페이지를 바로 웹클라이언트에게 보여준다.
동적 페이지를 요청하면,
비즈니스 로직 처리가 필요하므로 웹서버는 웹 애플리케이션 서버에게 처리를 위임한다.
웹 애플리케이션 서버는 여러 애플리케이션을 통해 비즈니스 로직을 수행하고, 처리 결과를 정적 컨텐츠 형태로 웹서버에게 전달한다.
웹서버는 전달받은 정적 컨텐츠를 웹 클라이언트에게 보여준다.