Category: Tomcat

Tomcat 글을 모아놓은 카테고리

Tomcat Multi Instance 설정하기

Tomcat 7 서버는 Multi Instance 라는 기능을 가지고 있습니다. 하나의 엔진에 다수의 Instance 를 구동하게하는 것을 말합니다.

Tomcat 7 용어 정리

Tomcat Multi Instance 설정하기 전에 용어를 설명하겠습니다. Tomcat 은 엔진과 인스턴스(Intance) 로 나뉩니다. 이는 디렉토리별로 구분이 가능한데, 엔진부분과 인스턴스 부분의 디렉토리는 다음과 같습니다.

  • Tomcat Engine 부분: bin, lib
  • Tomcat Instance 부분: conf, logs, temp, work, webapps

사실 Tomcat 을 다운받아 압축을 해제하면 엔진부분과 인스턴스부분이 함께 들어 있기 때문에 별 구별이 안되는 측면이 있지만 엄밀히 따지면 위와같이 구분을 할 수 있습니다.

사실 Tomcat 엔진은 아무것도 아닙니다. Tomcat 엔진은 실제로 단독으로 구동되지 않습니다. Tomcat 엔진의 역활은 자바 소프트웨어를 실행시켜주는 역활만 담당합니다. 여기서 자바 소프트웨어라는 것이 바로 Tomcat 인스턴스 입니다.

Tomcat 엔진이 자바 소프트웨어를 실행시킨다는 말은 결국에는 JVM 이 작동하는 것입니다. 따라서 Tomcat 인스턴스는 JVM 이 구동된다는 것이며 Multi Instance 는 여러개의 Tomcat JVM 을 구동한다는 것을 의미 합니다.

Tomcat 구동

Tomcat  이 구동될때에는 시스템 환경변수에 의존 합니다.  bin/startup.sh 스크립트는 Tomcat 을 구동되도록하는 스크립트인데, 이 스크립트는 환경변수를 세팅하고 catalina.sh 스크립트를 호출하는 역활을 합니다. 실제 실행하면 환경변수내용을 볼수 있습니다.

먼저, Tomcat 엔진은 CATALINA_HOME 환경변수만 세팅합니다. 이는 Tomcat 엔진의 기본 디렉토리를 정의하는 것으로 Tomcat 의 바이너리 파일과 라이브러리가 어디에 있는지를 지정해 주는 것입니다.

CATALINA_BASE 는 Tomcat 인스턴스의 설정과 웹애플리케이션의 루트(Root) 디렉토리를 정의 합니다. CATALINA_BASE 가 Tomcat  인스턴스에 대한 환경변수이기 때문에 Tomcat 인스턴스 디렉토리인 conf, logs, temp, work, webapps 에 대한 디렉토리를 정의하는 것과 같습니다. 이는 다시 말해서 Tomcat 에서 실행시킬 자바 웹 소프트웨어의 루트 디렉토리를 지정하는 것이다라고 말 수 있습니다.

그렇다면 CTALINA_BASE 를 다르게하면 하나의 Tomcat 엔진에서 여러개의 인스턴스를 구동할 수 있다는 것이 됩니다.

Multi Instance 만들기

이 포스트에서는 다음과 같이 해보도록 하겠습니다.

  • Tomcat Engine : /opt/tomcat-7
  • Tomcat Instance: 리눅스의 시스템 계정을 만들고 자바 웹 애플리케이션 디렉토리 생성.

먼저 Tomcat Engine 을 설치해줍니다.

Tomcat Instance 를 위한 시스템 계정을 생성해 줍니다. 계정을 생성할때는 먼저 시스템 그룹을 생성하고 Tomcat 시스템 계정은 전부 이 시스템 그룹에 등록하는 방법으로 생성 합니다.

그리고 다음과 같이 Tomcat Instance 관련 파일들을 전부 복사해 줍니다.

각각의 Tomcat Instance 는 각각의 자바 웹 애플리케이션들이기 때문에 서로 가진 설정들에서 포트(port)를 변경해줍니다. Tomcat 의 포트는 다음과 같은 것들이 있습니다.

  • Shutdown port: 이 포트는 톰캣을 셧다운하는데 사용되어 집니다. shutdown.sh 스크립트가 호출되면 이 포트로 시그널(Signal)을 보냅니다. 이 포트는 Tomcat 자바 프로세스로 리스닝되고 있습니다. 만약 시그널을 받으면, 프로세스는 종료됩니다.
  • Connector port: 이 포트는 외부 클라이언트에게 애플리케이션을 보여주기위한 실제적인 포트 입니다.
  • Ajp port: 이 포트는 웹 서버가 Tomcat 과 커뮤니케이션을 위해서 사용되어 집니다. 또, 이 포트는 로드 밸런스 서버를 세팅할때에도 사용되어 집니다.
  • Redirect port: SSL 접속 요청이 들어올경우에 Catalina 는 자동적으로 이 포트로 redirect 합니다.

각각의 Tomcat Instance 는 위에서 나열한 포트들이 중복되지 않도록 설정해 줍니다. 이 설정은 각 인스턴스의 server.xml 파일에 정의되어 있습니다.

