상세 컨텐츠

본문 제목

WAS(Web Application Server) 와 WEB SERVER 그리고 CGI

JSP

by oimb 2018. 9. 6. 23:38

본문


 서블릿을 공부하면서 WAS , Web Server , Web Container 라는 용어가 나와서 정의를 확실하게 하기 위해 조사 해밨다.



was구조

이미지출처 : http://gap85.tistory.com/45


JSP를 공부하다 보면 아파치 톰캣 서버 라는 용어가 나온다. 이를 이해 하기 위서라도 용어 정리는 필요하다.


먼저 웹 서버란 무엇인지 알아보자.


웹서버    


아파치 톰캣에서 아파치에 해당된다.  

웹서버는 웹브라우저(클라이언트)로 부터 HTTP 요청을 받아 이를 HTML 문서 와 같은 정적 페이지로 처리해

반환 하는 프로그램이다.  이외에도 인증 , 정적컨텐츠 관리 , HTTPS 지원 , 압축 , 가상 호스팅 , 대용량 파일 지원 , 대역폭 스로틀링 등의 기능을 지원

한다.


종류로는  아파치 ,  엔터 프라이즈 서버 등이 있다.


이 웹서버를 사용하면 얻는 장점이 있는데 이는 이후에 설명할 WAS만으로 모든 서비스를 제공하지 않는 이유중 하나 이기도 하다.

웹 서버는 정적인 데이터를 처리하는 서버이다.  단순 HTML파일과 같은 리소스를 제공하는데에 있어 WAS를 이용하는것 보다. 빠르며 안정적이다.

(WAS는 동적 페이지도 처리 해야 한다는 점에 있어서 부하가 걸려 느려질 수 있고 , 또 DB를 통한 데이터 이동 및 동적으로 데이터를 처리 하기 때문에 상대적 안정감이 떨어진다.)



WAS(Web Application Server)


아파치 톰캣의 톰캣을 말한다. 정확히는 was 내부의 컨테이너를 말한다. 

WAS는 웹서버와 웹 컨테이너의 결합으로 다양한 기능이 웹컨테이너에 구현 되어져 있다

클라이언트의 요청이 있을 때 이를 받아 데이터를 처리하여 다시 클라이언틀에게 전달 해준다(미들웨어). 여기서 동적으로 데이터를 처리한다는 점이 웹서버와의 차이 라고 할 수 있겠다.  

동적으로 데이터를 처리하는 곳이 바로 웹 컨테이너 인데 웹 컨테이너는 JSP와 서블릿에 대한 요청을 다루는 소프트웨어라고 생각하면된다. 예로 아파치 톰캣이 있다.

여기서 톰캣은 was 아닌가?라는 의문이 들수 있다. 맞는 말이다. 웹컨테이너라는 말보다는 통합적으로 포함하고있는 was라는 표현을 더 주로 쓰기 때문에 was의 예로 아파치 톰캣을 들수 있다고 생각하면 된다.


주로 데이터베이스 서버와 같이 서비스를 수행하며 J2EE 스펙을 구현한 서버로 분산 트랜잭션, 보안 , 메시징 , 쓰레드 처리 등의 기능을 처리하는 분산환경 에서 사용되는 미들웨어로서 사용된다.


종류로는 Tomcat , JBoss , jeus , Web Logic 이 있다.


이 둘을 분리해서 사용하는 이유?


이 둘을 분리 함 으로써 목적을 분리 시킬 수 있으며 앞서 말한 웹 서버의 장점 등이 있지만 

가장 큰 이유는 웹 서버와 WAS의 기능 및 수행을 각각 분배 하여 서버의 부담을 줄이기 위한것 이다.  이로 인해 정적및 동적 데이터 처리를 위해 지연 되는 시간이 줄어 들어 효과적으로 빠르게 서비스를 수행 할 수 있게하는 것이다.




CGI(Common Gateway Interface) 방식과  Application Server 방식





CGI(Common Gateway Interface)

과거의 웹 어플리케이션 구동방식이다. 사실 나는 과거라는 말을 듣고 구닥다리 라는 생각이 들었다 하지만 그게 아니었다. 일단 CGI가 무엇인지 소개부터 하겠다.


앞서 말했듯이 웹서버는 정적인 데이터를 처리한다고 했다. 즉 미리준비된 정보를 클라이언트의 요구에 응답해 보내는 것이다.

즉 정보를 동적으로 생성해서 클라이언트에게 보내는것은 불가능 했다. 따라서 웹서버가 다른 프로그램을 불러내고 , 그 처리 결과를 클라이언트에 송신하는

방법이 고안되었다. 그리고 이를 실현하기 위한 서버 프로그램과 외부 프로그램과의 연계법을 정한 것이 CGI이다.

이는 외부 프로그램을 사용하기 떄문에 요청이 올때마다 process를 계속 생성하는 특징이 있다.

PHP가 이것의 예인데 

가볍고 빠르고 단순하기 때문에 유지보수에 좋다는 장점이 있지만 동일한 URL을 실행한다고 해도 프로세스가 계속 증가하기 때문에 서버에 부담을 많이준다는 단점이

있다. 또 프로세서간 데이터 교환의 제약에 있어 구현해야 하는 어려움이 있다.


Application Server (서블릿 방식)


정적 데이터만이 아닌 동적인 데이터를 응답할 수있으며 CGI의 비효율적인  특징을 보완하는 방식이다. 이 방식은 CGI와 다르게 동일한 프로그램을 요청하면 하나의프로그램만 수행시키기 때문에 효율적이다. 

이러한 방식은 서블릿 방식인데 여기서 서블릿이란 요청과 응답기반의 서비스(로직)가 내장되어 있는 자바기반 모듈이다.

이 서블릿 방식은 JVM을 기반으로 다중 쓰레드 상에서 동작시킨다. 즉 하나의 프로세스를 이용한다는것이다.  JSP가 대표적인 예이다.

이러한 점들 때문에


CGI 방식에 비하여 상당히 효율적이며 동시에 더많은 웹 브라우저의 요청을 처리할 수 있다는 것을 의미한다. 이는 곧 안정적인 웹 서비스를 제공한다는 것이다.



컴파일 코드 방식과 스크립트 방식



컴파일 코드 방식


종류로는 CGI 관련 프로그램인 Perl,C,C++ 가 있으며 컴파일된 기계어코드 또는 바이트 코드형태이다.

컴파일 방법은 코드 구현 이후 컴파일과정을 직접 수행해야한다. 따라서 코드 변경시 코드를 직접 다시 재컴파일 해야한다.


스크립트 방식

JSP  , ASP 가 예이며 

컴파일되기 전 스크립트 코드를 말한다. 코드 구현 이후 컴파일 과정은 웹 요청 시 자동으로 수행된다.

스크립트 내에서 코드를 수정만 하면 되며 재컴파일은 요청시 자동으로 수행된다.



무엇이 더 빠른가?


스크립트 방식이 더욱 빠르다. 왜냐하면 앞서 말했듯이 CGI 방식은 같은 프로그램이 더라도 프로세스가 증가하기 때문에 또 컴파일 해야한다.

하지만 어플리케이션 서버 방식은 한번 컴파일하고 나면 이후 요청에 대해서는 앞서 컴파일한것을 재 실행하기 때문에 컴파일 횟수가 최소화가 되기 때문이다.






관련글 더보기