[Tomcat] 톰캣의 기본 설정
- Computer/기타
- 2021. 6. 26.
톰캣의 기본 설정
목차
톰캣
아파치 소프트웨어에서 개발하는 Java 기반의 서블릿 컨테이너이다.
웹 서버, JSP/Spring 웹사이트를 구축한다면 톰캣은 한 번쯤 들어봤을 것이다.
톰캣의 설정에 따라 서버 환경이 달라질 수 있으니 기본적인 내용에 대해 정리하고자 한다.
설정 종류
<Server port="8111" shutdown="SHUTDOWN">
<Connector connectionTimeout="20000" port="8223" protocol="HTTP/1.1" redirectPort="8443"/>
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
톰캣의 설정은 기본적으로 server.xml에서 다뤄진다.
사용하지 않는 것은 주석처리가 되어있고, 일부는 주석이 풀려있다.
그로 인해 사용하지 않는, 주석 처리된 문구를 지우기 일수지만 읽는데 문제가 되지 않는다면 그대로 내버려 두는 것 또한 나쁘지 않다.
비록, 지금 당장 사용하지 않는다고 하지만 초보자에게는 이 주석이 Hint가 될 수 있다.
무슨 말인지 지금은 이해하기 어렵겠지만, 톰캣의 설정은 생각보다 다양하다. 그리고 그 기능에 대해 미리 작성해놓고 주석 처리된 것 또한 있기 때문에 아무리 내가 모르는 것이라고 함부로 주석된 것을 지웠다가 후회할 일이 발생할 수도 있다.
본론은, 톰캣의 설정에 대해 가장 기본이 된다면 저 세 부분이다.
Shutdown
shutdown, 컴퓨터에 대해 어느 정도 장난을 쳐봤다면 친숙한 단어이다.
컴퓨터를 종료할 때의 명령어가 바로 shutdown이기 때문이다.
마찬가지로 shutdwon은 tomcat의 종료 문구이기도 하다.
여기서 주의점은, shutdown끼리의 port는 웬만하면 중복을 피하는 것이 원칙이다.
shutdown port의 중복은 실행했을 때엔, 문제가 없으나 실행 중인 tomcat을 종료할 때./shutdown 명령어 작성 시
같은 shutdown port를 가진 tomcat을 모두 종료 처리할 수 있다.
이 경우는 tomcat의 규칙, 설정을 작성하기 귀찮아서 복사할 때 보이는 증상이며 혹은 shutdown port를 실수로 중복해서 나오는 증상이기도 하다.
한 서버 내에서 tomcat을 2개 이상 사용할 경우, shutdown의 중복되지 않도록 주의하자.
Connector
Connector, 이클립스 port에 대해 신경을 써봤다면 어느 정도 눈치챈 사람이 있을 수 있다.
http를 부를 때, 설정하는 port의 값이며 이클립스 사용 시 localhost:8223을 볼 수 있다.
port는 같은 도메인, ip를 사용할 때 구분 지을 수 있는 Second Name 개념이며 또는 네트워크 통신의 기초이다.
여기서 port는 절대로 중복되어서는 안 되며, port 중복 시 server의 강제 종료 현상을 볼 수 있다.
또한 서비스 server 설치할 때 서버 환경에 따라 port의 구성이 달라지기도 한다.
이는 대부분 서버 담당자가 정해주는 규칙이기도 하며, 한 번 정해진 port는 바뀌는 경우는 매우 드물다.
여기서 살펴볼 것은 redirectPort 부분인데, 만약 8223 port로 접속 시, 8443 port로 변환시킨다는 의미를 갖는다.
단, 해당 이미지에 대해서는 connectionTimeout="20000"의 조건이 걸려 있는데,
타임아웃은 서버의 문제로 인해 접속 지연 현상을 나타내며 접속 지연이 될 경우에 8443 포트로 실행한다는 의미를 갖는다.
따라서 server down이 될 시, 임시적으로 server구동을 할 수 있으며 때로는 http에서 https로 전환할 때 많이 이용하기도 한다.
redirectPort는 tomcat에서 많이 사용하는 기술이므로 숙지하는 편이 매우 도움된다.
※ 80 port는 http의 default port이며, 도메인만 표시하고 싶을 때 사용하는 가장 대표적인 port이다.
※ 443 port는 https의 default port이며, 도메인만 표시하고 싶을 때 사용하는 가장 대표적인 port이다.
※ 일부 웹 플랫폼에서는 일부 port 사용을 금지시키고 있다. 각 플랫폼마다 금지된 port가 다르므로, 실 서버 사용 시 port test는 필수이다. (프로토콜 이 요시에만 적용된다.)
Host
host, 김밥으로 따지자면 햄이고 치킨으로 따지자면 닭날개이자 닭다리 부분이다.
그만큼 톰캣에서 host의 사용은 매우 중요하다.
한 개의 tomcat으로 여러 개의 server를 사용할 때, 설정하는 부분이 바로 Host이기 때문이다.
1. appBase
host는 기본적으로 appBase는 webapps를 가리킨다.
더 나아간다면 appBase의 상대 경로는 해당 tomcat의 설치 위치이다. 그리고 webapps 디렉터리(폴더) 안에 war가 들어있으므로 webapps만 사용해도 tomcat은 쉽게 실행대상 war를 찾을 수 있다.
만약 실행 파일을 다른 곳으로 옮기고 싶다면, appBase를 수정하면 된다.절대 경로, 상대 경로 사용자 마음대로 설정할 수 있다.
ex ) appBase="/usr/local/tomcat/webapps"=> webapps의 상대 경로를 절대 경로로 해석한 결과이다.
ex) appBase="webtest"=> webapps가 아닌 webtest에 war가 들어 있을 경우, 상대 경로로 사용한 결과이다.
2. name
name="localhost"localhost는 도메인, ip 모두 활용이 가능하다. 그러나 2개 이상의 host를 사용할 시, 구분 짓게 만드는 기준은 name이다.name은 흔히 도메인, 서브 도메인 활용 시 사용되며 name에 따라 실행하는 war를 바꿀 수 있게 도와준다.
name="localhost"=> 기본 설정
name="www.mollang.co.kr"=> url이 www.mollang.co.kr로로 실행할 경우 host가 실행된다.
name=>"mail.mollang.co.kr"=> url이 mail.mollang.co.kr로 실행할 경우 host가 실행된다.
<Engine>
<Host name="localhost" appBase="test1">
</Host>
<Host name="www.mollang.co.kr" appBase="test2">
</Host>
</Engine>
서로 다른 디렉터리에 있는 war를 tomcat이 구분지어서 사용할 경우 실행하는 방법 중 하나이며, 동일한 name은 사용할 수 없다.host는 server.xml 내에서 여러 개 사용할 수 있으며 name에 따라 tomcat 한 개로 여러 개의 war를 돌릴 수 있는 방법을 구상할 수 있다.
Context
tomcat의 감초, Context.
Context는 먼저 생략이 가능하다.
생략이 될 경우, path="/" war파일 명은 ROOT.war로 정해진다.
여기서 path는 url의 port 다음 부분을 의미한다.
URL은 IP + PORT + PATH + MAPPING 구조이며, 기본적으로 ' / ' 사용을 하여 잘 안 보이는 부분이기도 하다.
그러나 이클립스 사용 시 흔히 보이는 이 Context는
같은 IP, 같은 PORT 사용해야 하는 상황에서 서로 다른 프로젝트를 실행할 경우 설정하는 방법이며
때로는 url의 경로를 바꾸기 위해 사용하는 수단이기도 하다.
doBase="실행 war 파일 명"
기본 설정은 ROOT이며, ROOT 외에 다른 war파일일 경우 입력하면 된다.위치는 Context의 source의 설정에 따라 정해지며, 톰캣이 war를 파일명을 검색할 때 사용되는 기준점이다.
source="/usr/local/tomcat/webapps"
source는 war의 위치를 나타내는 방법이다. 절대 경로가 매우 명확하며,기본적으로는 appBase가 가리키는 webapps를 향하고 있다.
※ <Context docBase="/usr/local/fileupload/" path="/fileupload" reloadable="true" />
프로젝트 바깥의 파일을 가져올 때 사용하는 방법으로 Context가 사용된다.
이는 2개 이상의 프로젝트가 파일을 공유할 때, 사용하는 방법으로 지금도 자주 쓰이는 방법이므로 숙지하는 편이 매우 좋다.
마무리
톰캣의 설정에 따라 코드의 자유도가 늘어나는 대표적인 예시였다.
또한 서버 구축 시, 방화벽과 서버의 사용 환경에 따라 예정되어 있던 PORT가 사용되지 못할 때 임시방편으로 쓰이기도 한다.
또는 외부로부터 서버가 공격당했을 때, 서버의 안전을 높이는 수단으로도 필요하다.
이처럼 많은 곳에 사용되며, 이로 인해 우리는 jsp에서 ${request.Context.path} 사용을 거의 필수적으로 사용하는 이유가 되기도 한다.
서버 설정에 삽질을 한 나로서, 다음엔 비슷한 이유로 삽질하지 않도록 다짐하며 글을 마친다.
'Computer > 기타' 카테고리의 다른 글
[JavaScript] 함수 선언문과 함수 표현식 (0) | 2021.09.26 |
---|---|
OpenLayers, Layers 설정 만들기 (0) | 2021.08.27 |
[JavaScript] 동적 태그 만들기 (0) | 2021.05.27 |
[Tomcat] 톰켓에 SSL 적용하기 (0) | 2021.05.26 |
[JavaScript] userAgent 사용하기 (0) | 2021.05.24 |