Computer Science/네트워크

[CS] 웹서버 vs WAS

findTheValue 2021. 7. 13. 01:42

희봉, 티거, 알리님의 10분 테코톡 유튜브 영상 보고 작성했습니다.


Web?

-인터넷을 기반으로 한, 정보를 공유, 검색할 수 있게 하는 서비스

-URL(주소), HTTP(통신규칙), HTML(문서) 3가지 요소를 가짐.

 

Client

-웹 브라우저.

 

Server

-클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템

 

Web Server

-인터넷을 기반으로 클라이언트의 요청에 따라 웹 서비스(HTML등 각종 리소스)를 제공하는 컴퓨터

 

=> Client는 웹 서버에게 URL을 가지고 HTTP에 맞게 요청(특정 path로 특정 파일을 요청)하면 HTML을 응답 받음.

=> Web server는 클라이언트의 요청을 기다리고 웹 요청(HTTP)에 대한 데이터를 만들어서 응답.

이때 데이터는 웹에서 처리할 수 있는 html, css, 이미지 등 정적 데이터로 한정됨.

 

===>>>>>>>동적 데이터 전송에 대한 욕구가 생김.


=>>WAS(Web Application Server)가 나옴.

동적 데이터 전송에 대한 욕구를 Application을 통해 동작시킴.

 

Web Application : 웹에서 실행되는 응용 프로그램

 

Web Application Server

-웹 App과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크

-웹 애플리케이션을 실행시켜 필요한 기능을 수행하고 그 결과를 Web Server에 전달하는 미들웨어.

 

-php, jsp, asp, Servlet와 같은 언어들을 사용해 동적인 페이지를 생성할 수 있는 서버.

-프로그램 실행 환경과 데이터베이스 접속 기능 제공

-비즈니스 로직 수행 가능

-여러 개의 트랜잭션(논리적 작업 단위) 관리 가능.

-분산 트랜잭션, 보안, 메시징, 쓰레드 처리 등의 기능을 처리하는 분산 환경에서 사용된다.

 

-웹 서버 + 웹 컨터이너

*컨테이너 : jsp, servlet을 실행시킬 수 있는 소프트웨어

-java 계열에선 웹 어플리케이션 컨테이너라 부름.

*웹 어플리케이션 컨테이너 : 웹 App이 배포되는 공간.

Web server는 WAS안에있을수도 없을 수도 있음.

-Client는 Web Server에 정적, 동적 페이지 Request.

동적 페이지 요구일 시 Web Container로 전송.(uid값에 따른 로직처리를 요구함)

 

-Web Container는 JSP,Servlet등 구동환경 제공.

동적 컨텐츠를 생성해 WebServer로 전송.

WebServer는 Client에게 Response


 

결론

WebServer는 정적 컨텐츠(논리연산이 불가능한)만 줄 수 있고

*정적컨텐츠는 여러번 요구해도 같은 화면만 제공함

WAS는 정적 + 동적 컨텐츠도 줄 수 있다.

*동적 페이지는 해당 유저에 따라, input에 따라 그에맞는 data를 mapping이 되어 생성이 됨.


[Web Server과 WAS의 배치에 따른 아키텍쳐(구조 설계)에 관한 이야기.]

 

=> WAS가 다하면 WAS만쓰면 되는거 아니냐?

=> 아니다 기능을 분리해 서버 부하를 방지한다.(정적 콘텐츠작업에 사용하는 리소스들로 인해 지연이 생길수있음)

=> 정적데이터는 WebServer에게 맡겨 WAS는 DB조회, 비즈니스로직 구성에 집중한다.

 


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

 

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

---SLL에 대한 암복호화 처리에 WebServer를 사용.

---공격에 대해 WebServer를 앞단에 두어 중요한 정보가 담긴 DB나 비즈니스로직까지 전파되지 못하게 한다.

(리버스 프록시)

 

3. 여러 대의 WAS연결가능.

---Load Balancing(WAS가 처리해야 하는 요청을 WebServer로 분업화시켜 여러대로 같이 처리할 수 있도록 설정)

*WebServer(NGINX)내부에서 로직으로 여러대의 WAS를 그룹화(Plug in처리)하고 로드밸런싱함.

 

***WebServer에서 WAS로 주기적으로 HTTP요청을 보내 서버의 상태를 확인(Health check)

(Interval(health check요청 주기 default 5초),Fails(n번 이상 실패시 서버 비정상이라 인지.default 1회),Passes(서버 복구 후 요청이 n번 연속 성공하면 서버가 정상으로 인지 default 1회))

---fail over(장애극복) - WAS가 작동을 중지하게되면 다른 WAS들로 다시 돌린다.

---fail back 작동이 중지된 WAS를 다시 돌아가게(back)만든다.

---대용량 웹 App의 경우(여러개의 서버 사용) Web Server와 WAS를 분리해 무중단 운영을 위한 장애 극복에 쉽게 대응 할 수 있다.

 

4. 다른 종류의 WAS로 서비스 가능.

---하나의 서버에 php App과 java App을 동시에 사용가능(2개 이상의 WAS를 통해.) 

 

5. 접근 허용 IP관리, 2대이상 WAS에서의 session관리등도 WebServer에서 하면 효율적.

 

 

==> 트래픽이 늘어날수록 WAS1대 -> 1WS, 1WAS(역할 분할) ->1WS, 2WAS(로드밸런싱) + Health check가능. 

 

[1Web Server, 1WAS 동작과정]

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

    DBMS(Database Management System)
    ---다수의 사용자들이 DB 내의 데이터를 접근할 수 있도록 해주는 소프트웨어
    ---DBMS는 보통 Server 형태로 서비스를 제공한다.
    ---Ex) MySQL, MariaDB, Oracle, PostgreSQL 등
    ---Q) DBMS Server에 직접 접속해서 동작하는 Client Program의 문제점?
    ------Client에 로직이 많아지고 이에 따라 Client Program의 크기가 커진다.
    ------로직이 변경될 때마다 매번 배포가 되어야 한다.
    ------Client에 대부분의 로직이 포함되어 배포가 되기 때문에 보안에 취약하다.
    ---A) => 이를 해결하기 위해 아래와 같은 MiddlWare가 등장했다.

  • MiddleWare
    ---Client - MiddleWare Server - DB Server(DBMS)
    ---동작 과정
    ------Client는 단순히 요청만 중앙에 있는 MiddleWare Server에게 보낸다.
    ------MiddleWare Server에서 대부분의 로직이 수행된다.
    ------이때, 데이터를 조작할 일이 있으면 DBMS에 부탁한다.
    ------로직의 결과를 Client에게 전송한다.
    ------Client는 그 결과를 화면에 보여준다.
    ---즉, 비즈니스 로직을 Client와 DBMS 사이의 MiddleWare Server에서 동작하도록 함으로써 Client는 입력과 출력만 담당하게 된다.

 

 

 

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

'Computer Science > 네트워크' 카테고리의 다른 글

[CS][네트워크] TCP / UDP  (0) 2021.07.21
[CS] HTTP1.1 HTTP2.0 QUIC  (0) 2021.07.19
[CS] HTTP 메세지  (0) 2021.07.18
[CS] OSI 7 Layer  (0) 2021.07.18
[CS] Forward Proxy, Reverse Proxy, Load Balancer  (0) 2021.07.16