Search
Duplicate

현대의 웹서버(WAS)

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
Web
Scrap
태그
9 more properties
(오류 수정은 환영합니다!)

BASIC-정적 페이지

정적 페이지란 누가 요청하더라도 항상 같은 내용을 표시하는 웹 페이지를 말한다. 주로 html, 자바스크립트, css, 이미지만으로 이루어진 페이지가 이에 해당한다.
(ex: 블로그, 회사나 개인 소개 페이지는 누가 보더라도 같은 내용을 보여준다.)

BASIC-동적 페이지

반면 동적 페이지란 동일한 요청이라도 누가, 언제, 어디서, 어떻게 요구 했는지에 따라 각각 다른 내용이 반환 되는 페이지를 말한다.
(ex: 현재 시각 보여주는 페이지, 온라인 쇼핑몰에서 사용자마다 다른 카트 내용을 보여주는 페이지 등 사용자나 상황에 따라 다른 화면을 보여주는 페이지들)
동적 페이지는 프로그래밍 코드가 포함되어 있어 페이지 요청 시점에 html문장을 만들어내고 화면에 띄워준다.

서론

웹 초기에는 정적 페이지만 만들 수 있었다. 하지만 사람들은 이에 만족할 리가 없다. 사용자나 상황에 따라 다른 페이지를 보길 원했다. 다양한 퍼포먼스를 위해 동적 페이지 요구가 많아지면서 동적인 페이지를 처리할 수 있는 서버 기술들을 개발했다. 그것이 바로 현재의 WAS 이다.
WAS = Web server + 동적인 처리 기능(컨테이너)
WAS와 웹 서버를 묶어서 WAS 라고 볼 것이냐, 나눠서 볼 것이냐는 사실 그렇게 의미가 없다. 이는 상황에 따라 다른 것이기 때문이다.
개인용 프로젝트의 경우 하나의 컴퓨터로 충분히 트래픽을 감당할 수 있다.(사용자가 없으니까..ㅠ) 하지만 거대 IT기업들이 운영하는 사이트는 동시에 엄청난 트래픽이 오고 가기 때문에 하나의 컴퓨터로 모든 작업을 처리하기는 불가능이다. 그래서 Web server를 주로 처리하는 컴퓨터와 동적인 처리를 주로 처리하는 컴퓨터를 나눠서 관리하는 것일 뿐 두 상황 모두 WAS를 운영하고 있는 것이다.

웹 애플리케이션 서버(WAS) 방식

WAS는 동적인 데이터들을 처리해 정적인 페이지로 생성할 줄 아는 서버이다. 웹서버보다 기능이 더 많고 종류도 다양하다. (자바는 tomcat, 파이썬은 uwsgi, gunicorn)
클라이언트가 페이지를 요청하게 되면 정적인 부분은 웹 서버가 혼자 처리해서 클라이언트에게 넘겨주고 만약 동적인 부분이 필요하면 이를 Web container에 요청하고 가공된 정보를 함께 얹어서 클라이언트에게 넘겨준다.
정적인 부분은 웹 서버가, 동적인 부분은 web container가 처리함으로써 더 많은 요청들을 빠르게 처리할 수 있다.
하드웨어적으로도 두 프로그램을 분리해서 배치하는 것이 일반적이다. 두 서버를 하나의 하드웨어에 탑재하는 것도 가능하지만 따로 탑재할 경우 메모리 효율이 높아지고 부하도 줄일 수 있다. (해당 사이트의 정적 페이지의 요청과 동적 페이지 요청 비율을 비교하여 유연하게 조절함)
만약 웹 서버와 웹 컨테이너를 분리시켜 운영할 경우 웹 컨테이너는 클라이언트와 직접 연결되어 있지 않기 때문에 DB와 직접적으로 연결되어 있는 웹 컨테이너를 내부망으로 숨길 수 있어서 데이터 보안에도 용이하다.

CGI(Common Gateway Interface)

웹서버와 외부 프로그램 사이에서 정보를 주고받는 방법이나 규약들을 말하는 것이다. 이는 웹 서버가 외부 프로그램을 실행시키도록 돕는다.(연결다리 역할을 한다.) CGI는 프로그램이며 자바나 C, Perl 로 작성할 수 있다.
사실 웹 서버 + CGI = WAS 라고 할 수 있다. 하지만 웹서버와 외부 프로그램을 연결해주는 것은 CGI만 있는 것이 아니다. (ex : FAST CGI, WSGI 등) 따라서 '모든 WAS는 웹서버와 CGI로 구성된다.'는 틀린 말이다.
더 디테일한 차이점은 CGI는 프로세스를 생성하는 것이고 WAS는 쓰레드를 생성한다는 점이다.

한발 더 나아가기

이는 곧 웹 개발자가 프론트엔드와 백엔드 개발자로 나눠지게 된 계기와도 연관이 있을 것이다.(개인적인 생각입니다!) 웹 페이지의 퍼포먼스를 위해 알아야 하는 기술들이 방대하게 늘어나다보니 혼자서 모든 것을 잘할 수 는 없다.(그 모든것을 잘하면 풀스택이 되는거다!) 그러면서 자연스레 정적인 부분을 개발하는 프론트 엔드와 동적인 부분을 처리하는 백엔드로 나눠졌다고 볼 수 있다.
웹 서버, WAS, DB 는 결국 전부 프로그램이다. 대형 IT기업들의 경우에는 사용자가 많고 서비스가 크기 때문에 각 프로그램들을 좀 더 특화 시켜서 여러 대의 컴퓨터에 분산 시키는 것이다. 따라서 개인용 프로젝트를 진행한다면 하나의 컴퓨터에서 전부 운영해도 큰 문제 없으니 웹 개발에 너무 겁먹지 말자.