톰캣 멀티 인스턴스 환경 구축

Q&A·2023년 12월 20일

이슈

나는 2개의 고객사에 나가 있는 우리 회사의 솔루션을 관리하고 있다. 고객사마다 요건이 다르기 때문에 소스나 적용되는 모듈에 차이가 있고, 이슈를 처리할 때마다 로컬에서 이 설정을 바꿔서 적용하기 불편했다.

해결 방법

위 이슈를 톰캣 멀티 인스턴스를 통해 해결했다. 멀티 인스턴스란 여러 개의 인스턴스를 하나의 톰캣 엔진에 올려 사용하는 것이다. 하나의 톰캣에 포함된 bin, lib, conf, logs, webapps, temp, work 디렉토리를 목적에 맞게 CATALINA_HOME, CATALINA_BASE 로 분리해줌으로써 실행할 수 있다.

  • CATALINA_HOME
    • 톰캣 엔진 설치 루트
    • 톰캣 엔진은 bin, lib만 사용하기 때문에 해당 디렉토리를 포함하면 된다.
  • CATALINA_BASE
    • 인스턴스 루트
    • 서비스를 담당하는 인스턴스와 관련된 폴더들을 넣어준다. conf, logs, webapps, temp, work 디렉토리를 포함하면 된다.
    • webapps 디렉토리를 포함하고 있기 때문에 인스턴스 별로 다른 소스를 배포할 수 있고 conf, temp, work 디렉토리를 포함하고 있기 때문에 각 인스턴스 별로 실행할 수 있다. 각 인스턴스에 대한 로그는 인스턴스의 logs 디렉토리에 남는다.

나는 다음과 같이 포트별로 고객사를 소스를 배포해 사용하기로 했다.

  • 8080: 고객사1 시작 포트
  • 8180: 고객사2 시작 포트
  • 8005: 고객사1 종료 포트
  • 8105: 고객사2 종료 포트

작업

1. 폴더 분리

인스턴스 폴더를 생성한다. 나는 home 디렉토리에 instance1, instance2라는 이름으로 생성했다.
톰캣이 위치한 폴더에서 conf, logs, temp, webapps, work 폴더를 인스턴스 폴더로 옮겨준다.

2. 인스턴스별 실행/종료 쉘 스크립트

인스턴스1을 실행할 때에는 CATALINA_BASE가 인스턴스1 폴더 경로여야 하고, 인스턴스2를 실행할 때에는 CATALINA_BASE가 인스턴스2 폴더 경로여야 한다. 따라서 instance1/bininstance2/bin 에 실행할 때의 쉘 스크립트를 만들어준다.

  • startup.sh
  • shutdown.sh

3. 인스턴스별 실행/종료 포트 설정

톰캣은 8080 포트에서 시작하고, 8005에서 종료하도록 기본적으로 설정되어 있다. 따라서 인스턴스2의 포트 설정만 바꿔주면 된다.

  • instance2경로/conf/server.xml
    • 종료 포트 변경
    • 시작 포트 변경

4. 결과 확인

sh instance1경로/bin/startup.sh sh instance1경로/bin/startup.sh 명령어를 통해 각각의 인스턴스를 시작한다. 8080 포트와 8180 포트에 무사히 올라간 것을 볼 수 있다.

참고 자료

profile
스스로에게 질문을 던지고, 대답하는 블로그

0개의 댓글