아파치와 톰캣 연동 이유
성능상의 이유
JSP/Servlet Engine 상에서 동작하는 Servlet이나 JSP라는, (동일한 HTTP Request를 보내도 매 번 그 결과가 다를 수 있는) 동적인 HTTP Response를 생성해 보내는 것들입니다.
그에 비해 단순한 HTML 문서, image, CSS(Cascading Style Sheet), Javascript file은 거의 변할일이 없는 (동일한 HTTP Request를 보내면 그 결과가 늘 같은)정적 contents입니다.
이런 정적 contents는 통상적으로 Web Server가 JSP/Servlet Engine보다 더 빠르게 service합니다.
결국 정적 content는 정적 contents 처리에 강한 Web Server가 처리하고, 동적 contents는 JSP/Servlet Engine이 맡는 것입니다. 일단 HTTP Request를 Web Server가 먼저 받아보고 정적 contents를 요구하면 자신이 처리하고, 동적 contents request라면 이 request를 JSP/Servlet Engine에게 넘기죠.
아니면 특정 URL pattern이 들어오면 JSP/Servlet Engine으로 넘기는 방법도 있습니다.
결국 이렇게 하면 부수적으로 동적 contents 생성하느라 바쁜 JSP/Servlet Engine에 부하를 덜 줄 수 있고 정적 contents service하느라 귀중한 JVM Heap을 아낄 수 있는 이점도 누릴 수 있습니다.
보안상의 이유
보통 JSP/Servlet Engine은 중요한 업무 절차에 대한 구현을 가지고 있게 마련입니다.
단순한 image, CSS 같은 정적 contents를 담은 Web Server보다 더 안전하게 보호해야 한다는 뜻이 됩니다.
보통 어떤 기업 같은 조직의 network를 구성할 경우 외부 network와 조직의 network를 방화벽(firewall)으로 단절시키고 방화벽에 규칙(rule)을 등록, IP packet이 제한적으로만 그 방화벽을 넘다들 수 있도록 합니다.
안전성이 더 높아야 하는 server들이 있는 network zone은 여기에 한 번 더 방화벽을 칩니다.
그리고 이 두 방화벽 사이의 network zone을 DMZ라고 합니다.
이렇게 Web Server와 JSP/Servlet Engine을 따로따로 쓰면 DMZ에 덜 중요한 data를 가진 web server를 놓고 이중 방화벽 뒤에 있는 network zone에 JSP/Servlet Engine을 놓음으로써 높은 보안성을 획득하면서도 외부에 동적 contents를 제공할 수 있게 됩니다.
가용성 상의 이유
web server도 하나, JSP/Servlet Engine도 하나라면 둘 중 하나만 죽으면 정상적인 service가 불가능합니다.
따라서 절대 멈추면 안되는 service(세계화가 되면서 이런 요구 사항은 더 늘었습니다. 지구 상 어딘가는 늘 업무 시간이니까요)를 담당하는 web server, JSP/Servlet Engine은 두 개 이상을 가동하는 이중화를 적용합니다.
web server가 어떤 HTTP Request를 받아 이를 JSP/Servlet Engine으로 넘기려 할 때 그 JSP/Servlet Engine이 이중화가 되어 있다면 web server는 이 request를 좀 한가한 JSP/Servlet Engine에 넘긴다던지 할 수 있습니다(물론 실제로는 간단하게는 round robin부터 시작해서 이에 대한 여러가지 방법이 있습니다).
내지는 JSP/Servlet Engine 중 하나가 비정상적으로 종료한 상태이면 현재 살아 있는 JSP/Servlet Engine에게 이 request 처리를 위임, 전반적인 service 중단을 막을 수 있습니다.
시작전 준비
2. 미러사이트로 접속합니다.
3. /httpd/binaries/win32 폴더로 들어가 httpd-2.2.22-win32-x86-no_ssl.msi를 다운로드하고, 설치합니다.
4. http://tomcat.apache.org/ 에 접속한뒤, Download에 있는 Tomcat 7.0을 클릭합니다.
5. 32-bit/64-bit Windows Service Installer를 클릭하여 다운로드하고 설치합니다.
tomcat-connectors-1.2.37-windows-i386-httpd-2.2.x.zip
httpd-2.2.21-win32-x86-no_ssl.msi
Apache2.2와 Tomcat 7.0 연동하기
1. Apache와 Tomcat을 연동하려면 Tomcat Connectors(mod_jk)가 필요.
http://tomcat.apache.org/download-connectors.cgi 에서 다운로드 하거나, 첨부파일에 있는것을 사용.
위의 첨부파일의 압축을 풀고 mod_jk.so 를 Apache가 설치된 곳에 있는 modules에 복사.
(Windows x64 : C:\Program Files (x86)\Apache Software Foundation\Apache2.2\modules)
2. Apache2.2\conf\httpd.conf를 수정.
DocumentRoot "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs" 부분을 DocumentRoot "C:/Server" 로 변경.
(C:\Server 폴더를 생성)
<Directory "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs"> 부분을 <Directory "C:/Server">로 변경.
※ 이제 C:\Server가 작업 폴더.
LoadModule jk_module modules/mod_jk.so
# mod_jk.conf
Include conf/mod_jk.conf
도 추가하고 저장.
(만약 접속한 경로에 있는 index.jsp를 자동으로 실행하게 하고 싶다면 <IfModule dir_module>의 DirectoryIndex 부분에 index.jsp를 추가)
3. Apache2.2\conf에 mod_jk.conf 를 생성하고 아래와 같이 입력.
JkWorkersFile "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/conf/workers.properties" JkLogFile "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/logs/mod_jk.log" JkLogLevel error JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " JkRequestLogFormat "%w %V %T" JkMount /* ajp13 JkMount /*.jsp ajp13 JkMount /*.do ajp13 JkMount /servlet/* ajp13 JkMount /url ajp13 JkMount /dita/j_spring_security* ajp13 JkMount /ppspwc/j_spring_security* ajp13 JkMount /mmea/j_spring_security* ajp13 JkMount /irtv/j_spring_security* ajp13
4. Apache2.2\conf에 workers.properties를 생성하고 아래와 같이 입력.
# workers.tomcat_home에는 Tomcat이 설치된 경로를 입력. workers.tomcat_home=C:/Program Files/Apache Software Foundation/Tomcat 7.0 # workers.java_home에는 JDK가 설치된 경로를 입력. workers.java_home=C:/Program Files/Java/jdk1.6.0_45 ps=/ worker.list=ajp13 worker.ajp13.port=8009 worker.ajp13.host=localhost worker.ajp13.type=ajp13 worker.ajp13.lbfactor=1 worker.loadbalancer.type=lb worker.loadbalancer.balanced_workers=ajp13 worker.inprocess.type=jni worker.inprocess.class_path=$(workers.tomcat_home)$(ps)lib$(ps)tomcat.jar worker.inprocess.cmd_line=start worker.inprocess.stdout=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stdout worker.inprocess.stderr=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stder
5. 이제 Tomcat이 설치된 폴더에 있는 conf 폴더로 이동.
(C:\Program Files\Apache Software Foundation\Tomcat 7.0\conf)
conf 폴더에 있는 server.xml 파일을 수정.
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">를
<Host name="localhost" appBase="C:/Server" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">로 변경하고, </Host> 앞에
<Context path="/" docBase="C:/Server" unpackWARs="true" debug="g" reloadble="true" xmlValidation="false" xmlNamespaceAware="false" crossContext="true"></Context>를 추가합니다.
6. Apache와 Tomcat을 리셋.
C:\Server 폴더안에 time.jsp 파일을 만들고 아래와 같이 작성.
time.jsp
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="java.util.Date" %>
<%Date now = new Date();%>
<html>
<body>
<%= now %>
</body>
</html>
7. http://localhost/time.jsp 에 접속.
'JSP > JspServlet' 카테고리의 다른 글
JSP 개요 (0) | 2013.07.29 |
---|---|
연산자 검색 (0) | 2013.07.29 |
달력 (0) | 2013.07.29 |
MVC2 구현예제 (0) | 2013.07.29 |
getParameterValues 처리 (0) | 2013.07.25 |