반응형
다른 업체에서 서버에 배포해 주고 간 서비스의 default URL이 잡혀있지 않아 설정을 조금 변경해야 하는 일이 생겼다.
💢문제
아래처럼 기본 url로 접속을 하면 404에러가 뜨고
https:/derault-url.com
아래의 url로 접속을 해야 업체에서 배포한 서비스에 접속이 가능했다.
https:/derault-url.com/app
❗목표
- 기본url(https:/derault-url.com)에 접속 시 custom error 페이지 노출하기
💯해결방법
사실 조금의 설정만 바꾸된 쉽게 될줄 알았다... 하지만 업체에서 설정을 바꿔놔 많은 삽질을 하게되었다...
이참에 Tomcat 구조와 동작원리, 파일 구도 등 여러가지를 자세하게 알아 볼 수 있는 계기가 되엇다.
기본적으로 tomcat의 파일 구조는 아래와 같다.
tomcat/
├── bin/
│ ├── catalina.sh
│ ├── catalina.bat
│ ├── startup.sh
│ ├── shutdown.sh
│ └── ...
├── conf/
│ ├── server.xml
│ ├── web.xml
│ ├── context.xml
│ └── ...
├── lib/
│ ├── catalina.jar
│ ├── servlet-api.jar
│ ├── tomcat-util.jar
│ └── ...
├── logs/
│ ├── catalina.out
│ ├── localhost_access_log.txt
│ └── ...
├── temp/
├── webapps/
│ ├── ROOT/
│ │ ├── WEB-INF/
│ │ └── ...
│ ├── myapp/
│ │ ├── WEB-INF/
│ │ └── ...
│ └── ...
├── work/
└── ...
- bin/: Apache Tomcat 서버를 시작 및 중지하기 위한 쉘 스크립트 및 배치 파일과 기타 유틸리티 스크립트를 포함합니다.
- conf/: server.xml, web.xml 및 context.xml과 같은 Apache Tomcat 서버에 대한 구성 파일을 포함합니다.
- lib/: catalina.jar, servlet-api.jar 및 tomcat-util.jar와 같이 Apache Tomcat 서버에 필요한 JAR 파일을 포함합니다.
- logs/: catalina.out 및 localhost_access_log.txt와 같이 Apache Tomcat 서버에서 생성된 로그 파일을 포함합니다.
- temp/: JAR 파일 및 컴파일된 JSP 페이지와 같이 Apache Tomcat 서버에서 생성된 임시 파일을 포함합니다.
- webapps/: Apache Tomcat 서버에 배포된 웹 애플리케이션을 포함합니다. 각 웹 응용 프로그램은 ROOT 또는 myapp과 같은 자체 디렉터리에 포함되어 있습니다.
- work/: 컴파일된 JSP 페이지 및 기타 임시 파일을 위해 Apache Tomcat 서버에서 사용하는 작업 디렉토리를 포함합니다.
여기서 중요한건 conf/server.xml, conf/context.xml, cont/web.xml, webapps/ 이정도 이다.
먼저 접속 url의 설정을 확인하기 위해 conf/server.xml 파일안에 Context 태그를 보면 된다.
conf/service.xml
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<!-- 기존코드 -->
<Context path="/app" docBase="app" reloadable = true/>
<!-- 추가 코드 -->
<Context path="" docBase="ROOT" reloadable = true/>
</Host>
</Engine>
- appBase는 docBase가 존재 할 상위 폴더이다
- path는 접속할 url 경로에 해당하는 부분이고 docBase는 참조할 폴더 경로이다. reloadable은 class 변경시 자동 반영에 대한 코드로 개발시 true, 운영시 false를 설정한다.
conf/web.xml
<!-- Default welcome file list -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<error-page>
<error-code>404</error-code>
<location>/error404.jsp</location>
</error-page>
- 위의 설정을 URL로 들어왔을때 index.html을 보여줘라 라는 의미이다.
- 404error가 발생하면 해당 작업공간의 error404.jsp가 호출된다.
- https:/derault-url.com/app 로 들어왔을때에는 webapps/app/index.html을 보여준다.
- https:/derault-url.com 로 들어왔을때에는 webapps/ROOT/index.html을 보여준다.
하지만 여기서 설정을 한번 더 override 할는 설정 파일이 존재한다.
conf/context.xml
<Context docBase="app" path="/app" reloadable="true" metadata-complete="false">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
- 이처럼 context.xml의 설정을 잡아주면 https:/derault-url.com/app 로 들어왔을때 conf/web.xml의 설정을 사용하는 것 이 아닌 app/WEB-INF/web.xml의 설정이 적용되기 떄문에 서로 다른 시스템으로 만들 수 있다.
반응형