티스토리 뷰

웹 서버 (Web Server)


웹 서버란?

  • 클라이언트가 서버에 페이지 요청을 하면 요청을 받아 정적 컨텐츠(.html, .png, .css 등)를 제공하는 서버
  • 클라이언트에서 요청이 올 때 가장 앞에서 요청에 대한 처리를 한다.
  • 클라이언트의 요청을 기다리고 요청에 대한 데이터를 만들어서 응답하는 역할을 수행 (정적 데이터)
  • 주로 캐시 기능이나 프록시 기능 등 웹 클라이언트와 직접 연관된 일들을 처리

 

웹 서버의 기능

  • HTTP 프로토콜을 기반으로 하여 클라이언트(웹 브라우저 or 웹 크롤러)의 요청을 서비스 하는 기능을 담당한다.
  • 클라이언트(ex 웹 브라우저)의 요청이 정적인 컨텐츠(.html, .jpg, .gif, .css 등)의 제공 요청이라면, WAS를 거치지 않고 바로 자원을 제공할 수 있다.
  • 또는 클라이언트의 요청이 동적인 컨텐츠 제공을 위한 요청이라면, 클라이언트의 요청(Request)을 WAS에 보내고, WAS가 처리한 결과를 클라이언트에게 전달(응답, Response)한다.

 

대표 웹 서버

  • Apache
  • Nginx

 

 

웹 어플리케이션 서버 (Web Application Server, WAS)


WAS란?

  • DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Application Server
  • WAS = Web Server + Web Container
  • 컨테이너, 웹 컨테이너, 서블릿 컨테이너라고도 부름 (컨테이너는 Servlet, JSP 등을 실행시킬 수 있는 소프트웨어, WAS 위에서 돌아가는 프로그램을 가리켜 Servlet이라고 함)
  • 즉, WAS는 JSP, Servlet 구동 환경을 제공한다.
  • WEB 서버가 처리할 수 있는 형태로 가공하여 응답해줄수 있는 웹 어플리케이션

 

WAS의 기능

  • 프로그램 실행 환경과 DB 접속 기능 제공
  • 여러 개의 트랜잭션 (논리적인 작업 단위) 관리 기능
  • 업무를 처리하는 비즈니스 로직 수행

 

대표 WAS

  • Apache Tomcat
  • JBoss
  • JEUS

 

WAS의 구조

WAS의 구조

 

 

웹 서버와 WAS를 분리하는 이유


  1.  기능을 분리하여 서버 부하 방지

  •  Web Server는 단순한 정적 컨텐츠를 빠르게 클라이언트에 제공하는 기능
  •  WAS는 DB 조회나 다양한 로직의 처리가 필요한 동적 컨텐츠를 처리하는 기능

  2.  물리적으로 분리하여 보안강화

  •  SSL에 대한 암복호화 처리에 Web Server를 사용
  •  웹 서버와 WAS에 접근하는 포트가 다르기 때문에, WAS에 들어오는 포트에는 방화벽을 쳐서 보안을 강화할 수도   있음

  3.  여러 대의 WAS를 연결 가능 (로드밸런싱에 유리, 하나의 proxy server(ex Nginx)에서 여러 WAS로 적절히 부하          를나누어 연결하는 기술을 로드밸런싱이라고 함)

  •  대용량 웹 어플리케이션의 경우(여러 개의 서버 사용) Web Server와 WAS를 분리하여 무중단 운영을 위한 장애 극복에 쉽게 대응할 수 있다.
  • 예를 들어, 앞 단의 Web Server에서 오류가 발생한 WAS를 이용하지 못하도록 한 후 오류를 해결하면 WAS를 재시작함으로써 사용자는 오류를 느끼지 못하고 이용할 수 있다

  4.  여러 웹 어플리케이션을 서비스 가능

  •   (하나의 웹 서버(ex Nginx)에서 php애플리케이션과 java애플리케이션을 함께 사용가능)

 

- 즉, 자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성을 위해 Web Server와 WAS를 분리한다.

- WAS(ex Tomcat), Web Server를 따로 분리하는 이유가 성능때문이라고 하는 건 잘못된 이유이다.
  톰캣5.5 이상부터는 httpd의 native모듈을 사용해서 정적파일을 처리하는 기능을 제공하는데
  이것이 순수 아파치 Httpd만 사용하는 것과 비교해서 성능이 전혀 떨어지지 않기 때문이다.

 

 

웹 서버와 웹 어플리케이션 서버를 분리한 구조


구조

 

 

동작 프로세스

  1. Web Server는 웹 브라우저 클라이언트로부터 HTTP 요청을 받는다.
  2. Web Server는 클라이언트의 요청(Request)을 WAS에 보낸다.
  3. WAS는 관련된 Servlet을 메모리에 올린다.
  4. WAS는 web.xml을 참조하여 해당 Servlet에 대한 Thread를 생성한다. (Thread Pool 이용)
  5. HttpServletRequest와 HttpServletResponse 객체를 생성하여 Servlet에 전달한다.
    5-1. Thread는 Servlet의 service() 메서드를 호출한다.
    5-2. service() 메서드는 요청에 맞게 doGet() 또는 doPost() 메서드를 호출한다.
  6. doGet() 또는 doPost() 메서드는 인자에 맞게 생성된 적절한 동적 페이지를 Response 객체에 담아 WAS에 전달한다.
  7. WAS는 Response 객체를 HttpResponse 형태로 바꾸어 Web Server에 전달한다.
  8. 생성된 Thread를 종료하고, HttpServletRequest와 HttpServletResponse 객체를 제거한다.

 

 

참고자료


https://www.edwith.org/boostcourse-web/lecture/16666/

https://jeong-pro.tistory.com/84?category=793347

https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html

'면접대비' 카테고리의 다른 글

싱클톤 패턴에 대해  (0) 2019.09.09
REST API에 대해  (0) 2019.09.06
객체 지향 프로그래밍 (OOP)에 대해  (0) 2019.09.04
쿠키와 세션에 대해  (0) 2019.09.03
HTTP에 대해  (0) 2019.08.27