1. 개념
사용자가 브라우져를 통해 네이버에 접속한다고 한다면, 브라우져 주소표시줄에 http://naver.com 라고 치면 됩니다. 사용자가 브라우져를 통해 네이버에 접속하는 이 행위는 "내가 네이버에 접속해요~" 라고 네이버 서버에 요청하는 행위입니다. 그리고 통상 사용자를 클라이언트라 칭합니다. 즉 클라이언트(사용자)는 서버(네이버서버)에 어떤것을 요청을 하게 되면 서버는 클라이언트의 요청을 받아들입니다. 그리고 서버는 클라이언트의 요청을 해석합니다. 클라이언트가 원하는 Data를 요청한 클라이언트에게 보내고, 클라이언트는 원하는 화면을 볼 수 있게 됩니다. 사용자와 서버, 둘 사이에 통신을 가능하게 하는 프로그램이 바로 브라우져인 것입니다. 브라우져는 사용자가 서버에게 어떠한것은 요청할 수 있게 하고, 서버에서 응답하면 브라우져는 응답받은 Data를 컴파일을 통해 사용자에게 뿌려줍니다. 그리고 이러한 구조를 흔히 CS(Client-Sever)라 부릅니다.
웹서버라는 것은 서버에서 클라이언트의 요청을 기다리고, 요청이 오면 받아들이고, 그 요청의 Data를 보내는 프로그램입니다. 이때 보내는 Data는 정적인 Data(html, css, js, image)로 한정합니다. 정적이라는 것을 쉽게 말하면 접속할 때 마다 변하기 않고 똑같은 Data만 보낸다는 것입니다. (네이버가 정적이라면 네이버 접속할때 마다 똑같은 페이지를 보게되겠죠~?)
그렇다면 동적인 Data를 보내는 서버는 무엇일까요? 그 역할을 하는것이 WAS(Web Application Server)입니다. 통상적으로 컨테이너(Container), 웹컨테이너(Web Container) 혹은 서블릿 컨터에너(Servlet Container)라 부릅니다. 혹은 '와스'라 부르기도 합니다.
하지만 개발자가 아닌 사람들이 보통 일상적으로 말할때, "웹서버, 서버, WAS, 컨테이너, 서블릿" 등등을 구분하지 않고, 그냥 웹서버라 부릅니다. 그래서 처음 이 개념을 접하면 혼동이 올 수 있습니다.
웹서버로 가장 많이 쓰는 프로그램은 Apache사의 Apache, MS의 IIS등이 있습니다. WAS로 많이 쓰는 프로그램은 Apache사의 Apache Tomcat입니다.
2. Apache사의 Apache vs Apache사의 Apache Tomcat
Apache와 Apache Tomcat은 엄연히 다른 프로그램 입니다. 그리고 햇갈리기 쉬운게.... Apache랑 Tomcat 두개 프로그램을 합쳐놓아서 Apache Tomcat이라 부르느냐? 땡! 아닙니다!
Apache Tomcat = Apache + Tomcat X
Tomcat을 그냥 Tomcat 이라고 하면 되지, 왜 사람 햇깔리게 Apache Tomcat이라고 하느냐!? 제가 생각하는 첫번째 이유는, Apache 재단에서 만든 프로젝트 이름이라 Apache Tomcat 붙이고 두번째 이유는 Tomcat에서 Apache의 기능(웹서비스데몬, Httpd)을 포함하고 있기 때문입니다. 하지만 Tomcat이 Apache의 모든기능을 포함하고 있는 것은 아닙니다. 이름때문에 혼동 마시길... 통상적으로 Apache Tomcat을 Tomcat으로 불리고, Apache는 그냥 Apache라 부릅니다.
Apache Tomcat = Tomcat의 WAS기능 + Apache의 웹서비스데몬기능
3. 성능향상을 위해 서비스 할 때 둘 다 설치를 해서, Apache는 웹서버 역할을 하게하고 Tomcat은 WAS 역할을 하게 한다는데여?
많이들 그렇게 쓰시지만 '성능향상이 된다' 라는 명제의 결론부터 말씀드리면 땡! 틀렸습니다. 그건 쌍팔년도 시대의 말이고, 똑똑한 아파치 개발자 형들이 업그레이드를 시켜놓아서 웹서버로 Tomcat 하나만 설치하여도 성능에 큰 차이가 없다 합니다. 토비님의 글을 보면 톰캣 5.5부터 Httpd의 native 모듈을 사용하기 때문에 동적인 페이지 뿐만 아니라, 정적페이지또한 처리가 가능해졌다고 합니다. 그리고 똑같은 엔진을 사용하기 때문에 성능상의 차이가 없다고 합니다.
'HTML > About Web' 카테고리의 다른 글
HTTPD (HyperText Transfer Protocol Daemon)란? (1) | 2013.04.11 |
---|---|
Connection Pooling (0) | 2012.04.13 |
CGI(Common Gateway Interface)와 Servlet (0) | 2012.04.09 |
서블릿(Servlet)이란? (0) | 2012.04.06 |