Web Server 와 WAS 의 차이를
명확하게 알고 계시나요?
Web 서비스 구조(Web Service Architecture)에
대해서 남들에게 설명할 수 있으신가요?
< Web Server >
Web Server 란
HTTP 프로토콜을 기반으로
웹 브라우저를 통해 사용자의
HTTP 요청을 받고, 정적인 콘텐츠를 제공
Web Server 의 기능
case 1: "정적인 콘텐츠"
WAS 를 거치지 않고
바로 자원을 제공한다
case 2: "동적인 콘텐츠"
클라이언트의 요청(request)을
WAS 에 전달하고,
WAS 가 처리한 결과를
다시 클라이언트에게 응답(response)한다
Web Server 의 예
ex) Apache HTTP Server, Nginx, etc...
< WAS(Web Application Server) >
WAS 란
WAS = Web Server + Web Container
동적인 콘텐츠를 제공하기 위해
서버 사이드 스크립트나 API 를 실행하는 서버
Web Server 의 기능들을
구조적으로 분리하고자 제시되었다.
WAS 의 기능
Web Server로 부터 넘겨받은
클라이언트의 요청(request)에 따라서
데이터를 처리하고 결과를
동적으로 생성하여 응답(response)하는 구조
(분산 트랜잭션, 보안, 쓰레드 처리, DB 조회,
로그인 기능, 비즈니스 로직처리 etc...)
WAS 의 예
ex) Apacahe Tomcat, JBoss, Jeus, etc...
< Web Server 와 WAS 를 분리하는 이유 >
최근 많은 WAS 가 내장된
Web Server의 기능을 강화하면서,
WAS 가 정적인 콘텐츠를
처리함에 있어 성능상 큰 차이가 없다
그럼에도 불구하고
Web Server 와 WAS 를 분리하는 이유는 뭘까?
기능을 분리를 통한 서버 부하 방지
Web Server 를 사용하여
정적인 콘텐츠들은 굳이 WAS 까지
가지 않고 앞에서 빠르게 처리할 수 있다
분리를 통한 보안 강화
WAS 에는 실제 Web Application 이
올라가 있기 때문에 외부와 직접적으로
통신하게 된다면 민감한 파일들이
외부로 노출될 위험이 있다
한 개의 Web Server 에 다수 WAS 연결하기
서비스 규모가 커질수록 Web Server 와 WAS 의
1:1 구조만으로는 다소 어려움이 존재한다
따라서 1:N의 구조로 로드 밸런싱을 통하여
안정적인 서비스를 운영할 수 있다
(로드 밸런싱에 대한 설명 보러 가기)
다양한 Web Application 서비스
하나의 Web Server 에 연결해서
Java Server, PHP Server 와 같이
서로 다른 서버를 제공할 수 있다
< Web Service Architecture >
3가지 구조가 존재한다
1. Client - WAS - DB
2. Client - Web Server - DB
3. Client - Web Server - WAS - DB
앞서 설명했던 가장 이상적인 구조인
3번의 동작과정에 대해 자세히 살펴보자
1. Client 의 HTTP 요청이 Web Server 로 들어옴
2. Web Server 는 해당 요청을 WAS 로 전달
3. WAS 는 관련된 Servlet 을 메모리에 올림
4. web.xml 을 참고하여 해당 servlet 에 대한 thread 생성
5. HttpServlet(Request / Respone) 객체를 생성하고 servlet 에 전달
6. thread 가 servlet 의 service() 메소드 호출
7. service()는 요청에 알맞은 doGet() / doPost() 메소드 호출
8. 적절한 로직을 수행하고 Response 객체에 담아 WAS 로 응답
9. WAS 는 응답받은 Response 객체를 HttpResponse 형태로 변환 후 Web Server 로 리턴
10. Web Server 는 Client 에게 리턴 후 생성했던 thread, HttpServlet(Request / Respone) 종료 및 제거
'Computing and DB 🖥 > Computer Science' 카테고리의 다른 글
[디자인 패턴] 싱글톤 제 2장 - "싱글톤의 심화과정" (1) | 2024.01.25 |
---|---|
[디자인 패턴] 싱글톤 제 1장 - "개념 및 멀티 쓰레드와 이른 초기화" (0) | 2024.01.24 |
정적 콘텐츠(Static Content) & 동적 콘텐츠(Dynamic Content) (0) | 2024.01.12 |
테스트 코드 작성하기가 귀찮다고? (0) | 2024.01.02 |
캐시(cache)랑 쿠키(cookie)는 뭐가 다른 거야? (0) | 2023.12.16 |