본문으로 바로가기

Tomcat & Apache

category Dev Environment/개발 환경 2016. 2. 29. 09:01

톰캣과 아파치의 역할

사용자가 브라우져를 통해 네이버에 접속하려면 브라우져 주소표시줄에 http://naver.com 라고 입력하고 실행하게 됩니다.  

사용자가 브라우져를 통해 네이버에 접속하는 이 행위는 "내가 네이버에 접속합니다" 라고 네이버 서버에 요청하는 행위입니다. 그리고 통상 사용자를 클라이언트라 칭합니다. 

즉 , 클라이언트(사용자)는 서버(네이버서버)에 어떤것을 요청을 하게 되면 서버는 클라이언트의 요청을 받아들입니다. 그리고 서버는 클라이언트의 요청을 해석합니다. 

클라이언트가 원하는 Data를 요청한 클라이언트에게 보내고, 클라이언트는 원하는 화면을 볼 수 있게 됩니다. 

이렇게 사용자와 서버, 둘 사이에 통신을 가능하게 하는 프로그램이 바로 브라우저(Browser)인 것입니다. 

브라우져는 사용자가 서버에게 어떠한것은 요청할 수 있게 하고, 서버에서 응답하면 브라우져는 응답받은 Data를 컴파일을 통해 사용자에게 전송하게 됩니다. 

그리고 이러한 구조를 흔히 CS(Client-Sever)라 부릅니다. 

웹 서버(Web Server)라는 것은 서버에서 클라이언트의 요청을 기다리고, 요청이 오면 받아들이고, 그 요청의 Data를 보내는 프로그램입니다. 

이때 보내는 Data는 정적인 Data(html, css, js, image)로 한정합니다. 

정적(static)이라는 것을 간단히 말하면 접속할 때 마다 변하지 않고 똑같은 Data만 보낸다는 것입니다. 만약에 네이버가 정적이라면 네이버는 접속할 때 마다 똑같은 페이지를 보이게 될 것입니다. 

그렇다면 동적(dynamic)인 Data를 보내는 서버는 무엇일까요? 

그 역할을 하는것이 WAS(Web Application Server)입니다. 

통상적으로 컨테이너(Container), 웹컨테이너(Web Container) 또는 서블릿 컨터이너(Servlet Container)라 부릅니다. 혹은 '와스'라 부르기도 합니다. 

하지만 개발자가 아닌 사람들이 보통 일상적으로 말할 때, "웹서버, 서버, WAS, 컨테이너, 서블릿" 등을 구분하지 않고, 통틀어 웹 서버라 부르고 있습니다.  그래서 처음 이 개념을 접하면 혼동을 가져올 있습니다. 

웹 서버로 가장 많이 쓰는 프로그램은 Apache재단의 Apache, MS의 IIS등이 있습니다. 

그리고 WAS(Web Application Server)로 많이 쓰는 프로그램은 Apache재단의 Apache Tomcat입니다.




Apache재단의 Apache vs Apache재단의 Apache Tomcat

Apache와 Apache Tomcat은 서로 다른 프로그램 입니다. 

그리고 혼동하기 쉬운 것이 Apache와 Tomcat 두개 프로그램을 합쳐 놓은 것이 Apache Tomcat이라고 하는가?!

그것은 아닙니다! 

Apache Tomcat = Apache + Tomcat 이 아니라면 Tomcat을 그냥 Tomcat 이라고 부르지 않을까요?

첫번째 이유는, Apache 재단에서 만든 프로젝트 명칭이 Apache Tomcat이라고 했으며 두번째 이유는 Tomcat에서 Apache의 기능(웹서비스데몬, Httpd)을 포함하고 있기 때문입니다. 

하지만 Tomcat이 Apache의 모든기능을 포함하고 있는 것은 아닙니다. 

일반적으로 Apache Tomcat을 Tomcat 이라고 부르고, Apache는 그냥 Apache라 말하고 있습니다.

좀 더 자세히 알아보겠습니다.


apache 란?

apach란 것은 소프트웨어 단체 이름입니다. 

그리고 우리가 흔히 부르는 아파치서버라는 것은 이제단에서 후원하는 오픈소프 프로젝트 커뮤니티에서 만든 http 웹서버를 지칭하는 말입니다. (아파치 프로젝트는 웹서버 외에도 여러가지 프로젝트를 진행하고 있다고 합니다) 

http 웹서버는 http 요청을 처리할 수 있는 웹 서버이고, 아파치 http서버는 http 요청을 처리하는 웹서버인 것입니다. 

다시말해, 클라이언트가 GET, POST, DELETE 등등의 메소드를 이용해 요청을 하면 이 프로그램이 어떤 결과를 돌려주는 기능을 하고 아파치는 웹 서버입니다.


tomcat 이란?

tomcat은 흔히 WAS(Web Application Server)라고 말합니다. 

WAS는 웹 서버와 웹 컨테이너의 결합으로 다양한 기능을 컨테이너에 구현하여 다양한 역할을 수행할 수 있는 서버를 말합니다. 

클라이언트의 요청이 있을 때 내부의 프로그램을 통해 결과를 만들어내고 이것을 다시 클라이언트에 전달해주는 역할을 하는 것이 바로 웹 컨테이너입니다. 

앞에서 본 아파치 웹 서버와 차이는 이 컨테이너 기능이 가능을 하느냐 하지 않느냐의 차이가 가장 크다고 생각합니다.



아파치와 톰캣(=아파치 톰캣)의 차이점

