웹 페이지는 정적 페이지와 동적 페이지로 구분된다.
정적 페이지란?
저장된 그래로 사용자에게 전달하는 웹페이지로 내용이 변경되지 않는다.
즉, 사용자가 달라지고, 어떠한 요청이든 항상 동일한 컨텐츠, 화면을 보여주는 페이지이다.(대표적으로 HTML,이미지등등)동적 페이지란?
데이터를 가공(계산)해 각 사용자들에게 맞춤형으로 화면을 보여주는 웹페이지이다.
클라이언트로부터 HTTP요청을 받고, 정적웹페이지(컨텐츠)를 제공하는 컴퓨터 프로그램을 의미한다.
웹서버의 기능
- 정적웹페이지(컨텐츠)를 제공
- 동적웹페이지(컨텐츠) 제공을 위해 클라이언트에게 받은 요청을 WAS에게 전달함
웹서버의 종류에는 nginx,아파치 등등이 존재한다.
DB조회 및 요청에 대한 다양한 로직 처리, 계산을 해 동적인 웹페이지(컨텐츠)를 제공하기 위해 만들어진 프로그램을 의미한다.
WAS의 기능
- 프로그램 실행 환경 및 DB접속 기능 제공
- 여러 트랜잭션 관리
- 업무 처리하는 비즈니스 로직 수행
WAS의 구조
WAS의 구조는 웹서버와 웹컨테이너(서블릿컨테이너)를 합한 것이다.
그래서 WAS 하나만으로도 서비스 운영이 가능은 하다.웹컨테이너란?
JSP,서블릿을 실행시킬 수 있는 소프트웨어를 의미하며, WAS는 JSP,서블릿을 구동할 수 있는 환경을 제공해준다.
WAS의 종류에는 톰켓,JBOSS등등이 존재한다.
웹 어플리케이션의 구조는 다양하다.
웹서버 하나만으로 정적인 컨텐츠만을 주는 구조가 있을 수 있고, WAS만 있을 수도 있으며, 둘을 같이 사용할 수도 있다. 아래와 같다.
클라이언트 -> 웹서버 -> DB
클라이언트 -> 웹서버
클라이언트 -> WAS -> DB
클라이언트 -> 웹서버 -> WAS -> DB
등등 다양한 구조를 갖는다.클라이언트 -> 웹서버 -> WAS -> DB 구조의 동작 과정
- Web Server는 웹 브라우저 클라이언트(사용자)로부터 HTTP 요청을 받는다.
- Web Server는 클라이언트의 요청(Request)을 WAS에 보낸다.
- WAS는 관련된 Servlet을 메모리에 올린다.
- WAS는 web.xml을 참조하여 해당 Servlet에 대한 Thread를 생성한다. (Thread Pool 이용)
- HttpServletRequest와 HttpServletResponse 객체를 생성하여 Servlet에 전달한다.
5-1. Thread는 Servlet의 service() 메서드를 호출한다.
5-2. service() 메서드는 요청에 맞게 doGet() 또는 doPost() 메서드를 호출한다.- protected doGet(HttpServletRequest request, HttpServletResponse response)
- doGet() 또는 doPost() 메서드는 인자에 맞게 생성된 적절한 동적 페이지를 Response 객체에 담아 WAS에 전달한다.
- WAS는 Response 객체를 HttpResponse 형태로 바꾸어 Web Server에 전달한다.
- 생성된 Thread를 종료하고, HttpServletRequest와 HttpServletResponse 객체를 제거한다.
그런데, WAS가 있음에도 웹서버가 필요한 이유는 무엇?
서버부담을 줄이기 위함이다.
WAS의 기능 중 동적웹페이지를 제공하는 것이있다. 또한 웹서버처럼 동적웹페이지를 제공할 수도 있다.
이러한 기능을 나누어서 서버 부담을 줄여주는 것이다.
웹서버의 경우 로드밸런싱 기능을 가지고 있는데, 이를 이용하면 서버 앞단에 웹서버를 두고 여러대의 WAS를 두어 웹서버에서 클라이언트에게 받은 요청을 WAS에게 전달하여 서버의 부담을 줄일 수 있게 된다.