본문 바로가기
WEB|WAS/Tomcat

TOMCAT 배포된 war 파일 초기화 문제 (덮어씌어짐)

by 개폰지밥 2021. 11. 4.
반응형

TOMCAT 배포된 war 파일 초기화 문제

| 결론

설명에 앞서 결론만 설명해드리자면, $CATALINA_HOME/conf/server.xml에서 autoDeploy="true"부분을 "false"로 바꿔놓았다.

<Host name=”localhost”  appBase=”webapps”
unpackWARs=”true” autoDeploy=”true”>


계속 해서 초기화가 발생되는지 확인하고 추후 포스트를 계속 올리도록 하겠다
.그 후 며칠동안은 초기화 문제가 발생되지 않았지만, 아직은 100%장담 하기 어려운 상황이다.

 

| 상황발생 및 원인추정 해보기

TOMCAT에 설정한 war 파일들이 초기화가 되는 문제가 발생했다.

war 파일을 배포 후에 분명히 고객사의 환경에 맞춰 아래와 같이 수정을 해놓았는데도 불구하고 환경파일 수정 전으로 돌아가는 문제가 발생했다. ls -al로 하면 날짜도 war 배포 날짜로 수정전 날짜로 되어있다.

예를 들어 jndi관련 설정파일에서 ip 주소를 10.10.30.34에서 127.0.0.1, 수정하였다.

usernamepasswordDB에 맞춰 수정해놓았다.

[수정전]

 

[수정후]

 

여러가지 원인을 유추해보았다.

 

1. was 계정이 아니라 root 계정으로 was를 재시작해서 초기화가 되었다는 이론1 => 범인 X

->  하지만 was container가 분리 되어있고, startup, shutdown scriptwas계정의 bash_profile에만 적용되어있어 root 계정으로는 아래와 같이 시작과 종료를 할 수 없다.

          하지만 궁금해서 상대 경로를 절대 경로로 바꿔 root 계정으로 was를 재시작 해보았다.

->  rootwas를 재시작했지만 설정 파일을 초기화 되지 않았다.

 

2. web에서 tomcat 화면을 실행할 때 was 계정이 아닌 root 계정으로 실행했을 때 초기화가 되었다는 이론2

->  root 계정으로 web 화면이 띄어도 초기화 되지 않는다.

 

3. 가상서버 자체를 재시작 했을 때 초기화가 되었다는 이론3 => 범인 X

->  처음에 가상서버 자체를 재시작을 했을 때 초기화가 되었다!

-> 하지만 확실히 하기 위해서 몇 번 더 테스트를 하니까 한번 빼고는 초기화가 되지 않는 상황이 발생하였다.

 

[결론 : TOMCAT 설정 초기화 범인 찾았다]

4. tomcat 설정자체에서 초기화를 시킨다는 이론4 => 범인 !!

$CATALINA_HOME/conf/server.xmlunpackWARsautoDeploy true로 되어있었다. (옵션에 대한 자세한 설명은 아래에)

이 설정들 때문에 tomcat 재시작 후 war 폴더가 풀린 곳에 들어가서 설정을 바꿔 놓았어도, 기존의 war 파일이 새로 풀려 수정한 것을 계속 덮어 씌웠던 것이라고 추정하고 있다.

| 문제가 되는 부분(추정)

<Host name=”localhost”  appBase=”webapps”
            unpackWARs=”true” autoDeploy=”true”>

 

그렇다면 해결은 어떻게 해야할까?

| 해결방법

해결 방법에는 2가지 방법이 있다. 둘중 하나만 수행하면 된다. 1번 방법을 실행하세요.

1.     autoDeployfalse 값으로 변경한다.

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="false">

           unpackWARs="true"false로 바꿨더니 아래와 같은 에러가 생겼다.

 

2. 배포가 완료 되었으면 MagicFIDO2Admin.war 파일을 삭제한다. => 몇시간 지나니깐 War 배포 파일이 사라져있었다….

배포 전 war 파일을 삭제하면 위의 옵션값을 false로 바꿔 놓지 않아도 새로 덮어씌울 war 파일이 없기 때문에 초기화가 되지 않는다.

 

아직 unpackWARsautoDeploytrue로 되어있을 때 tomcat 서버가 언제 다시 war fileDeploy해서 수정된 것들이 다시 덮여씌어지는지는 정확히 유추할 수 없었지만, 위의 두가지 방법으로 tomcat 설정한 것이 초기화가 되는 것을 막을 수는 있었다.

저와 같이 war 파일 삭제 후 애플리케이션이 지워진 분들이 있나봅니다.

https://okky.kr/article/142708

 

| TOMCAT server.xml 옵션 설명

1. unpackWARs 옵션(디폴트 true)

unPackWARs 옵션이 true로 되어 있을 경우에는 WAR 파일의 압축을 풀어서 배치하게 됩니다.

예로) $TOMCAT_HOME/webapps/examples.war 파일을 위치시키면 examples라는 디렉토리를 생성후에 war파일을 압축 해제합니다.

appsBase 이외의 디렉토리에있는 WAR 파일을 디플로이 시키고자 한다면 context XML 파일에 아래와 같이 정의해 주면 됩니다.

2. autoDeploy 옵션(디폴트 true)

기본적으로 톰캣은 autoDeploy 옵션이 true일 경우 WAR파일을  appBase(=webapps) 디렉토리에 위치시키면 톰캣 구동시 WAR파일을 자동으로 읽어서 배포(deploy)합니다.

출처 : https://fliedcat.tistory.com/5

 

반응형

댓글