tomcat

Eclipse + tomcat 을 이용한 프로젝트 환경에서 최소단위의 HotDeploy와 같은 환경을 구성하기 위한 방법

jeeyong 2012. 12. 20. 14:53

 이클립스 + 톰캣을 이용한 개발을 진행할 경우

 톰캣서버를 Restart the server in debug mode로 실행해서 개발하시는 분들이 있으신가? 



 위이미지에서 빨간 색으로 표시한 벌레 아이콘 버튼이다.

 

 디버그 모드는 말그대로 디버그 = 개발을 위한 모드라는 뜻이다. 

 디버그 모드는 개발자에게 편리한 기능을 제공하는데, 그중 이번에 알아볼 기능은 HotDeploy 기능이다. 물론 하드한 HotDeploy 기능(method 추가 및 삭제시 적용) 까지는 제공되지 않는다. (JRebel 라는 HotDeploy 용 유료 플러그인이 존재하나 그 수준까지 제공하는지 모르겠다.)


 그러나 그런 좋은 기능은 톰캣자체 내에서의 class 변경 관제 프로세스로 인한 restart 때문에 제 역활을 하지 못하는데... 

 기본 설정에서 java 파일을 수정할 경우 톰캣은 자동적으로 restart를 진행한다.

( 이 조건은 분명 톰캣 서버 context.xml 파일의 context 셋팅에 아무런 설정이 없다거나  디폴트 값인 reloadable="ture" 이렇게 설정된 상태일 것이다. )


이제 답은 나왔다.


톰캣서버의 context.xml에서 context태그에 reloadable 설정을 false로 수정하면된다.

그리고 이클립스에서 서버를 스타트 할땐 debug mode로 (위 이미지 참조) 스타트를 시키면된다.


그럼 이클립스에 의해 class가 자동적으로 빌드(project > build Automatically 체크) 되었을때 톰캣은 class가 변경되었다는 사실은 인지하지만 restart를 안하게 된다. 

그러나 이클립스의 debug mode로 인해 자동으로 hotdeploy 작용을 하는것을 볼수있다.

(아래 사진참조, 아래와 같은 이클립스 서버 설정을 통해서 자동적으로 서버에 배포하는 작업을 이클립스 차원에서 이미 제공하고있기 때문이라고 생각된다. )




요약

1. 이클립스 project > build Automatically 체크

2. 서버 더블클릭 (overview창) > publishing > Automatically publish when resources change 라디오박스 체크

3. server context.xml 파일, context 태그를 <Context reloadable="false">로 수정

 ※필수 4. 서버 debug mode로 restart


 이미 알고있는 분들이 많을 수도 있으나  이렇게 자세하게 적어놓은 이유는 대부분 자바를 이용한 웹프로젝트 경우 사용하는 툴이 이클립스 + 톰캣일 경우가 대부분 일텐데 어디에도 이런 개발 툴셋팅에 대한 내용을 찾아보기 힘들어서 이렇게 기록해놓는다.


 고로 스프링프레임웍에서도 정상적으로 반영되는 것을 보면 스프링이 싱글톤으로 모든 객체를 올려서 재사용된다고 하지만 그것은 싱글톤 처럼 동작하는 것일 뿐 실제론 디자인 패턴에서의 정형화 된 싱글톤과는 다른 방식의 싱글톤을 사용하기 때문에 스프링에서도 적용되는 것으로 보인다.