maven
이클립스 상에서 maven 을 이용해 원격서버로 배포하기
스토브
2011. 10. 14. 02:07
오늘 문득 톰캣을 새로 받을 일이 있어서 톰캣 사이트에 갔다가, 예전부터 있었겠지만 그동안 무심하게 쌩깠던 링크가 문득 눈에 들어왔다.
그것은 바로 톰캣 다운로드 받는 링크 아래 Tomcat Deployer 라는 것이였다.
요즘 개발 막바지라 이것저것 자질구래한걸 수정해달라는 요청사항이 많아서, 수정한다음에 구찮스럽게 자꾸 다시 배포를 해줘야 하는 일이 드럭게 많아졌다.
용써서 잘 맹글어 주는 것에 시간에 투자를 해야 하는데, 쓸데없는 일에 시간을 투자를 해야만 하는것이다.
구찮은걸 극도로 싫어하는 나로써는 그동안 눈에 들어오지도 않던 이 문득 보이는 Deployer 라는게 왠지 땡기기 시작했다. 나의 구세주 같은 느낌.
대충 설명서를 읽어보니 나의 로컬에서 원격서버로 배포를 시켜주는 툴인듯 했다.
그런데 받아서 압축을 풀어보니 요즘 잘 쓰지도 않는 ant 를 이용해서 뭔가를 해주는것 같았다.
그런데 또 나는 잘 쓰지도 않을 뭔가를 또 받아서 압축을 풀고 설치하는게 또 무척이나 구찮게 느껴졌다.
왠지 ant 보다도 훨씬 좋다고 느껴지는 maven에서도 누군가 머리좋은 사람이 반드시 맹글어 놨을거란 신념을 가지고 구글에게 "tomcat deployer maven" 을 찾아주세요! 라고 요청했다.
뭐 역시 뭔가가 있었다.! 고것은 바로 tomcat-maven-plugin !!
maven 을 쓰기 시작하면서 tomcat-maven-plugin 플러그인 어쩌고 하는걸 검색하다가 많이 보았는데 나는 그냥 jetty plugin 처럼 tomcat 으로 서버를 띄어주는 것인줄로만 알고 그냥 쌩깠었다 -_-
그런데!!! tomcat:deploy 요런 goal 이 있지 아니한가!!! 그렇다. 이제 이클립스에서 버튼한번만 클릭하면 현재 나의 이클립 상에 개발중인것을 고대로 원격서버에 배포를 시킬수가 있게 된 것이다.
구찮스럽게 느껴지기만 하면 배포작업도 "배포쫌 해주세염~" 그라면 "네! 기분좋게 후딱 해드릴깨요!!" 라고 사람좋은 표정을 지을수 있게 됬다.
잡설이 길어졌다. 내가 바라던 짖을 할려면 우째해야 하는가?
먼저 톰캣 매니저 사용자를 설정해 줘야 한다.
톰캣을 설치하면 기본적으로 같이 설치되는 웹어플중에 manager 라는게 있다. 톰캣 설치디렉토리/webapps 에 가보면 manager 라고 폴더가 하나 있을것이다. 이게 바로 그거다.
로컬에다 설치한 사람은 http://localhost:8080/manager/html 로 접속해 보라! 뭔 아이디랑 패스워드를 입력하라는 창이 뜰 것이다.
여기에 로그인 할 수 있는 사용자를 설정하는 곳은 톰캣설치디렉토리/conf/tomcat-users.xml 파일이다.
여기에다 살포시 요런 설정을 추가해 주면 된다. username 과 password 는 적당히 알아서 쫌 복잡하게~~
<role rolename="manager"/> <user username="admin" password="test" roles="manager"/>
그런다음 다시 톰캣을 리스타트 하면 아까 설정한 아이디와 비밀번호로 로그인할수 있다.
뭐 사실 요 manager 를 이용하면 웹상에서도 서버를 중지하고 war 파일을 업로드 해서 배포를 할 수 있긴 하다. 하지만 역시 내가 바라는건 이클립 상에서 버튼 클릭한번~
이제 maven pom.xml 파일에 플러그인을 설정할 차례이다.
내가 테스트를 위해 샘플로 작성한 pom.xml 파일은 요렇다.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.tistory.stove99</groupId> <artifactId>DeployTest</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.1.1</version> <configuration> <warSourceDirectory>src/main/webapp</warSourceDirectory> <webXml>src/main/webapp/WEB-INF/web.xml</webXml> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>tomcat-maven-plugin</artifactId> <version>1.1</version> <configuration> <url>http://127.0.0.1:8080/manager</url> <path>/</path> <username>admin</username> <password>test</password> </configuration> </plugin> </plugins> </build> </project>
대충보면 뭔 뜻인지는 알것이다. 한가지 설명할 만한것은 tomcat-maven-plugin 플러그인 설정옵션 중에 <url>http://~~~</url> 요거랑 <path>/</path>
url 에는 톰캣 매니저의 URL 을 설정하면 된다. 웹으로 접속할때는 http://localhost:8080/manager/html 이였지만 여기서는 그냥 http://localhost:8080/manager 요기까지만 설정한다.
그리고, tomcat:deploy 로 배포를 하게 되면 path 에 설정한 context 로 배포가 된다.
즉, / 요걸 설정하면 http://localhost:8080/ /test 요걸 설정하면 http://localhost:8080/test 요렇게 웹어플이 배포된다.
자~ 이제 pom.xml 까지 설정을 마쳤으니 이클립스에서 실행을 해보자.
프로젝트명에서 오른쪽 버튼 > Run As > Maven build... 요걸 클릭하면 팝업창이 뜨는데 goals 입력란에
tomcat:undeploy tomcat:deploy요렇게 입력하고 실행을 하면 짠~~ 바라던 바대로 서버에 배포가 완료된다.
tomcat:undeploy 를 추가한 이유는 tomcat:deploy 로 배포를 할려는데 이미 같은 컨텍스트가 존재하면 에러가 나기 때문에 기존에 존재하던 컨텍스트를 지우고 다시 배포를 하기 위해서이다.
※ tomcat:undeploy 를 하면 기존에 있던 폴더가 싹 지워지기 때문에 첨부파일 같은거를 해당 폴더로 업로드 되게 처리해 놨다면 첨부파일 까지 다 지워져 버린다!!!!! 이 점에 대해서 깊은 주의가 요망된다.
※ 그외 기타 쓸 수 있는 goal 들
tomcat:run 임베디드 tomcat 서버 띄우기 => localhost:8080 으로 접속할수 있게 된다., jetty:run 과 비슷한 기능임
tomcat:start 원격 서버시작시키기
tomcat:stop 원격 서버중지
tomcat:redeploy 재배포, 이것 테스트를 심도 있게 안해봤는데 잘만 작동 된다면 undeploy 했다가 다시 deploy 안해도 될것 같긴하다.
외 기타등등 몇가지 더 있음~ tomcat:help 를 해 보면 설명들이 대충 나옴. 영어로.