그렇다면 WAS만 쓰면 되지 어째서 웹서버를 따로 쓰느냐는 의문이 생길 수 있습니다. 

그 이유는 목적이 다르기 때문입니다. 웹 서버는 정적인 데이터를 처리하는 서버입니다.  이미지나 단순 html 파일과 같은 리소스를 제공하는 서버는 웹 서버를 통하면 WAS를 이용하는 것보다 빠르고 안정적입니다.

그리고 WAS는 동적인 데이터를 처리하는 서버입니다. 즉, DB와 연결되어 데이터를 주고 받거나 프로그램으로 데이터 조작이 필요한 경우에는 WAS를 활용 해야 합니다.


성능향상을 위해 서비스 할 때 둘 다 설치해야 하는가?

Apache는 웹서버 역할을 하게하고 Tomcat은 WAS 역할을 하게 한다고 하여 둘다 사용하는 경우가 적지 않지만 '성능향상이 된다' 라는 명제의 결론은 그렇지 않다는 것입니다. 

그건 이미 오래전 일이고, 스마트한 아파치 개발자들이 업그레이드를 시켜놓아서 웹 서버로 Tomcat 하나만 설치하여도 성능에 큰 차이가 없다고 합니다. 

톰캣 5.5부터 Httpd의 native 모듈을 사용하기 때문에 동적인 페이지 뿐만 아니라, 정적 페이지또한 처리가 가능해졌다고 합니다. 그리고 똑같은 엔진을 사용하기 때문에 성능상의 차이가 없다고 합니다. 




아파치와 톰캣의 연동

톰캣과 아파치를 연동한다는 것은 크게 대단한 것은 아닙니다. 

먼저 아파치가 대기하고 있다가 서블릿 요청이 들어오면 톰캣에게 던져줄 뿐입니다. 

포트(Port) 또한 8080인 이유는 다른 웹서버와의 충돌을 방지하기 위한 설정일뿐 크게 중요한 것은  아니며, 얼마든지 기본 80포트로도 잡을 수 있습니다.

  • 톰캣과 아파치를 연결하면 html은 아파치로 jsp는 아파치가 톰캣한테 전송한다.
  • 특별히 웹 서비스를 할 것이 아니라면 특별히 연동할 필요는 없다.


사실 톰켓 자체에 웹 서버 기능이 내장되어있기 떄문에 톰캣만 사용하더라도 JSP가 실행되는 웹 서버를 구성할 수 있습니다. 

하지만 보통은 톰켓에 아파치를 연동하는데, 그 이유는 톰켓의 웹 서버 기능은 아주 기본적인 기능만 하기 때문에 아파치와 연동하여 아파치가 가지고 있는 다양한 웹 서버 기능을 이용하기 위함입니다.


톰캣은 JSP/서블릿 컨테이너 중에 하나로서, 사용자에게 JSP요청을 받으면 서블릿으로 바꾸어 이를 실행하는 역할을 합니다. (그리고 서블릿 요청을 받으면 이를 실행을 한다.) 쉽게 말하여 JSP페이지를 웹 서버에 요청을 하면 이 페이지를 해석하고 실행하는 역할을 하는 것입니다. 

더 쉽게 말하면, 웹 서버에 있는 JSP문서를 실행시키면 이를 작동하는 것이 톰캣이라고 보면 될 것입니다.

그리고 아파치는 웹 서버로서 사용자의 요청을 받아 처리를 합니다. 아파치가 요청을 받은 것이 JSP문서 또는 서블릿이라고 한다면 이를 톰켓으로 전송하게 되는 것입니다

JSP 코딩시에는 톰캣만 이용하여 충분히 가능하지만 톰캣의 웹 서버는 기능도 적고 많은 사용자가 요구를 할 때 부하가 많이 걸립니다. 

따라서 일반적인 목적 (JSP를 실행하는 웹 서버)에서는 아파치를 웹 서버로 이용하고 단지 톰켓은 JSP/서블릿 컨테이너 기능만 수행하게 하여 이용을 하는 것입니다.


결론 : 톰캣을 설치하는 이유

아파치는 JSP를 처리를 못하기 때문에 JSP를 받아서 톰캣에서 처리하고 다시 아파치로 넘겨주는 그런 작업을 하는것이다!


아파치의 기본 포트는 80 이고 톰캣의 기본 포트는 8080 입니다. 이렇게 아파치와 톰캣의 기본포트가 다른 것은 아파치와 톰캣이 연동되어 있지 않은 경우입니다.

클라이언트가 80포트로 요청을 보내면 아파치가 응답해 줄것이고, 8080포트로 요청을 보내면 톰캣이 응답해 줄 것입니다.

아파치와 톰캣을 연동했을 경우에는 기본적으로 80포트로 요청을 받아들입니다. 현재 호스팅 받고 있는 도메인으로 8080 요청을 보냈으나 '페이지를 표시할 수 없음'메시지를 보내온다면, 아파치와 톰캣을 연동한 후에는 8080 포트를 사용할 수 없거나 호스팅 업체에서 설정을 변경했기 때문일 것입니다.

실제 서비스시 모든 요청은 80포트를 통하기 때문에 8080포트는 신경쓰지 않아도 될 것입니다.

클라이언트가 요청한 정보가 정적인 페이지일 경우 아파치가 직접 처리후 응답을 보내게 되고 동적인 페이지일 경우 톰캣에게 요청을 넘겨서 톰캣이 처리후 정적인 페이지를 아파치에 전달하게 됩니다. 

아파치는 정적인 페이지를 80포트를 통해서 클라이언트에게 보내는 것입니다.



Jaehee's e-room