728x90
Web Server?
- 웹 서버란 HTTP 프로토콜을 기반으로 클라이언트가 웹 브라우저에서 어떤 요청을 하면 그 요청을 받아 정적 컨텐츠를 제공하는 서버입니다. (정적 컨텐츠는 이미지, 파일, HTML 문서, CSS 등 즉시 응답 가능한 컨텐츠를 말합니다.)
- 또는, 웹 서버가 동적 컨텐츠를 요청 받으면 WAS에게 해당 요청을 넘겨주고, WAS에서 처리한 결과를 클라이언트에게 전달해주는 역할도 합니다.
- 웹 서버에서는 정적 컨텐츠만 처리하는 기능 분배를 해서 서버 부담을 줄일 수 있습니다.
- 웹 서버에는 Apache, NginX 등이 있습니다.
WAS(Web Application Server)?
- WAS란 사용자의 요청에 맞는 데이터를 DB에서 가져와 비즈니스 로직에 맞게 다양한 로직 처리를 요구하는 동적 컨텐츠를 제공하기 위해 만들어진 Application 서버입니다.
- 동적 컨텐츠를 제공 할 때, 사용자가 원하는 요청에 대한 결과값을 모두 미리 만들어 놓고 서비스를 하기에는 자원이 부족하기 때문에, 요청이 들어올 때마다 DB와 비즈니스 로직을 통해 결과물을 만들어 제공합니다.
- HTTP 프로토콜을 기반으로 사용자 컴퓨터나 장치에 Application을 수행해주는 미들웨어로서, 주로 데이터베이스 서버와 같이 수행됩니다.
- WAS는 JSP, Servlet 구동환경을 제공해주기 때문에 서블릿 컨테이너 혹은 웹 컨테이너로 불립니다.
- WAS는 웹 서버의 기능들을 구조적으로 분리하여 처리하고자 하는 목적으로 제시되었습니다. 분산 트랜잭션, 보안 ,메세징, 쓰레드 처리 등의 기능을 처리하는 분산 환경에서 사용됩니다.
- WAS에는 Tomcat, JBoss, WebSphere 등이 있습니다.
[클라이언트(사용자) -> Web Server -> WAS -> DB] 구조의 동작 과정
- Web Server는 웹 브라우저 Clinet로부터 HTTP Request를 받는다.
- Web Server는 Request를 WAS에 보낸다.
- WAS는 관련된 Servlet을 메모리에 올린다.
- WAS는 web.xml을 참조하여 해당 Servlet에 대한 Thread를 생성한다.(Thread Pool 이용)
- HttpServletRequeset와 HttpServletResponse 객체를 생성하여 Servlet에 전달한다.
- Thead는 Servlet의 service() 메서드를 호출한다.
- service() 메서드는 요청에 맞게 doGet() 또는 doPost() 메서드를 호출한다.
예시 - protected doGet(HttpServletRequeset req, HttpServletResponse res)
- doGet() 또는 doPost() 메서드는 인자에 맞게 생성된 적절한 동작 페이지를 Response 객체에 담아 WAS에 전달한다.
- WAS는 Response 객체를 HttpResponse 형태로 바꾸어 Web Server에 전달한다.
- 생성된 Thread를 종료하고, HttpServletRequest와 HttpServletResponse 객체를 제거한다.
Web Server와 WAS의 구성에 따른 분류
1. Web Server와 WAS를 분리하지 않는 경우
- 모든 컨텐츠를 한 곳에 집중시켜 Web Server와 WAS의 역할을 동시에 수행
- 스위치를 이용한 로드 밸런싱, 사용자가 적을 경우 효율적
2. Web Server와 WAS를 분리한 경우
- 웹 서버와 WAS의 기능적 분류를 통해 효과적인 분산 유도
- 정적인 데이터는 웹서버에서 처리, 동적인 데이터는 WAS가 처리
3. Web Server와 여러개의 WAS를 분리한 경우
- 각각의 WAS가 상호 의존적이지 않게 서비스를 하기 위함.
- Tomcat 하나가 죽었을 경우 그 Tomcat에 설정된 서비스가 다 죽기 때문에, 분리해서 사용.
Web Server와 WAS를 분리하는 이유
- 물리적으로 분리하여 보안강화
WAS에는 실제 Web Application이 올라가 있어서, 중요한 Resource나 설정 파일이 외부로 노출될 수 있기 때문에 Web Server을 WAS 앞단에 위치시켜 보호합니다.
위 그림과 같이 클라이언트가 바로 Tomcat에 붙으면 뒷 단에 있는 DB에 대한 정보를 클라이언트 및 해커들이 알 수 있는건 시간 문제입니다. 클라이언트가 Tomcat에 붙으려면 DMZ라는 외부 통신이 되는 구간에 서버를 위치해야하기 때문입니다. Web Server을 두게 되면 클라이언트는 DMZ(Demilitarized Zone) 대역에 구성된 Web Server에만 접속을 할 수 있게 됩니다. 나머지 WAS, DB는 내부망에 위치하면 됩니다. WAS의 경우는 JK 연동(Apache와 Tomcat 사이의 징검다리 역할, mok_jk)이 되어 있기 때문에 WEB의 주소와 특정 포트로만 통신을 하게 하고 나머지는 다 막아버리면 됩니다. 이런 구조를 가져가면 최소한 Tomcat만 구성한 서버보다는 훨씬 안전한 구성이 됩니다.더보기DMZ 란?
외부 네트워크와 내부 네트워크 사이에서 외부 네트워크 서비스를 제공하면서 내부 네트워크를 보호하는 서브넷, 즉 외부에 오픈된 서버영역을 말한다. - 기능을 분리하여 서버의 부하방지
WAS는 DB조회나 다양한 로직을 처리하고, 단순한 정적 컨텐츠는 Web Server에서 처리해줘야 합니다. - 여러 대의 WAS를 연결 가능
로드밸런싱을 위해 웹 서버를 사용 할 수 있습니다. Web Server와 WAS를 분리하여 운영 중단 없이 장애 극복에 쉽게 대응 할 수 있습니다.
더보기로드 밸런싱이란?
Application을 지원하는 리소스 풀 전체에 네트워크 트래픽을 균등하게 배포하는 방법입니다. 최신 Application은 수백만 명의 사용자를 동시에 처리하고 정확한 텍스트, 비디오, 이미지 및 기타 데이터를 빠르고 안정적인 방식으로 각 사용자에게 반환해야 합니다. 이렇게 많은 양의 트래픽을 처리하기 위해 대부분의 Application에는 데이터가 중복되는 리소스 서버가 많이 있습니다. 로드 밸런서는 사용자와 서버 구룹 사이에 위치하며 보이지 않는 촉진자 역할을 하여 모든 리소스 서버가 동일하게 사용되도록 하는 디바이스입니다. - 여러 웹어플리케이션을 서비스 가능
하나의 서버에서 java 서버, c# 서버, php 서버 등 함께 사용할 수 있습니다.
질문&답변
1. 가장 효율적이게 웹서버와 WAS를 이용하는 방법은 무엇입니까?
- 정적인 처리는 웹서버가, 동적인 처리는 WAS가 할 수 있도록, 웹서버를 WAS 앞에 두고, 필요한 WAS들을 웹 서버에 플러그인 형태로 설정하면 효율적인 분산 처리가 가능합니다.
2. Tomcat이 아닌 Apache Tomcat으로 부르나요?
- 웹 서버는 Apache가 있고, WAS서버는 Tomcat이 있는데, 이름을 붙여서 Apache Tomcat으로 사용하게된 이유는 Tomcat 5.5 버전부터 정적 컨텐츠를 처리하는 기능이 추가되어서 부르게 되었습니다. (즉, Tomcat이 Apache의 기능을 포함하기 때문에)
Reference
https://helloworld-88.tistory.com/71
https://codechasseur.tistory.com/25
'개발 > 개발노트' 카테고리의 다른 글
[운영체제] CPU 스케줄링 (0) | 2023.04.22 |
---|---|
[운영체제] PCB & Context Switching (0) | 2023.04.19 |
[Network] REST, REST API, RESTful (0) | 2023.04.12 |
[Network] Blocking I/O, Non-blocking I/O (0) | 2023.04.08 |
Blocking, Non-blocking & Synchronous, Asynchronous 차이점 (1) | 2023.04.05 |