안녕하세요. 이번에는 전에 한 번 포스팅 했던 '아파치 톰캣7 따라잡기 Part.1"에서 정리하지 못한 부분을 추가적으로 포스팅하도록 하겠습니다. 책을 정리하는 입장에서 제가 잘 몰랐던 부분이나 필요 부분을 문서화 시키는 작업임에 다소 설명적인 부분이 많이 생략될 수 있음을 이해해주시면 감사하겠습니다. 정리를 시작하도록 하겠습니다.
왜 아파치 HTTP 서버를 사용하는가?# 정적 컨텐츠를 효율적으로 제공톰캣도 정적 컨텐츠를 제공할 수는 있지만 아파치 HTTP 서버에 비해 반응 시간이 느리다.
# 10퍼센트 속도 증가아파치 HTTP 서버는 콤캣과 비교해 10퍼센트 정도 더 효율적으로 정적 컨텐츠를 제공한다. 사용자 부하가 높은 상황에서는 아파치를 통합하는 것이 좋다.
# 클러스터링아파치는 톰캣에 다중 인스턴스 연결을 안정적으로 제공하는 가장 효율적인 서버다.
# 보안아파치는 사용자와 호스트 기반 보안을 제공한다. 톰캣에서도 이 기능을 제공한다. 따라서 우리는 애플리케이션의 요구사항을 고려해 아파치와 톰캣 둘 중 누구의 보안을 활성화할 것인지 결정해야 한다.
# 다중 웹사이트 호스팅아파치 HTTP 서버의 가장 훌륭한 기능 중 하나는 다중 웹사이트 호스팅 기능이다. 다중 웹사이트 호스팅은 톰캣 7에서 처음 선보인 기능으로 http.conf를 이용해 32개가 넘는 가상 호스트를 설정할 수 있다. 32개 이상의 가상 호스트를 설정하려면 virtual.conf 파일을 별도로 만든 다음 http.conf에서 virtual.con를 포함하도록 설정해야 한다. (32개 이상이 아니더라도 virtual.conf 파일을 두어 사용하는 경우도 있음)
아파치 Jserv 프로토콜 (Apache JServ Protocol)Jserv는 평문 텍스트가 아닌 바이너리 형태의 데이터를 네트워크로 전송하도록 개발된 프로토콜이다. Jserv는 TCP와 패킷 기반 프로토콜을 사용하므로 웹 서버 성능이 증가한다. 보통
AJP라 부른다.AJP 프로토콜은 mod_jk와 mod_proxy로 이루어졌다. mod_jk와 mod_proxy는 브라우저를 통해 높은 컨텐츠 응답률을 전송할 때도 도움이 된다.
mod_jkmod_jk는 아파치느 IIS(Internet Information Service) 같은 웹 서버를 톰캣 7과 통합할 때 사용하는 AJP 커넥터다. mod_jk를 설치하지 않으면 톰캣에 프론트엔드 웹 서버를 제공할 수 없다. mod_jk는 프론트엔드 웹 서버 뒤에 톰캣을 숨기고 URL을 접근할 때 포트 번호를 제거하는 데 상당히 유용한 모듈이다.
mod_jk.conf 파일의 세부 정보# 모듈 경로아파치를 시작할 때 모듈을 로드할 위치를 정의한다.EX ) LoadModule jk_module modules/mod_jk.so
# 작업자 파일 경로작업자 파일 위치를 정의한다. 작업자 파일은 톰캣 인스턴스의 IP, 포트, 로드 분산 방법 등의 정보를 포함한다.EX ) JkWorkersFile conf/workers.properties
# 로그 파일로그 파일은 아파치 톰캣 통합 과정이 기록된다. 아파치/톰캣 간의 연결 양호 상태도 기록된다.EX ) JkLogFile logs/mod_jk.log
# URL 매핑URL 매핑은 아파치 컨텍스트 경로, 정의된 URL 요청 재전송 규칙을 정의한다. 다음과 같이 URL 매핑을 설정했다면 사용자가
http://localhost/sample라는 URL을 입력햇을 때 해당 요청을 톰캣 node1으로 재전송한다.EX ) JkMount /sample/* node1
# 로그 수준로그 수준 파라미터는 mod_jk에서 수행하는 다양한 이벤트를 logs가 어떻게 처리할지를 정의한다.EX ) JkLogLevel info
workers.properties의 세부 정보# 노드 이름호스트의 공통 이름worker.list = node1
# 톰캣의 AJP 포트 세부 정보톰캣에서 AJP 요청을 어떤 포트로 수락하는지worker.node1.port = 8009
# 톰캣 호스트 IP톰캣 인스턴스가 실행 중인 IP 주소worker.node1.host = 10.130.240.31
# 사용중인 프로토콜통신에 사용하는 프로토콜. 기본값은 AJPworker.node1.type = ajp13
# 부하 분산 방법라운드 로빈, 연결 지속 등worker.noe1.1bfactor = 1
톰캣 설정커넥터 포트기본적으로 톰캣은 HTTP 프로토콜 8080포트에서 실행된다. 모든 사람이 기본 포트 번호를 알고 있으므로 해커는 쉽게 포트에 접근해 서버 공격을 시도할 수 있다. 따라서 톰캣의 보안상 가능하면 항상 커넥터 포트와 AJP 포트(기본 값 8009)를 바꾸는 것이 좋다.
# 톰캣을 루트 사용자로 실항하는 것은 치명적인 결과를 초래할 수 있다. 따라서 루트가 아닌 새 사용자를 만들고 만든 사용자가 톰캣 서버를 실행할 수 있도록 권한을 부여하는 방식을 이용한다. 루트와 사용자 그룹에서 설정 파일에 접근할 수 있어야 하며, 이 사용자/그룹에 logs 등의 다른 디렉터리의 읽기/쓰기 권한도 줘야 한다.
# 톰캣 7의 SSL 설정 : 데이터 통신을 안전하게 보호하는 방버븡로 SSL(Secure Socket Layer)이 있다. SSL은 안전한 채널을 통해 데이터를 전송하는 암호 프로토콜이다. 서버가 암호키를 클라이언트 브라우저로 전송하면 클라이언트 브라우저가 암호키를 복호화 한 다음 서버오 클라이언트간에 핸드셰이크(handshake)가 이뤄진다. (이를 가리켜 안전 계층에서 두 방향 핸드셰이크가 일어났다고 한다.)언제 톰캿애 SSL이 필요한가?톰캣을 프론트엔드 서버로 사용할 때 SSL을 더 효과적으로 활용할 수 있다. 아파치나 IIS를 사용한다면 아파치나 IIS 서버에 SSL을 설치할 것을 권장한다.
다음은 마지막 톰캣에서 직면하는 문제들에 대한 해결책에 대해 책의 마지막 부분을 정리하도록 하겠습니다.