Web Server

  • 클라이언트로부터 HTTP 프로토콜 요청을 받아 HTML 문서와 같은 정적 웹 페이지를 응답해주는 소프트웨어
  • 정적이란, HTML, CSS, Java Script, 이미지, 파일 등 즉시 응답이 가능한 컨텐츠들을 말한다.
  • 대표적으로 Apache, Ngingx가 있다. 

 

 

 

WAS

  • Web Application Server의 준말이며, Web Server + Web Container를 말한다.
  • WAS를 그냥 Web Container, Servlet Container라고도 한다.
  • 여기서 Web Container란 JSP, Servlet을 실행시킬 수 있는 소프트웨어를 말한다.

 

  • WAS는 Web Server 단독으로는 처리할 수 없는 DB 조회나 다양한 로직 처리가 필요한 동적 컨텐츠를 제공한다.
  • 브라우저에게 파일들을 전송하기 전에 애플리케이션 서버가 업데이트하기 때문에 동적이라고 하며, Web Server 기능들을 구조적으로 분리해 처리하고자 하는 목적으로 제시되었다.
  • 분산 트랜잭션, 보안, 메시징, 쓰레드 처리 등의 기능을 처리하는 분산 환경에서 사용되며, HTTP를 통해 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어(소프트웨어 엔진)이다.
  • 대표적으로 Tomcat, JBoss가 있다.

 
* 미들웨어
서로 다른 애플리케이션이 통신할 수 있도록 중간에서 매개 역할을 하는 소프트웨어를 말하며, 통상적으로 기업에서 말하는 미들웨어 환경은 웹/애플리케이션 서버를 말한다. 

 

 

 

Web Server & Web WAS

Web Server는 요청에 따라 역할이 2가지로 나뉘는데,
(1) 정적 콘텐츠 제공
(2) 동적 콘텐츠 요청이 들어올 경우, WAS에게 요청을 전달하고 WAS의 응답을 클라이언트에게 전달

 

 

 

 


Web Server가 (2)번의 기능을 해줌으로써 WAS는 동적인 콘텐츠만 생각할 수 있게 된다. 만약 WAS가 정적 콘텐츠까지 제공해준다면, 서버 부하가 커지면서 동적 콘텐츠의 처리가 지연된다. 그럼 수행 속도가 느려지고 페이지 노출 시간이 늘어나면서 효율성이 크게 떨어지게 된다. 따라서 Web Server와 WAS 둘 다 사용함으로써 서버 부하를 방지해야 한다.
 
클라이언트에 이미지 파일들(=정적 컨텐츠)을 보내는 과정을 생각해보자. 이미지 파일과 같은 정적인 파일들은 웹 문서(HTML 문서)가 클라이언트로 보내질 때 함께 가는 것이 아니다. 클라이언트는 HTML 문서를 먼저 받고, 그에 맞게 필요한 이미지 파일들을 서버로 다시 요청했을 때 이미지 파일을 받아온다. Web Server를 함께 사용하면, 정적인 파일들을 애플리케이션 서버까지 가지 않고, 앞단에서 빠르게 보내줄 수 있다. 따라서, 단순한 정적 콘텐츠는 Web Server에게 맡기고, WAS는 DB 조회 및 다양한 로직을 처리하는데 집중함으로써 서버의 부담을 줄일 수 있다 ! WAS 앞에 Web Server를 두고, 필요한 WAS들을 Web Server에 플러그인 형태로 설정하면 더욱 효율적인 분산 처리가 가능하다. 

 

 

 

Only WAS

 
서버 부하 방지 말고도, Web Server와 WAS 둘 다 사용해야 하는 또 다른 이유가 있다.
 
바로, 장애 극복에 쉽게 대응할 수 있다는 점이다. 여러 개의 서버를 사용하는 대용량 웹 애플리케이션의 경우, Web Server와 WAS를 분리해 무중단 운영을 위한 장애 극복에 쉽게 대응할 수 있다. 예를 들어, 앞 단의 Web Server에서 오류가 발생한 WAS를 이용하지 못하도록 한 후, WAS를 재시작 함으로써 사용자가 오류를 느끼지 못하게 한다. 정적 리소스만을 제공해주는 Web Server는 서버가 잘 죽지 않지만, 애플리케이션 로직을 수행하는 WAS는 서버가 잘 죽기 때문에 WAS에 장애가 발생했을 때, Web Server가 오류화면 html을 제공해주면 된다. (WAS는 오류화면 노출이 불가능하다) 

 

 

 

