출처:http://bsnippet.tistory.com/47
웹 서버와 웹 애플리케이션 서버(WAS)
초기 인터넷 세상에서는 웹 서버 라는 용어로 모든걸 통칭해 사용했지만, 시간이 지나면서 사용자에게 원활한 서비스를 제공하기 위해 기능적인 계층(Layer)를 나누게 되었습니다. 여기서 웹 서버와 웹 애플리케이션 서버와 차이가 생기게 됐다고 보면 됩니다. 그럼 웹 서버와 웹 애플리케이션 서버가 어떤 차이가 있는지 확인해보고, 실제로 각 서버를 이용해 웹 사이트를 구성하는지 알아보겠습니다.
웹 서버 (Web Server)란?
인터넷 상에서 웹 브라우저 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹 페이지들을 보내주는 역할을 하는 프로그램입니다. 간단히 말하면 HTTP 요청에 따라 서버에 저장되어 있는 적절한 웹페이지를 클라이언트에게 전달하는 것입니다. 웹 페이지 뿐만 아니라 그림, 스타일 시트, 자바스크립트도 해당합니다.
주로 서버에 있는 리소스를 전달하는게 주된 기능이기도 하지만, 클라이언트로부터 콘텐츠를 받는 것도 웹 서버 기능에 포함합니다.
웹 서버에는 다음과 같은 종류가 있습니다.
제품명 | 제작사 | 최신 버전 | 라이선스 |
아파치 | Apache 재단 | 2.4.4 | 오픈소스 |
IIS | 마이크로소프트 | 8.0 | 상용(윈도우 서버 사용시 무료) |
nginx | NGINX, Inc | 1.5.1 | 오픈소스 |
GWS | 구글 |
|
|
웹 애플리케이션 서버 (Web Application Server/WAS)란?
인터넷 상에서 HTTP를 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해 주는 미들웨어라고 합니다. 단순하게 WAS라고도 합니다. Servlet, ASP, JSP, PHP 등의 웹 언어로 작성된 웹 애플리케이션을 서버단에서 실행된 후 실행 결과값을 사용자에게 넘겨주게 되고, 우리가 가진 브라우져가 결과를 해석해서 화면에 표시하는 순으로 동작을 합니다.
웹 애플리케이션 서버는 다음과 같은 3가지 기본 기능을 가지고 있습니다.
- 프로그램 실행 환경과 데이터베이스 접속 기능을 제공(JDBC객체를 tomcat이 가지고 있다)
- 여러 개의 트랜잭션을 관리
+nginx처럼 보안의 기능. nginx가 외부에서 오는 (80번포트) 요청을 모두 받고,nginx을 바라보는 웹프로젝트 들에게 다시 포워딩 해주는 기능
+servlet이 내부적으로 가지고 있는 html로부터 신호를 받아 서버쪽으로 송신할 수 있는 request객체, 서버내부에서 서로 데이터를 주고받을 수있는 session객체그외 application객체, pageContext등등의 객체들처럼 등등 처럼 내부의 객체를 통해 서버가 업무를 처리하는 다양한 비즈니스 로직 수행하도록 함
그러나 웹 애플리케이션 서버의 명확한 정의가 존재하지 않아 일부 기능만 가진 웹 애플리케이션 서버도 있습니다. 웹 애플리케이션 서버는 다음과 같은 종류들이 있습니다. 들어본 것들도 있고, 처음 본 것들도 많이 있네요.
제품명 | 제작사 | 최신 버전 | 라이선스 |
제우스 | 한국 티맥스소프트 | 7.C | 상용 |
웹로직 | 미국 오라클 | 10.3.6 | 상용 |
웹스피어 | 미국 IBM | 7.C | 상용 |
레진 | 미국 Caucho | 4.0.7 | 상용 |
글래스피시 | 미국 오라클 | 3.1.2.2 | 오픈소스(CDDL,GPL) |
제이보스 | 미국 레드햇 | 7.1.0.CR1b | 오픈소스(LGPL) |
인터스테이지 | 일본 후지쯔 | 9.0.0 | 상용 |
아파치 톰캣 | Apache 재단 | 7.0.41 | 오픈소스 |
레진(Resin) | Caucho | 4.0 | 상용 |
제이런(Jrun) | Adobe | 4.0 | 상용 |
Winstone Servlet Container | Rick Knowles | 0.9.10 | 오픈소스 |
Jetty | Eclipse 프로젝트 | 3.0 | 오픈소스 |
웹 서버와 웹 어플리케이션 서버의 차이 및 구성
위에서 설명한 각 서버에서 보듯이 기능적인 차이로 구분을 지어 사용합니다. 웹 서버는 정적 데이터를 처리하는 용도로, 웹 애플리케이션 서버는 동적 데이터를 처리하는 용도로 말이지요. 하지만 톰캣의 경우처럼 웹 애플리케이션 서버에 웹 서버 기능을 포함된 서버 프로그램도 존재합니다. 간단히 집에서 웹서버 기능이나 웹 애플리케이션을 이용하고자 한다면 톰캣만 설치해도 됩니다. 반대로 웹 서버에서 내부에 애플리케이션을 동작할 수 있는 기능을 내장하기도 합니다. 간단한 웹 사이트를 구축한다면 웹 서버와 웹 애플리케이션 서버를 구분 지어 사용할 필요가 없습니다. 톰캣 하나만 설치하면 되니까요.
그럼 웹 서버와 웹 애플리케이션 서버를 어떻게 구성해 사용하는지 살펴 보겠습니다.
1. 스위치 - WAS
그림
웹 사이트의 가장 기본적인 구성 환경입니다. 모든 컨텐츠를 WAS에 모아 놓고, WAS가 웹서버와 웹 애플리케이션 서버 역할을 동시에 수행합니다. 트래픽이 많지 않고, 간단한 웹 사이트 서비스를 제공하거나, 개발 및 테스트 시스템 구성시 활용하기도 합니다.
스위치로 로드밸런싱을 하기 때문에 쉽게 다른 WAS를 설치하여, 부하를 분산 시킬 수 있는 장점이 있는 반면에, WAS가 웹서버와 웹 애플리케이션 서버 역할을 동시에 수행하기 때문에 각각의 기능이 다른 기능 수행시 부하를 발생 시킬 수 있기 때문에 성능 저하가 나타날 수 있는 단점을 가지고 있습니다.
2. 스위치 - 웹 서버 - WAS
그림
웹 서버와 WAS의 기능적 분류를 통해 효과적인 분산을 유도한 형태라고 합니다. 정적인 데이터는 웹 서버가, 동적인 데이터는 WAS가 담당하게 함으로써 간단한 1번 구조보다 더 나은 성능을 발휘 합니다.
3. (스위치 - 웹 서버 - WAS) + 이미지를 위한 웹 서버
그림
초고속 인터넷이 발달함에 따라 고화질의 이미지나 동영상을 제공하는 페이지가 증가하고 있습니다. 이러한 페이지는 네트워크 비중의 상당 부분을 차지합니다. 그래서 고화질 이미지나 동영상 데이터 제공을 위한 웹서버를 따로 추가하여, 기존 네트워크 비중도 줄이고, 기존의 웹 서버와 WAS를 좀 더 효율적으로 사용할 수 있도록 하는 구성입니다.
이러한 구조는 다양한 환경의 대한 네트워크 이슈를 좀 더 용이하게 대처할 수 있지만, 구조를 정확하게 이해하지 않았을 경우 개발 및 테스트에 많은 시간이 소요 됩니다.
4. 스위치 - 웹 서버 - WAS(프리젠테이션) - WAS(비즈니스)
그림
이 구조는 2번째 구조를 변경한 형태입니다. WAS단의 프로그램들이 많은 비중을 차지할 때, Presentation Logic을 담당하는 프로그램과 Business Logic을 담당하는 프로그램을 구분하여 각각의 WAS가 처리하도록 분리하는 형태입니다.
이러한 구조는 계층 구조의 부하를 적절히 분산할 수 있는 반면, 구조가 복잡해 유지보수가 어려워지는 단점을 가지고 있습니다.
'C Lang > Web Lang Program Diary' 카테고리의 다른 글
ngrok로 터널열기 (0) | 2018.05.22 |
---|---|
XML Tree(Root element, element, attribute) (0) | 2018.04.05 |
무료 도메인 만들기 (2) | 2018.03.15 |
Web client/server side 프로그래밍 일기 (0) | 2017.12.19 |
How Browsers Work: Behind the scenes of modern web browsers (0) | 2017.12.19 |