includestdio

[Web] 웹 애플리케이션 서버 (WAS) 본문

컴퓨터

[Web] 웹 애플리케이션 서버 (WAS)

글쓴이 includestdio 2017. 8. 28. 03:05

웹 클라이언트의 request를 받아서 처리하는 서버를 통칭해서 웹 서버라고 부르지만, 좀 더 세분화하면 웹 서버와 웹 애플리케이션 서버로 나눌 수 있습니다.


웹 서버

주로 정적 자원인 HTML, CSS, JS 등의 파일을 웹 클라이언트에 제공할 때 사용합니다.

만약 동적인 페이지 처리가 필요하다면 웹 애플리케이션 서버에 요청을 넘깁니다.


웹 애플리케이션 서버

웹 서버로부터 요청을 받아서 처리하며, 그 결과를 웹 서버로 반환합니다.

주로 동적인 페이지 생성을 위한 데이터베이스 연동 등의 작업을 하게됩니다.

 

 

아래에 웹 애플리케이션 서버가 탄생하게된 히스토리를 적어놓았습니다.




1. 정적 페이지와 동적 페이지

 

정적 페이지

동일한 요청에 대해서 동일한 내용의 페이지를 반환합니다.

서버에 미리 저장해둔 HTML, CSS, JS 파일을 그대로 전달합니다.


동적 페이지

동일한 요청이더라도 누가/언제 요청했는지에 따라 내용이 변하는 페이지입니다.

거의 모든 웹 페이지가 동적 페이지에 해당합니다.

ex) 쇼핑몰 사이트의 장바구니 페이지 등


정적, 동적은 사용자가 요청하는 시점에 페이지의 내용이 유지되는지 혹은 변경되는지를 구분해주는 용어입니다.




2. CGI 방식

 

웹 초창기에는 정적인 웹 페이지를 하이퍼링크로 연결하여 보여주는 것이 목적이었지만, 점차 동적 페이지에 대한 요구사항이 늘어나게 되었습니다.

필요한 데이터를 저장하고 조회하는 데이터베이스 연동을 위해, 웹 서버와는 다른 별도의 프로그램이 필요해지게 되었고 웹 서버와 별도의 프로그램 사이에 정보를 주고 받는 규칙을 정의한 것이 CGI(Common Gateway Interface) 입니다.


전통적인 CGI 방식은 웹 서버가 C, C++, PHP 등으로 만들어진 프로그램을 직접 호출해서 프로세스를 생성합니다.

 

 

 

위의 그림에서 볼 수 있듯이 클라이언트 요청에 독립적인 프로세스를 생성하기 때문에 프로세스가 점유하는 메모리가 많아져서 시스템에 부하를 주게됩니다.

현재는 CGI 방식을 거의 사용하지 않고 있고, 이러한 단점들을 해결하기 위한 여러 기술이 등장했습니다.

 

 

3. CGI 대안 기술

 

3-1. 프로세스를 미리 데몬으로 띄워놓음

 

별도의 프로그램을 처리하기 위한 프로세스를 미리 데몬으로 띄워놓은 후, 웹 서버의 요청을 데몬에서 처리합니다.

프로세스의 생성/소멸 비용을 줄일 수 있습니다.

 

 

3-2. 스크립트 엔진을 웹 서버에 내장

 

스크립트 엔진을 웹 서버에 내장하여, 별도의 프로그램을 처리하기 위한 스크립트(PHP, Perl 등의 언어로 작성)를 실행합니다.

스크립트 엔진이 웹 서버에 내장되어있기 때문에 CGI 방식의 단점이었던 프로세스 생성의 부하를 줄일 수 있습니다.

아파치 웹 서버에서는 mod_php, mod_perl 등과 같은 모듈이 사용됩니다.

 

 

4. 웹 애플리케이션 서버

 

별도의 데몬으로 띄워놓는 방식이 발전하여 웹 애플리케이션 서버가 탄생했습니다.

스레드 처리가 보강되고, 객체 지향이 반영되는 등 기존 데몬 방식보다 발전된 방식입니다.

WAS(Web Application Server) 라고도 불리며, 현재 가장 많이 사용하고 있는 JSP, ASP 기술에서 WAS 방식을 사용하고 있습니다.

 

 

웹 애플리케이션에서도 정적인 자원을 처리할 수 있지만, 정적인 요청은 웹서버가 동적인 요청은 웹 애플리케이션 서버가 처리하는 것이 훨씬 더 많은 요청을 처리할 수 있습니다.

 

가장 대표적인 웹 애플리케이션 서버로 Tomcat이 있습니다.

 

'컴퓨터' 카테고리의 다른 글

[Javascript] Symbol 객체  (0) 2017.08.29
[Javascript] 래퍼 객체 (Wrapper object)  (0) 2017.08.29
[Web] 웹 애플리케이션 서버 (WAS)  (0) 2017.08.28
[Javascript] Strict mode란?  (0) 2017.08.27
리눅스 find 명령어  (0) 2016.10.20
Java 실행 옵션들  (0) 2016.10.18
0 Comments
댓글쓰기 폼