ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 웹 어플리케이션 서버
    Technique/WEB 2019. 9. 16. 18:34
    반응형

    웹 서버와 웹 애플리케이션 서버 구분

    구분 역할 프로그램 명
    웹 서버 웹 클라이언트의 요청을 받아서 요청을 처리하고, 그 결과를 웹 클라이언트에게 응답한다. 
    주로 정적 페이지인 HTML, 이미지, CSS, 자바스크립트 파일을 웹 클라이언트에 제공할 때 웹 서버를 사용한다. 만약 동적 페이지처리가 필요하다면 웹 애플리케이션 서버에 처리를 넘긴다.
    Apache httpd, Nginx, lighttpd, IIS등
    웹 애플리케이션 서버 웹 서버로부터 동적 페이지 요청을 바당서 요청을 처리하고, 그 결과를 웹 서버로 반환한다.
    주로 동적 페이지 생성을 위한 프로그램 실행과 데이터베이스 연동 기능을 처리한다.
    Apache Tomcat, JBoss, WebLogic, WebSphere, Jetty, Jeus 등

     

    정적 페이지, 동적 페이지

    정적 페이지

    누가, 언제 요구하더라도 항상 같은 내용을 표시하는 웹 페이지를 말한다. 정적 페이지들은 해당 웹 서비스의 제공 가자 사전에 준비하여 서버 측에 배치한 것으로 동일한 리소스의 요청에 대해서는 항상 동일한 내용의 페이지를 반환한다. 주로 HTML, 자바 스크립트, CSS, 이미지 만으로 이루어진 페이지가 해당한다.

     

    동적 페이지

    누가, 언제, 어떻게 요구했는지에 따라 각각 다른 내용이 반환되는 페이지를 말한다. 예를 들면 현재 시각을 보여주는 페이지나 온라인 쇼핑 사이트에서 사용자마다 다른 카트 내용을 보여주는 페이지 등이 있다.

     

    정적, 동적 이란 용어는 사용자가 페이지를 요청하는 시점에 페이지의 내용이 유지되는가 또는 변경되는가를 구분해주는 용어이다. 즉 동적 페이지에는 프로그래밍 코드가 포함되어 있어서 페이지 요청 시점에 HTML 문장을 만들어 내는 것이다.

     

    CGI 방식의 단점

    CGI 자체는 정식 프로그래밍 언어나 스크립트가 아니라, 웹 서버와 독립적인 프로그램(프로세스) 사이에 정보를 주고받는 규격을 의미하며, 이 규격을 준수하면 어떤 언어를 사용해도 CGI 프로그램을 개발할 수 있다. 전통적인 CGI방식은 다음 그림과 같이 웹 서버가, C, C++, Perl, PHP 등으로 만들어진 CGI 프로그램을 직접 호출하여 개별 프로세스를 생성하는 방식이다.

    전통적인 CGI 방식

    CGI방식의 근본적인 문제점은 각각의 클라이언트 요청에 대하여 독립적인 별도의 프로세스가 생성된다는 것이다. 요청이 많아질수록 프로세스가 많아지고, 프로세스가 많아질수록 비례적인 프로세스가 점유하는 메모리 요구량도 커져서 시스템에 많은 부하를 주는 요인이 된다. 그래서 현재는 CGI 방식은 거의 사용되지 않고 있으며, 이런 문제를 해결하기 위해 여러 가지 기술이 등장하였다.

     

    대안

    대안중 하나는 별도의 애플리케이션 (CGI 프로그램과 같은 역할을 하는 프로그램)을 Perl, PHP 등의 스크립트 언어로 작성하고, 스크립트를 처리하는 스크립트 엔진(인터프리터)을 웹 서버에 내장시켜서 CGI방식의  단점이었던 별도의 프로세스를 기동시 키는 오버헤드를 줄이는 방식이다. 아파치 웹 서버에서 사용하는 mod_perl, mod_php모듈이 Perl이나 php 스크립트 엔진을 웹 서버에 내장시켜 애플리케이션의 처리를 고속화하기 위해 개발된 기술들이다. 

    파이썬의 경우 mod_python모듈은 더 이상 사용하지 않고 있으며 현재는 mod_wsgi모듈을 사용하고 있다.

     

    또 하나의 대안은 애플리케이션을 처리하는 프로세스를 미리 데몬으로 기동시 켜 놓은 후, 웹 서버의 요청을 데몬에서 처리하는 것이다. 이 또한 프로세스 생성 부하를 줄일 수 있는 방법이다. 파이썬의 경우에는 데몬 방식에도 mod_wsgi 모듈을 사용한다. mod_wsgi모듈은 앞에서 처럼 웹 서버 내장 방식으로도 실행이 가능하고, 별도의 데몬 방식으로 실행 가능하다.

     

    CGI애플리케이션을 별도의 데몬으로 처리하는 방식은 기술이 점차 발전함에 따라 스레드 처리 가 보강되고, 객체지향 기술이 반영되면서 애플리케이션 전용 데몬인 애플리케이션 서버 방식으로 발전하였다. 현재 가장 많이 사용되고 있는 JSP, ASP 기술에서 애플리케이션 서버 방식을 사용하고 있다.

     

    애플리케이션 서버 방식

    웹 서버가 직접 프로그램을 호출하기보다는 웹 애플리케이션 서버를 통해서 간접적으로 웹 애플리케이션 프로그램을 실행한다. 웹 애플리케이션 서버는 애플리케이션 프로그램의 실행 결과를 웹 서버에 전달해주며, 웹 서버는 웹 애플리케이션 서버로부터 전달받은 응답 결과를 웹 클라이언트에 전송한다.

    애플리케이션 서버 방식의 요청 처리

    애플리케이션 서버 방식을 사용하면 각 서버 간 구성도는 다음과 같은 모습이 될 것이다.

    애플리케이션 서버 방식에서의 서버 간 구성도

     

    웹 서버와 웹 애플리케이션 서버가 분리됨에 따라, 서로의 역할도 구분하여 사용하는 것이 좋다. 왜냐하면 정적 페이지를 처리하는 경우에 비해서 동적 페이지를 처리하는 경우가 수배에서 수 십배의 메모리를 소비하기 때문이다. 즉, 정적 페이지 처리에 특화된 웹 서버는 정적 페이지만 처리하고, 웹 애플리케이션 서버는 동적 페이지만 처리하도록 역할을 분담하는 것이 웹 애플리케이션 서버에서 정적 페이지와 동적 페이지를 모두 처리하는 것보다 훨씬 더 많은 요청을 처리할 수 있다.

     

    웹 애플리케이션 서버는 웹 서버보다 기능이 더 추가되었고, 역할도 세분화되었다. 그 이유는 웹 애플리케이션 서버는 웹 서버와의 연동 규격을 잘 따르기만 하면, 임의의 언어 플랫폼을 사용해서 애플리케이션 프로그램을 작성하고 실행시킬 수 있기 때문이다. 자바 계열의 Tmocat, Nginx 및 루비 계열의 Uniconrn, 파이썬 계열의 uWSGI 애플리케이션 서버 등이 대표적인 예가 된다. 대다수의 웹 애플리케이션 서버는 웹 클라이언트로부터 직접 요청을 받아 처리하는 웹 서버의 기능을 제공한다. 하지만 이러한 웹 애플리케이션 서버 내의 웹 서버 기능들이 성능과 안정성 측면에서는 적합하지 않기 때문에 대규모 사이트에서는 잘 사용하지 않는다.

     

    역할 구분

    거의 모든 웹 사이트가 정적 페이지와 동적 페이지를 같이 제공하는 환경에서 웹 서버 또는 웹 애플리케이션 서버 하나만으로 서비스하는 것은 매우 비효율 적이다. 정적 페이지를 처리할 때와 동적 페이지를 처리할 때의 서버 자원 소요량이 다르기 때문이다.

     

    웹 서버와 애플리케이션 서버의 역할과 HW 배치

     

    웹 서버와 웹 애플리케이션 서버 프로그램이 함께 필요하며, 이 두 개의 서버를 동일한 HW 박스에서 기동 시키는 것도 충분히 가능한 구성이다. 서비스 운용 관리 측면에서 하나의 HW 박스에 구성하는 것이 좀 더 간편한 방식이기 때문이다.

    하나의 HW 박스에 웹 서버와 웹 애플리케이션 서버를 모두 탑재하는 것도 가능하지만 HW 박스를 분리하여 구성하면 메모리 효율을 더욱더 높일 수 있다. 정적 페이지를 처리하는 웹 서버 박스와 동적 페이지를 처리하는 웹 애플리케이션 서버 박스 간의 메모리 사이즈 비율을 조절할 수 있기 때문이다. 물론 이를 위해서는 해당 웹 사이트의 트랙픽 중 정적 페이지와 동적 페이지 요청 건수 비율을 분석해야 한다.

     

    반응형

    'Technique > WEB' 카테고리의 다른 글

    URL 설계  (0) 2019.09.16
    HTTP 상태 코드  (0) 2019.09.16
    HTTP 처리 방식  (0) 2019.09.16
    HTTP 프로토콜  (0) 2019.09.16
    웹 프로그래밍  (0) 2019.09.16

    댓글

Designed by Tistory.