테스트가 진행중인 서버에 hot deploy 할 수 있는 방법에 대해서 고민을 해오다가 알게된 tomcat parallel deployment에 대해서 정리한다.
병렬 배포를 알기 전까지는 apache를 이용해 로드밸런싱을 해볼까라는 생각을 가졌다. 문제는 한정된 자원에 각 서비스별 톰켓을 두 대씩 기동해야 한다는 것이고, 결정적으로 테스트 장비의 메모리가 충분치 않았다.
고민을 해오다가 tomcat parallel deployment 기능에 대해서 알게 되었고, Tomcat7 부터 해당 기능을 이용할 수 있다고 하여 바로 적용하게 되었다.
자세한 설명은 https://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Parallel_deployment 페이지에서 확인할 수 있고, 동작 방법은 다음과 같다.
tomcat parallel deployment 기능을 사용하기 위해서는 unpackWARs="true" autoDeploy="true" 로 설정되어 있어야 함 (server.xml)
1. ROOT context가 현재 서비스 중인 상태
2. webapps 디렉토리에 ROOT##2.war 파일 배포
3. ROOT##2.war 파일의 압축이 풀리며 ROOT##2 디렉토리가 생성
4. ROOT##2 context application이 구동
5. ROOT, ROOT##2 두 개의 context가 운용이 되는 상태에서 브라우저를 띄운 후 해당 서비스에 접속하게 되면(localhost:8080) ROOT##2 context로 연결이 된다. 참고로 기존 ROOT에 접속했던 session은 변경 없이 ROOT context에 연결
6. ROOT##2 버전의 소스가 최신이기 때문에 기존 ROOT에 연결되어 있는 세션들도 ROOT##2를 바라보게 할 필요성이 있으므로 ROOT 디렉토리를 삭제한다.
7. ROOT 디렉토리가 삭제되면 ROOT context application이 shutdown된다.
8. ROOT context에 연결되던 session들이 ROOT##2 context application에 접속되는 것을 확인할 수 있다.
위와 같이 동작이 가능한 이유는 ## 에 비밀이 있다.
ROOT
ROOT##1
ROOT##2
ROOT##3
## 뒤에 붙는 숫자가 context version을 의미하는데 위의 application 모두 context path는 ROOT이다.
설정으로 표현하면 다음과 같다.
<Context path="" docBase="{TOMCAT_HOME}/wepapps/ROOT" />
<Context path="" docBase="{TOMCAT_HOME}/wepapps/ROOT##1" />
<Context path="" docBase="{TOMCAT_HOME}/wepapps/ROOT##2" />
<Context path="" docBase="{TOMCAT_HOME}/wepapps/ROOT##3" />
결국 하나의 tomcat instance에 동일한 context path를 가진 application을 여러 개 올릴 수 있게 됨으로써 테스트에 영향을 주지 않고, 최신 버전의 소스를 배포할 수 있었다.
'프로그래밍' 카테고리의 다른 글
Git Repository 변경하기 (0) | 2022.02.20 |
---|---|
tomcat http -> https로 리다이렉트 (0) | 2022.02.19 |
letsencrypt ssl인증/갱신까지 (1) | 2022.02.19 |
Oracle 데이터베이스 오류 코드 ORA-06504 설명 (0) | 2022.01.12 |
ORA-00020 Error 오라클 에러 (0) | 2021.10.15 |
댓글