블로그 이미지
초딩입맛제주아재
하고 싶은 것만 하며 살고 싶다

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
2007. 1. 12. 14:18 Programing/JSP/ASP
출처 : http://cafe.naver.com/bonohemi/35




톰캣과 웹서버(아파치, IIS 등)의 연동 이해하기
웹서버에 tomcat 을 붙일 경우 요청주소의 포트는 동일합니다. 즉 아파치의 포트를 통해서 모든 주소 요청을 받고 아파치에 설치된 연동모듈(mod_jk) 이 jkMount 에 설정된 주소 패턴에 따라 *.jsp , /servlet/* 일 경우 tomcat 으로 요청을 넘겨줍니다.
흔히 잘못 인식하는 것은 apache 는 80 으로 tomcat 은 8080 으로 주소를 달리해서 처리되는 것을 보고 연동된줄 아는데, 이건 각각 따로 노는 것입니다.
또한 아파치에서 jsp의 소스가 보인다함은 연동모듈이 놀면서 직무유기하고 있다는 뜻이거나 제대로 설정이 되있지 않는 것 같군요.
아파치와 톰캣 연동시 패턴에 함정이 있을 수 있습니다.

# Root context
JkMount  / ajp13
JkMount  /* ajp13

와 같이 연동할 경우 아파치에 들어온 주소(URI)중에 / 로 시작되는 모든 자원들이 톰캣으로 보내집니다. 톰캣은 jsp와 서블릿만 처리하는 것이 아니라 html, gif, jpg, css, js 등의 정적인 컨텐츠도 동시에 처리하게 됩니다. 아파치는 계속 모든 요청을 톰캣으로 떠 넘기는 것입니다. 이것은 아파치의 access_log 와 톰캣의 access_log 를 보면 확연히 알 수 있습니다. 연동을 아니함만 못한 경우입니다.

제대로 써 준다면

# Root context
JkMount  /*.jsp ajp13
JkMount  /servlet/* ajp13

과 같이 해주어야 합니다.
서블릿 매핑이 필요한 경우 (스트럿의 경우 .do 라는 패턴을 사용)에는 그 패턴을 추가해주면 됩니다.

JkMount /*.do ajp13

이렇게 되면 톰캣의 access_log 에는 jsp 파일들과 서블릿요청에 대한 로그만 보일 것이고, 제대로 연동이 된 것입니다.

그리고 다음 문제는 저도 여러가지로 생각중인데, 컨텍스트와 연동의 문제입니다.
컨텍스트는 마치 / 의 서브디렉토리처럼 보입니다. 아파치에서는 컨텍스트라는 것을 그냥 하나의 서브디렉토리로 인식합니다. 하지만 톰캣에서는 의미가 다릅니다. 디렉토리도 바뀔수 있고, 세션도 / 컨텍스트와는 다르게 관리됩니다.
이럴 경우 생기는 문제는 정적인 컨텐츠의 위치입니다.
톰캣에서 컨텍스트는 ROOT 와 상관없이 원하는 아무곳에 놓아둘 수 있습니다. 즉 ROOT 의 위치와 완전히 다른 곳에 위치되고, 정적인 컨텐츠도 같은 web application 디렉토리 하부에 위치할 것입니다.
아파치와 톰캣의 루트디렉토리가 일치된 상태에서 다른 컨텍스트의 정적인 자원요청시 아파치는 루트의 서브디렉토리에서 찾을 것이고, jsp 는 다른 컨텍스트의 정해진 위치에서 찾을 것입니다.
여기에서 딜레마에 빠지게 됩니다. 연동을 하지 않고 톰캣만 처리할 경우는 문제가 없지만 아파치랑 연동했을 경우는 전혀 엉뚱한 곳을 가르키기 때문입니다.
그렇다고 위처럼

# Root context
JkMount  /examples/ ajp13
JkMount  /examples/* ajp13

패턴을 사용하면 아까도 말했듯이 연동을 안한 것보다 못한 상황에 이르게 됩니다.
톰캣3에서 톰캣4로 넘어오면서 HTTP 요청을 처리하는 모듈의 성능이 많이 향상되었습니다. 잘 모르시는 분들은 Apache Tomcat 4.0 started 라는 메시지를 보고 아파치와 톰캣이 통합된 줄로 아는 경우도 있습니다만 그 말이 진짜다 싶을 정도로 톰캣의 성능이 카탈리나 엔진에서 많이 좋아졌습니다. 매뉴얼에 보면 아파치와 톰캣을 연동하는 것은 두가지 경우로 돌려본 다음에 빠른 쪽으로 결정하라고 나올 정도입니다. 모두 jsp 로 된 페이지라면 필터를 거치지 않고 바로 오는 쪽이 더 나으니까요.
개발시에는 아파치를 붙이지 않는 편이 훨씬 편합니다. 더군다나 cgi 와 ssi 같은 아파치 고유기능을 톰캣에 추가시키면서 이렇게 얘기합니다.

"톰캣을 HTTP 서버로 사용하고 SSI 지원을 요청할 때 톰캣의 SSI 지원을 추가로 사용할 수 있습니다. 전형적으로 아파치 같은 웹서버를 연동해서 사용하지 않는 개발기간 동안 쓰게 됩니다." (http://jakarta.apache-korea.org/tomcat/tomcat-4.1-doc/ssi-howto.html)

결국 개발기간동안은 아파치 붙여서 번거롭게 개발할 생각말라는 뜻입니다. 서비스시에 아파치랑 연동할 지는 각자의 상황에 따라 다르겠지요.

연동에 관한 좋은 책(professional Apache Tomcat, wrox)이 나왔습니다. 물론 600 페이지 중에 100페이지 정도의 분량이 할애되었을 정도로 중요한 것 같지만 연동을 마쳤다함은 톰캣을 조금 알았다 뿐이고, jsp 를 아는 데에는 하등 도움이 될 것이 없습니다.

'Programing > JSP/ASP' 카테고리의 다른 글

웹 프린터  (0) 2007.05.23
ASP: 동적 include  (1) 2007.05.22
ASP의 가변변수  (1) 2007.04.19
[ASP]php의 exit와 같은 기능을 하는 Response.end  (0) 2007.01.03
posted by 초딩입맛제주아재