본문 바로가기
Computing and DB 🖥/Computer Science

Web Server 는 뭐고, WAS 는 도대체 뭐야?

by dudefromkorea 2024. 1. 8.

Web ServerWAS 의 차이를

명확하게 알고 계시나요?

 

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) 종료 및 제거

728x90
반응형