1. Web이란?
Web Server와 WAS를 알기전 Web에 대해서 집고 넘어가봅시다.
Web은 우리가 흔히 크롬 or 사파리 or 익스플로러 라는 소프트웨어 프로그램을 통해 Web통신을 하는 것을 말합니다.
Web통신은 기본적으로 http 또는 https 프로토콜을 사용하고 있죠.
과거에는 인터넷을 통해 문서를 보기 위해서 사용했습니다.
이것이 무슨말이냐?
정적 페이지 : https://microsoft.github.io/cpprestsdk/namespaces.html
이런 html 확장자로 된 정적 페이지를 보기위해서 사용했습니다.
즉, 언제 어디서나 인터넷만 연결되어 있다면 A4용지로 인쇄된 문서나 책 등을 굳이 가지고 다닐 필요가 없었죠.
컴퓨터로 인터넷에 접속해서 문서를 보면 되니깐요.
편리하죠?
하지만 과거에는 화려한 폰트, 디자인, 스크롤바를 이용한 동적인 표현같은 것들이 불가능 했습니다.
html문서는 테그형식으로 이뤄진 단순한 문서였기 때문이죠.
한 예로 저희는 워드나 한글문서에서 글을 작성할 때 폰트나 기울기, 표, 굵게 등을 사용할 수 있잖아요?
하지만 딱 여기까지만 사용 가능하죠. html도 마찬가지였습니다.
때문에 좀 더 다양한 폰트, 화려한 텍스쳐, 동적인 이미지 재현 등을 표현하기 위해 CSS와 Javascript가 등장합니다.
CSS와 Javascript같은 경우 html문서를 좀 더 화려하고 동적으로 보여주기 위해서 만들어진 프로그래밍 언어입니다.
여기서 Web Server의 개념이 등장합니다.
2. Web Server란?
저희가 크롬으로 구글에 접속한 후 "웹 서버" 라는 위키백과 링크를 클릭해본다고 가정해 봅시다.
그럼 http 프로토콜이 사용되며 Request가 서버로 갈 것입니다.
그럼 해당 서버는 Reqeust를 받고 링크에 해당되는 HTML문서를 갖고와서 클라이언트에게 Response를 합니다.
그럼 클라이언트는 해당 HTML문서를 받아 크롬이라는 프로그램으로 HTML문서를 해석하여 사람이 볼 수 있도록 화면에 띄워주죠.
여기서 서버에서온 HTML문서에는 CSS와 Javascript가 들어가 있습니다.
때문에 저희는 웹페이지를 좀 더 풍부하게 볼 수 있게 되죠.
하지만 이렇게 하는것에는 한계가 있습니다.
시대가 발전하면서 실시간이란 개념이 생기고, 인터넷 사용하는 유저들이 증가함에 따라 트래픽 또한 많아졌습니다.
여기서 실시간 검색어, 실시간으로 변경되는 게시물, 실시간으로 수정되는 데이터, 증가하는 트래픽 등을 해결해야 했습니다.
기존 Web Server방식에는 다소 무리가 있었으며, HTML문서를 미리 만들어서 제공하는 것에는 한계가 있었습니다.
때문에 WAS(Web Application Server)가 탄생합니다.
3. WAS
WAS는 틀이되는 HTML문서를 기반으로 클라이언트의 요청에 따라,
실시간으로 HTML문서를 제작해 클라이언트에게 서비스 해줍니다.
즉, 동적으로 웹페이지를 클라이언트에게 제공할 수 있다는 뜻입니다.
서버에서 HTML 제작을 도와주는 프레임워크와 프로그래밍 언어가 있습니다.
흔히 들어본 JAVA, JSP, Servlet, JAVA Spring, Tomcat 등이 대표적인 예입니다.
( 이것들을 Web Container라고 하는데 좀 추상적인 개념이라 생략하겠습니다. )
때문에 이런 작업을 하는 WAS는 일반적인 Web Server에 비해 부하가 더 많이걸리게 됩니다.
또한 프로그래밍 설계도 복잡해 지죠.
(클라이언트 요청에 따라 필요한 정보를 DB에서 받아와서 특정 HTML문서 위치에 해당 데이터를 삽입하고 등....)
때문에 이런 설계를 모듈화 시켜 패턴을 만든 것이 MVC 모델링입니다.
4. MVC
5. Web Server - WAS
이렇게 말이죠. 정적인 페이지 요청이 들어오면 Web Server에서 처리하고,
동적인 페이지 요청이 들어오면 Web Server는 해당 정보를 WAS에게 전달하죠.
이런식으로 분산처리를 진행한다면 트래픽을 좀 더 효율적으로 관리할 수 있게 될 것입니다.
하지만 서버가 모듈화 되어 분산의 형태를 띄우게 되면 서버동기화, DB동기화, 세션관리 등...
관리해야할 것들이 늘어나며 관리 측면에서 비용이 굉장히 증가하게 됩니다.
여기서 동기화란? 여러대의 서버의 데이터가 일치해야 한다는 것입니다. A. B. C. D라는 서버가 있는데,
A에 1234데이터가 있다면 B, C, D도 1234의 데이터를 갖고 있어야 합니다.
왜냐하면 여러 클라이언트가 요청 했을 때 동일한 데이터를 받아야 하는데 데이터가 일치하지 않는다면??
신뢰성을 잃겠죠? 정확한 데이터 전달이 목적인데 말이죠....
또한 분산처리 설계방식에 따라 처리하는 데이터가 아예 달라질 수도 있구요.
때문에 이런 것들을 해결하기 위해서 Zookeeper, Hadoop, 세션 클러스터링 등의 프로그램들을 사용하는 것입니다.
6. 마치며....
Javascript에서 굉장히 햇갈렸는데, Javascript로 DB요청이 가능합니다.(ajax를 사용해야 하긴 하지만...)
하지만 이렇게 만들었을 경우 단점들도 많고 많이 사용하지 않더군요.
또한 클라이언트에서 서버에 DB요청을 해, 클라이언트에서 수정하는 방식은 저희가 알고자하는
Web Server와 WAS의 차이점에는 다소 거리가 멀다고 판단했습니다.
결국 저희는 큰 틀에서의 Web Server와 WAS의 차이점에 대해 개념을 알고 넘어가야 하므로,
"해당 부분은 결국 신경을 안써도 된다." 라는 결론을 내렸습니다.
열심히 만들었는데 이 글을 읽으시는 분들에게 도움이 되었으면 좋겠습니다. :)
감사합니다.
'프로그래밍 > 웹, 네트워크' 카테고리의 다른 글
ARP통신에 대해서... (1) | 2021.06.16 |
---|---|
DNS에 대한 설명(디테일 하게....) (7) | 2021.03.29 |
http와 tcp/ip의 이해 (21) | 2020.10.31 |
리틀 엔디언과 빅 엔디언 (0) | 2020.10.22 |
티스토리 마크다운 언어 쓰기(프로그래밍 코드 양식?) (0) | 2020.05.16 |
댓글