Web Server & WAS

 
Web Server와 WAS 둘 다 필요한 이유는 그 밖에도
(1) SSL에 대한 암호화, 복호화 처리에 Web Server를 사용함으로써 보안을 강화하거나
(2) 하나의 서버에서 PHP Application과 Java Application을 함께 사용해 여러 웹 애플리케이션 서비스 기능을 가능하게 하거나
(3) 접근 허용 IP나 2대 이상의 서버에서의 세션 등을 Web Server에서 처리해 효율적인 관리를 가능하게 한다. 
 

 

 

아무튼

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


Web Server와 WAS를 분리한 Web Service Architecture는 다음과 같다.

 

 

 

Web Service Architecture

Web Service Architecture

1. Web Server는 웹 브라우저 클라이언트(사용자)로부터 HTTP 요청을 받는다.
2. Web Server는 클라이언트의 요청을 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. protected doGet(HttpServletRequest request, HttpServletResponse response)
7. doGet() 또는 doPost() 메서드는 인자에 맞게 생성된 적절한 동적 페이지를 Response 객체에 담아 WAS에 전달한다.
8. WAS는 Response 객체를 HttpResponse 형태로 바꿔 Web Server에 전달한다.
9. 생성된 Thread를 종료하고, HttpServletRequest와 HttpServletResponse 객체를 제거한다. 

 

 

 

(왼) Web Server / (우) WAS

 

근데 Apache는 뭐고, Apache Tomcat은 뭐지?

Apache & Apache Tomcat

Apache는 아파치 소프트웨어 재단에서 만든 Web Server를 일컫는다.
기능적으로 Apache와 Tomcat의 기능은 나뉘어져 있지만, Tomcat이 Apache의 일부 기능을 제공해주기 때문에 합쳐서 Apache Tomcat이라고 부른다.

 

 

 

Apache & Nginx

 

웹 서버 Apache보다 Nginx를 사용하는 이유

Java로 프로그래밍을 처음 시작할때는 웹서버는 Apache, WAS는 Tomcat으로 웹 사이트를 구현했었다.전 직장에서도 웹 서버-Apache, WAS-Tomcat을 사용하고 있었지만, Python으로 프로젝트를 배포하며 알게된

velog.io

 

Nginx 설치 및 nginx.conf, default.conf 이해하기

1. Nginx란? 가볍고 높은 성능을 가진 웹 서버 (Web Server) 이다. HTTP Server로 활용되며 정적 파일들을 처리하기 위해 사용된다. Reverse Proxy Server로 활용된다. 80번 포트로 들어오는 내용을 3000, 4000, 9000

phsun102.tistory.com

 

 

#

면접 질문

  • 스프링부트의 내장 서버로는 무엇이 있는지? 톰캣
  • 그 밖에는? ㅁㄹ

=> 합격. 물론 다른 대답들을 잘 하긴 했음

 

 

 

REFERENCE

웹서버란 무엇인가

웹 서버와 WAS의 차이를 쉽게 알아보자

Web서버와 WAS의 차이와 웹 서비스 구조

WAS와 웹 서버 차이 그리고 아파치, 톰캣

Web과 WAS란? 웹 서비스의 구조에 대해 알아보자

Spring을 이용한 웹 서비스 구조

Web Server와 WAS

미들웨어, 개념을 알아보자

Apache? Tomcat?? 둘이 무슨 차이지?

 

 

 

 

'Computer Science' 카테고리의 다른 글

[CS Web] OAuth 2.0  (0) 2024.04.23
[CS Web] Cookie & Session  (0) 2024.04.11
[CS Web] HTTP Status Code  (0) 2024.04.11
[CS Web] HTTP Request Method  (0) 2024.04.11
[CS Web] REST  (0) 2024.04.11