대빵's Blog

Tomcat 7 에서 ROOT 로 Deploy 하기 본문

개발관련

Tomcat 7 에서 ROOT 로 Deploy 하기

bigzero 2016. 5. 26. 14:08

Tomcat 7 CentOS 에서 ROOT 에 Deploy 하기 위해 이것저것 글을 찾아봤는데 계속 에러가 나서 삽질하다가 해결책을 발견해서 적어둠...

일단 환경은 deploy 소스가 war 로 되어 있어서 tomcat 이 기동시에 war를 unpack 해서 읽어 들이는 구조임

내가 원하는 것은 tomcat 에서 aaa.war 를 http://ip주소:포트/aaa 가 아닌 http://ip주소:포트/ 로 ROOT 로 올라오게 하는 것임

Tomcat 7 에서는 server.xml 을 수정해서 docBase 를 지정하는 것이 아닌 별도의 Context 파일을 만들어서 Context 를 server.xml 과 분리 시키는 것을 권장함

작업순서는 

1. @CATALINA_HOME/webapps/ROOT 를 다른곳에 백업해두고 지운다. 이유는 나중에 나옴

2. aaa.war 파일을 서버에 올린다. 이때 평소처럼 webapps 폴더 밑에 올리면 안된다...이것 땜시 무지 삽질했다... 임의로 /deploy 폴더 밑에 놔두었다고 하자

3. server.xml 파일을 확인한다. 아마 아무것도 건드리지 않았다면 '<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">' 뭐 대충 이렇게 되어 있을 것이다. 난 host가 localhost 로 할것이지만 실 도메인 사용자는 도메일을 지정해야 한다.

4. 이제 Host를 생성하자...여기서 부터 중요한데 @CATALINA_HOME/conf/Catalina 폴더가 웹사이트에 접속하는 사용자가 접근하는 url 이라고 보면된다. 나는 개발서버에 작업하므로 ..../Catalina/localhost 로 작업했는데 만약 실제 도메인이 있는 경우 ...../Catalina/abc.domain.com 이런식으로 폴더를 만들어서 해야 한다.(3번에서 server.xml 에 지정한 도메인명과 같아야 한다.)

5. Host 밑에 Context를 생성하자. Context는 Host 폴더밑에 aaa.xml 이런식으로 만들어 진다. 그런데 이렇게 xml 파일을 만들면 aaa 라는 Context 가 Deploy 되기 때문에 사용자는 url 을 http://ip주소:포트/aaa 이렇게 치고 들어와야 한다. 그래서 aaa.xml 이 아닌 ROOT.xml 로 만들어야 http://ip주소:포트/ 이렇게만 치고 들어올수 있다.

6. ROOT.xml 에 내용을 채운다. 난 aaa.war 파일을 ROOT Context로 지정하고 /deploy 폴더에 올릴것 이므로 아래처럼 작성한다.

<?xml version="1.0" encoding="UTF-8"?>

<Context crossContext="true" path=""  docBase="/deploy/aaa" reloadable="true">

</Context>

7. tomcat 기동한다. 기동하면 tomcat 은 

첫째, @CATALINA_HOME/conf/Catalina 폴더를 뒤져서 localhost 에 ROOT.xml 을 읽어 들인다. 그러면 사용자가 http://localhost:포트/ 이렇게 치고 들어오겠구나 알게 되는 것이다. 

두번째로 ROOT.xml 을 읽어서 docBase 가 있는 곳을 찾는다. 거기에 aaa.war 가 있다

세번째로 server.xml 을 읽어서 포트, appBase 그리고 unpack 을 읽어들인다. 그러면 url 포트 지정하고 appBase에 (여기서는 @CATALINA_HOME/webapps)에 ROOT 라는 폴더를 생성하고 (왜냐하면 ROOT.xml 로 지정했으므로) docBase 의 aaa.war 를 ROOT 폴더에 풀어 놓는다(이게 아까 처음에 ROOT 폴더를 다른곳으로 백업해서 옮겨 놓는 이유이다)

그러면 내가 원하는 도메인에 원하는 포트로 원하는 Context 를 지정해서 서버가 올라온다...

결론 : 장황하게 설명했는데 검색해서 찾은 대부분은 글들이 각각의 설정작업들이 어떤 의미를 가지는 지 적혀있지 않아서 이것저것 삽질이 많았다. 그래서 잊어먹지 않을겸(아마 내일은 잊어먹을 것이다.이노무 기억력이란 금붕어도 아니고...........ㅡㅡ;) 여기에 적어놓는다...

* 참고로 webapps 밑에 aaa.war 를 놓으면 tomcat은 Context 지정한것을 무시하고 그냥 aaa Context 로 올린다. 즉 ROOT Context 고 뭐고 필요없이 그냥 war 파일명으로 Context를 올리려면 webapps 폴더 밑에 aaa.war 파일을 올려놓기만 하면 된다.