start.sh, shutdown.sh

각각의 인스턴스들에 대해서 start.sh, shutdown.sh 를 다음과 같이 만들어 줍니다.

‘INSTANCE_OWNER’ 환경변수에 인스턴스 계정명을 알맞게 넣고 작성해주면 됩니다.

그리고 이 스크립트를 실행하면 각각의 인스턴스들이 실행이 됩니다.

Tomcat 7 구조

이 문서는 Tomcat 7  구조 (Architecture) 에 관한 것입니다. 많은 부분을 “Apache Tomcat 7 More about the Cat” 을 참고 했습니다.

Tomcat 7 의 구조는 계층적 구조를 보이며 계층적으로 상속관계에 있습니다. 이를 다이어그램으로 표시하면 다음과 같습니다.

Tomcat Architecture
출처: http://www.ntu.edu.sg/home/ehchua/programming/howto/Tomcat_More.html

이 구조는 Tomcat 의 설정 파일에서도 그대로 나타납니다.

Tomcat 7 디렉토리 구조.

  • bin: Tomcat 의 바이너리 및 스크립트들.
  • conf: 모든 webapp 에 적용되는 글로벌 설정들.
  • lib: 모든 webapp 에서 활용가능한 JAR-file 들. 기본적으로 servlet-api.jar(Servlet), jasper.jar(JSP), jasper-el.jar(EL).
  • logs: 서버 로그 파일들이 있는 디렉토리. Catalina.{yyyy-mm-dd}}.log 는 엔진의 로그이며 localhost.{yyyy-mm-dd}.log 는 호스트 로그.
  • webapps: 디폴트 webapp
  • work: Tomcat 의 java 소스를 컴파일한 class 파일들을 모아놓은 디렉토리.
  • temp: 임시 파일들을  위한 디렉토리.

여기서 중요한 디렉토리는 conf 디렉토리로 Tomcat 의 운영과 webapp 에 영향을 주는 파일들로 총 7개가 있습니다.

  • catalina.policy : 이 파일은 Tomcat 7 에 대한 보안정책권한(Security Policy Permissions)들을 기술해 놓은 것입니다. 이것은 JVM 에 의해서 웹 애플리케이션에 강제적으로 보안정첵권한을 적용 합니다.
  • catalina.properties: 이 파일은 서버가 시작될때에 스캔되어질 필요가 있는 공유할 서버 정의, 공유할 로더, JARs를 가지고 있습니다.
  • server.xml: Tomcat 에서 매우 중요한 파일중 하나인데 서버의 IP 주소, 포트, 버추얼 호스트, 컨텍스트, 패스등과 같은 매우 중요한 정보를 가지고 있습니다.
  • tomcat-users.xml: 이 파일은 인증, 권한부여, 롤기반 정의에 사용될 수 있습니다. 인증을 위한 users/passwords/roles 의 데이터베이스나 컨테이너 관리 보안을 위해 사용되어집니다. 사용자를 추가/삭제나 존재하는 사용자에게 롤을 할당/비할당하기 위해서 이 파일을 편집하면 됩니다.
  • logging.properties: 이름에서 짐작했듯이, Tomcat 인스턴스의 로딩 속성들을 정의할 수 있습니다.
  • web.xml: 이것은 Tomcat 인스턴스에 의해서 로드되어 모든 웹 애플리케이션에 적용되어지는 기본 값들을 정의합니다. 만약 웹 애플리케이션이 자신만의 deployment 디스크립터를 가지고 있다며, 이 컨텐츠는 항상 기본 스크립터에 의해서 정의되어진 설정값을 오버라이드(override) 합니다.
  • context.xml: 이 파일의 내용들은 모든 애플리케이션에 로드됩니다. 세션 퍼시스턴스, Comet 접속 트래킹과 같은 파라메터 설정들을 할 수 있습니다.

Tomcat 7 설치

tomcat 이 문서는 리눅스 Tomcat 7 설치 에 관한 문서 입니다.

1. Tomcat 7 스펙

Tomcat 7 의 스펙은 다음과 같습니다.

  • Servlet: 3.0
  • JSP Spec: 2.2
  • EL Spec: 2.2
  • WebSocket: 1.1
  • Support Java Versions: 6 and later

Java 1.6 버전 이상이 필요 합니다. CentOS 7 이라면 다음과 같이 설치할 수 있습니다.

2. Download

다운로드는 Apache Tomcat 페이지에서 다운로드 한다.

3. 설치

설치는 압축을 해제하는 것으로 끝이 난다.

4. 테스트

Tomcat 7 에서는 환경을 테스트해 볼 수 있는 스크립트가 두가지 있습니다.

  • version.sh – 현재 Tomcat 7 에 대한 버전 정보가 나옵니다.
  • configtest.sh – Tomcat 7 의 설정파일에 문제가 없는지를 테스트 해줍니다.

configtest.sh 는 Tomcat 을 실행시키지 않는 상태에서 실행하는 것이 좋습니다.

5. 시작