희봉, 티거, 알리님의 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이 배포되는 공간.
-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 동작과정]
- Web Server는 웹 브라우저 클라이언트로부터 HTTP 요청을 받는다.
- Web Server는 클라이언트의 요청(Request)을 WAS에 보낸다.
- WAS는 관련된 Servlet을 메모리에 올린다.
- WAS는 web.xml을 참조하여 해당 Servlet에 대한 Thread를 생성한다. (Thread Pool 이용)
- HttpServletRequest와 HttpServletResponse 객체를 생성하여 Servlet에 전달한다.
- 5-1. Thread는 Servlet의 service() 메서드를 호출한다.
- 5-2. service() 메서드는 요청에 맞게 doGet() 또는 doPost() 메서드를 호출한다.
- protected doGet(HttpServletRequest request, HttpServletResponse response)
- doGet() 또는 doPost() 메서드는 인자에 맞게 생성된 적절한 동적 페이지를 Response 객체에 담아 WAS에 전달된다.
- WAS는 Response 객체를 HttpResponse 형태로 바꾸어 Web Server에 전달한다.
- 생성된 Thread를 종료하고, HttpServletRequest와 HttpServletResponse 객체를 제거한다.
- 참고 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 |