All of My Records

[Tomcat] 하나의 톰캣으로 사이트 여러개 운영하기(docBase 여러개 설정)

by 캐떠린

WAS

나의 Tomcat 설정

회사 서버에서 사용하는 톰캣의 appBase는 특정 경로를 바라보고 있다.

유사한 환경을 만들자면 아래와 같다.

<Host name="localhost"  appBase="D:\tomcatTest" unpackWARs="true" autoDeploy="true">

따라서 나의 톰캣 경로는 D드라이브의 tomcatTest를 바라보고있다.

 

D:\tomcatTest 경로에는 2개의 디렉토리가 있다.

 

따라서 톰캣 실행 시, 위 디렉토리의 배치가 완료되었다는 아래와 같은 로그 확인이 가능하다.

 

하나의 톰캣으로 여러 사이트 운영하기(docBase 여러개 설정)

Q. D:\tomcatTest 와 D:\devTest 2개의 경로가 있는데 내가 이미 appBase를 둘 중 하나의 경로로 지정해 놓은 상태에서 하나의 톰캣으로 다른 경로의 사이트를 운영할 수 있을까? 

A. 아래와 같이 docBase를 설정해주면 가능하다!

<Host name="localhost" appBase="D:\tomcatTest"
unpackWARs="true" autoDeploy="true">
<Context path="/" docBase="D:\devTest"/>
<Context path="/tomcat" docBase="test1"/>
<!-- 이하 생략 -->

 

docBase 설정 전 예시

기본적으로 appBase가 D:\tomcatTest를 바라보고 있기 때문에 http://localhost:9000/test1/test.html, http://localhost:9000/test2/test.html은 아래와 같이 확인이 가능하다.

 

하지만 http://localhost:9000/tomcat/test.html 및 http://localhost:9000/test.html404 에러가 뜬다.

Why? 전자의 경우 D:\tomcatTest 하위에 tomcat/test.html에 해당하는 경로를 찾을 수 없기 때문에 404 에러가 발생한 것이고 후자의 경우 D:\tomcatTest는 appBase 경로(웹 애플리케이션이 배포될 기본 위치)이기 때문에 하위에 웹 애플리케이션 폴더가 존재해야 또는 docBase로 특정 웹 애플리케이션의 컨텐츠 경로를 지정해야 올바르게 파일을 찾아서 페이지를 로드할 수 있다.

 

docBase 설정 후 예시

http://localhost:9000/test1/test.html, http://localhost:9000/test2/test.html과 같이 appBase 경로인 D:\tomcatTest 하위의 디렉토리 test1, test2에 접근하는 것은 여전히 가능하다.

 

<Host name="localhost" appBase="D:\tomcatTest"
unpackWARs="true" autoDeploy="true">
<Context path="/" docBase="D:\devTest"/>
<Context path="/tomcat" docBase="test1"/>
<!-- 이하 생략 -->

뿐만 아니라 위 설정에서  "/tomcat" 경로는 D:\tomcatTest\test1을 바라보게 설정하였고 "/" 경로를 D:\devTest를 바라보게 설정해두었더니, http://localhost:9000/tomcat/test.htmlhttp://localhost:9000/test.html 모두 정상적으로 경로를 찾아서 로드하는 것을 확인할 수 있다.

 

물론 위 설정에서는 "/" path를 D:\devTest로 설정하여서 http://localhost:9000/test.html 입력 시, D:\devTest\test.html 파일이 로드되지만 appBase 디렉토리 하위의 hi.html을 찾아가게 하고 싶다면 docBase를 D:\tomcatTest로 바꿔주면 된다.

 

참고로 docBase에는 절대경로/상대경로 모두 가능하다.
docBase가 절대경로로 지정된 경우, appBase와 상관없이 지정된 경로를 그대로 사용한다.
docBase가 상대경로로 지정된 경우, appBase를 기준으로 경로를 찾는다.

 

참고로 Context path="" 또는 path="/" 이렇게 설정하는 경우들이 있어서 차이점이 무엇인가 GPT에게 도움을 청했는데 아래와 같이 말했다.
✔ path="/"과 path="" 모두 동일하게 동작할 수 있으며, 일반적인 상황에서는 차이가 크지 않음.
✔ 그러나 Tomcat의 기본 애플리케이션(ROOT)을 완전히 덮어씌우려면 path=""을 사용하는 것이 더 적합함.
✔ 여러 애플리케이션을 동시에 운영하려면 path="/"이 더 적절할 수도 있음.

 

 

* 문제 해결을 위해 참고한 블로그: https://teck10.tistory.com/188, https://yeti.tistory.com/116

블로그의 프로필 사진

블로그의 정보

All of My Records

캐떠린

활동하기