Apache? Tomcat?

Apache?

Apache는 아파치 소프트웨어 재단에서 관리하는 HTTP(HyperText Transfer Protocol) 웹 서버이다. BSD, 리눅스 등 유닉스 계열뿐만 아니라 윈도우나 노벨 넛웨어? 같은 기종에서도 운융할 수 있다고 한다.

  • 리눅스 운영체제, 아파치 웹 서버, MYSQL DB, PHP 등으로 웹 서버를 운영하는 것을 각각의 머릿글자를 따서 LAMP라고 부르기도 한다.
  • Tomcat, Resin등의 웹 애플리케이션 서버에서 사용할 수 있다.
  • Open-SSL, Mod-SSL을 설치하여 보안을 강화할 수 있다. (http -> https : s는 security)

Default Port : 80


웹 서버(Web Server)

쉽게 말하면 웹 서버는 웹 서비스를 제공하는 컴퓨터이다. 이러한 웹 서버에 접속하기 위해서 필요한 도구가 바로 인터넷 익스플로러(IE)크롬(Chrome)과 같은 웹 브라우져이다.

우리가 www.nhnent.com이라고 브라우저에 입력하면 웹 브라우저는 이 주소에 해당하는 웹 서버에 가서 서비스를 달라고 요청한다. 그리고 그 요청을 받은 웹 서버는 클라이언트에게 서비스를 제공해주는 것이다.

그리고 그 앞에 붙는 http://를 통해 어떠한 프로토콜(http, ftp)로 서비스를 주고받을지를 명시해주는 것이다.



Tomcat?

Tomcat은 마찬가지로 아파치 소프트웨어 재단의 애플리케이션 서버로 자바 서블릿(Servlet)을 실행시키고 JSP코드가 포함되어 있는 웹 페이지를 보여준다.

주로 Tomcat웹 서버Apache에서 넘어오는 동적인 페이지를 읽어들여 프로그램을 실행하고 그 결과를 다시 HTML로 재구성하여 Apache에게 되돌려 준다.

Tomcat을 실행시키기 위해서는 JRE 1.1 이상에 부합되는 JAVA Runtime 환경이 필요하다.

Default Port : 8080


웹 애플리케이션 서버(WAS)

WAS(Web Application Server)는 인터넷 상에서 HTTP를 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해 주는 미들웨어(소프트웨어 엔진)이다.

WAS웹 서버웹 컨테이너의 결합으로 다양한 기능을 웹 컨테이너에 구현하여 다양한 역할을 수행 할 수 있는 서버를 말한다.(웹 컨테이너는 클라이언트의 요청이 있을 때 내부의 프로그램을 통해 결과를 만들어내고 이것을 다시 클라이언트에 전달해주는 역할을 하는 것을 말한다)

WAS는 동적인 서버 컨텐츠를 수행하는 것으로 일반적인 웹 서버와 구별되며, 주로 데이터베이스 서버와 같이 수행이 된다. 또한 WAS는 웹 기반 분산 시스템 개발을 쉽게 도와주고 안정적인 트랜잭션 처리를 보장 해준다.


WAS의 종류


WAS 명 제조 회사 특징
Tomcat Apache Servlet Container
JEUS Tmax Servlet Container, EJB Container
Weblogic BEA -> Oracle Servlet Container, EJB Container
Sebsphere IBM Servlet Container, EJB Container
Resin CAUCHO Servlet Container
IIS Microsoft Java WAS가 아님



전체 구조

2016-02-21 01;25;57.PNG

웹 서버웹 애플리케이션 서버를 따로 두고 사용하는 이유는 목적이 다르기 때문이다.

웹 서버는 정적인 데이터(이미지, 단순 html파일)를 처리하는 서버이다. 정적 데이터는 웹 서버를 통하면 더욱 빠르고 안정적으로 처리할 수 있다.

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

따라서 사용자의 요청을 HTTP 웹 서버로 받고 내부적인 프로그램은 WAS를 통해 처리하는 방식을 사용하면 동적인 데이터와 정적인 데이터를 효과적으로 처리할 수 있다.




반드시 Apache와 Tomcat을 같이 써야하는가?

정답은 No! 아래 토비님이 작성한 글을 읽어보자.

1
2
3
4
5
6
7
8
9
10
11
 많은 개발자들이 애플리케이션 서버로 톰캣을 사용하는 경우에 스태틱 파일(html, css, js, 이미지)은 톰캣 앞에 아파치 웹 서버(Httpd)를 두어서 처리하게 하는 것이 좋다고 생각한다. 외부의 요청은 일단 Apache Httpd가 받고, 톰캣 내에서 처리할 자바 애플리케이션만 톰캣으로 다시 전달해서 처리하고 그 외의 리소스는 Apache Httpd가 직접 처리하게 만들어야 성능이 좋다고 생각한다. 자바로 만든 서버인 톰캣은 스태틱 파일 처리에서 Apache Httpd만 못하다는 것이 그 이유다.
 
하지만 톰캣과 Httpd의 개발자에 따르면 이는 개발자들이 잘못 알고 있는 미신이다. 아직도 톰캣 3를 사용하고 있는 것이 아니라면 말이다.

  자세한 내용은 Myth or truth: one should always use Apache httpd in front of Apache Tomcat to improve performance?에 잘 나와있다. 지금은 스프링 소스의 직원이 된 아파치 톰캣과 Httpd 의 핵심 개발자들이 직접 작성한 내용이다.
  
톰캣은 5.5부터 Httpd의 native 모듈을 사용해서 스태틱 파일을 처리하는 기능을 제공한다. 이 경우 Httpd와 톰캣이 같은 모듈을 사용하는 셈이니 성능에서 차이가 날 이유가 없다. 실제 테스트 한 결과를 봐도 톰캣에서 아파치 Native 모듈을 사용하는 것이 순수하게 아파치 Httpd만 사용하는 것과 비교해서 성능이 전혀 떨어지지 않는다.

  따라서 단지 스태틱 파일 처리의 성능만을 위해서라면 굳이 톰캣 앞에 Apache Httpd를 두는 것은 불필요하다. 오히려 메모리만 많이 먹고, 관리부담은 커지고, 불필요한 부하만 걸릴 뿐이다.
  
  물론 Httpd의 다른 기능이나 모듈을 사용해야 할 필요가 있다면 그때는 Httpd를 앞에 두고 사용해야겠지만. 예를 들어 하나의 서버에서 PHP 애플리케이션과 자바 애플리케이션을 함께 사용하거나, Httpd 서버를 간단한 로드밸런싱을 위해서 사용해야 하는 경우라면 Httpd를 앞에 두고 톰캣을 연결해서 사용하도록 하면 될 것이다.


참고로 Local 환경에서 개발을 하는 경우에는 Tomcat만을 설치해서 진행하는 경우가 있는데 이는 Tomcat의 기능 중 Apache의 웹 서비스 데몬 기능이 포함되어 있기 때문이다.

성능 때문에 ApacheTomcat을 같이 사용하는 것이 아님! 기능상의 필요에 의해서 같이 사용하는 것이 주된 이유!