2020-2-15 웹서버와 WAS

Web Server, WAS

static pages : 바뀌지 않는 페이지. 웹서버는 파일 경로 이름을 받고 경로와 일치하는 file contents를 반환함. 항상 동일한 페이지를 반환한다.
Dynamic pages : 인자에 따라 동적인 contents를 반환. 웹서버에 의해 실행되는 프로그램을 통해 만들어진 결과물(Servlet : WAS위에 돌아가는 자바프로그램)

웹서버의 기능

Http프로토콜을 기반으로 클라이언트 요청을 서비스하는 기능을 담당.

  • 정적 컨텐츠 제공 : WAS를 거치지 않고 바로 자원제공
  • 동적 컨텐츠 제공을 위한 요청 전달 : 클라리언트 요청을 WAS로 보내고, WAS에서 처리한 결과를 클라이언트에게 전달
  • 종류 : Apache, Nginx, IIS 등

WAS

Web Application Server로 DB조회 및 다양한 로직 처리, 동적인 컨텐츠 제공을 위해 만들어진 서버

  • HTTP를 통해 애플리케이션을 수행하는 미들웨어다. 웹컨테이너 혹은 서블릿 컨테이너라고 불림
  • 컨테이너란 JSP, Servlet을 실행시킬 수 있는 소프트웨어, WAS는 JSP, Servlet구동 환경을 제공
  • 종류 : Tomcat, JBOSS 등
역할
  • WAS = 웹서버 + 웹컨테이너.
  • 웹서버의 기능들을 구조적으로 분리하여 처리.=> 보안, 스레드 처리, 분산트랜잭션 등
WAS 주요기능
  1. 프로그램 실행환경 및 DB접속 기능제공
  2. 여러 트랜잭션 관리 및 비즈니스 로직 수행

둘을 구분하는 이유

웹서버가 필요한 이유 : 웹서버에서 정적 컨텐츠만 처리하도록 기능 분배를 해서 WAS의 부담을 줄여준다.
클라리언트가 이미지파일(정적컨텐츠)를 보낼때, 웹문서(html 문서)가 클라이언트로 보내질 때, 이미지와 같은 정적파일은 함께 보내지지 않는다. 먼저 html문서를 받고, 그 뒤에 필요한 이미지를 다시 서버로 요청해서 받는다. 따라서 웹서버를 통해 정적 파일을 WAS로 가지 않고 앞에서 빠르게 받을 수 있다.
WAS가 필요한 이유 : 요청에 맞는 데이터를 DB에서 가져오고 가공을 통해 결과를 제공하면 효율적으로 사용
동적인 컨텐츠만을 제공해야 할때, 웹서버만 가지고는 안된다. WAS를 통해 요청이 들어오면 DB와 비즈니스 로직을 통해 결과물을 만들어서 제공
WAS로 웹서버의 역할을 다 처리할 수 있나?
WAS는 DB조회, 다양한 로직 처리에 집중해야한다. 단순한 정적컨텐츠는 웹서버에 맡겨서 부하를 줄여야된다.
WAS가 정적 컨텐츠 요청까지 처리하면, 부하가 커지고 동적컨텐츠 처리가 지연된다. 이때 페이지 노출시간이 늘어난다
  • WAS는 여러대 연결이 가능. 웹서버를 앞에 두고 오류가 나면 재시작하여 해결할 수 있다.

가장 효율적인 방법

웹서버를 WAS앞에 두고 필요한 WAS들을 웹서버에 플러그인 형태로 설정해서 분산처리.

  • 요청을 먼저 웹서버가 받고, WAS에게 보내 관련된 Servlet을 메모리에 올림.
  • WAS는 web.xml을 참조해 해당 Servlet에 대한 스레드생성, 이때 HttpServletRequest와 HttpServletResponse 객체를 생성해 Servlet에 전달.
  • 스레드는 Servlet의 service()호출, service()는 요청에 맞게 doGet(), doPost()를 호출
  • doGet(), doPost()는 생성된 동적페이지를 Reponse객체에 담아서 WAS에 전달. WAS는 Response객체를 HttpReponse형태로 바꿔서 웹서버에 전달.
  • 스레드 종료하고, HttpServletRequest, HttpServletResponse객체제거

Reference

Written on February 15, 2020