-
[Web] Web Server 과 Web Application Server기타 2022. 4. 21. 03:48반응형
이 글은 혼자 학습한 내용을 바탕으로 작성되었습니다.
틀리거나 잘못된 정보가 있을 수 있습니다.
댓글로 알려주시면 수정하도록 하겠습니다.
1. 정적 페이지와 동적 페이지
Web Server와 WAS(Web Application Server)가 나누어진 이유는 바로 정적 페이지와 동적 페이지를 담당하도록 역할을 분리하였기 때문입니다.
- 정적 페이지
정적 페이지는 이름에서 유추할 수 있는 것처럼 변화가 없이 동일한 페이지를 의미합니다.
즉 동일한 URL을 통해 페이지를 요청하면 항상 같은 페이지를 응답하는 페이지를 의미합니다.
대표적인 페이지로는 이미지, Javascript파일, CSS파일 등이 있습니다. - 동적 페이지
동적 페이지는 정적 페이지의 반대로 변화하여 서로 다른 페이지를 의미합니다.
즉 동일한 URL을 통해 페이지를 요청하더라도 인자, Session 등 여러 데이터에 의해 서로 다른 내용의 페이지를 의미합니다.
대표적인 페이지로는 JSP 등이 있습니다.
동적 페이지 예시
티스토리의 관리자 페이지에 접속하면 우측 상단에 닉네임이 출력됩니다.
이 HTML 파일이 정적 페이지라면 해당 HTML 파일은 티스토리 회원 수만큼 존재할 것입니다.
홍길동_상단. html, 명탐정_상단. html.....처럼 말이죠
하지만 이 경우는 아주 비 효율적입니다. 겨우 닉네임이 다른 것 하나 때문에 html 파일이 수천 개 수만 개가 되기 때문입니다.
그래서 하나의 html 파일을 생성하고 닉네임이 들어가는 부분은 로그인한 회원정보를 DB로부터 조회하여 html의 닉네
임 Tag에 닉네임을 동적으로 작성한 파일을 동적 페이지라고 합니다.
2. Web Server
웹 서버는 Client의 정적 페이지 요청에 응답을 하며 동적 페이지 요청인 경우 요청을 WAS로 전달하는 2가지 기능을 수행합니다.
Client가 Web Server의 정적 페이지인 이미지 자원 1을 요청한 경우 Web Server는 자원 1을 응답하여 자원 1을 Client로 전달합니다.
Web Server로는 아파치, NGINX, IIS 등이 있습니다.
3. Web Application Server
WAS는 Client가 동적 페이지를 요청하고 Web Server를 통해 요청이 전달됩니다. 그럼 WebContainer에 해당 URL을 담당하는 Servlet이 있는지 확인을 합니다.
Servlet이 존재한다면 해당 Thread를 생성하고 해당 Thread에서 Servlet의 Service를 수행하도록 합니다.
Servlet이 존재하지 않는다면 Servlet 객체를 생성하고 Thread를 생성하여 Servlet의 Service를 수행하도록 합니다.
WebContainer는 Servlet들을 싱글톤으로 관리하므로 이미 생성되어 있는 Servlet들은 추가로 생성하지 않고 재사용합니다.
WAS로는 톰켓, 제우스, JBoss 등이 있습니다.
4. Web Server와 WAS 분리 이유
- 서버의 부하 분산
정적 페이지를 담당하는 Web Server를 앞단에 둠으로써 정적 페이지 응답 속도를 향상할 수 있습니다.
WAS의 경우 DB나 Redis 등 외부 서버들과 통신하며 많은 작업들을 수행합니다. 만약 WAS에서 정적 페이지 요청까지 담당하게 된다면 동적 페이지의 응답 속도가 지연될 수 있습니다. - 보안 향상
http 통신의 경우 암호화가 전혀 되지 않은 상태로 통신이 진행됩니다.
암호화된 통신을 위해 SSL을 이용한 https 통신을 이용합니다. 그런데 암호화는 비용이 아주 큰 작업이므로 이 작업을 WAS에서 담당하기에는 부담 있어 단순한 정적 페이지 응답을 담당하는 Web Server에서 SSL의 암복호화를 담당하도록 합니다. - Load Balancing
하나의 Web Server에 여러 WAS를 연결하여 특정 WAS에 부하가 급증하면 Web Server는 이후 요청을 부하의 여유가 있는 다른 WAS로 요청하여 부하를 분산할 수 있도록 합니다.
반응형'기타' 카테고리의 다른 글
[Slack] SpringBoot Interactivity Message 전송 (0) 2022.04.09 [Slack] SpringBoot Slack Message 전송 (0) 2022.04.07 [ElasticSearch] Windows 설치 및 실행 (0) 2022.04.07 [Redis] Redis란 무엇인가? (0) 2022.03.21 [AWS] Amazon Linux2 Redis 설치 (7) 2022.03.15 - 정적 페이지