Steady Mind For My Life

https://github.com/jongseok3910/Spring-Study

전자정부프레임워크&Spring Project

톰캣서버에 다수의 프로젝트 배포하기(War파일)

함탕 2024. 8. 4. 14:14
728x90
728x90

현재 맡고 있는 프로젝트에서 크라우닉스 리포트라는 리포트 툴을 사용하고 있다.

 

이 리포트는 개발서버에 설치되어 있고, 개발서버와 연동해서 web상에서 리포트를 보여주기 위해서는

프로젝트를 개발서버에 올려서 배포를 해야 했다.

 

개발의 톰캣서버에는 이미 다른 프로젝트가 하나 올라가 있었고

나는 프로젝트를 한 개 더 톰캣서버에 배포해야 하는 상황이었다.

 

한 개의 톰캣 서버에 여러 프로젝트를 배포하기 위해서는 server.xml을 설정해야 했고

xml설정부터 실행까지 모든 과정을 정리하고자 한다.

 

1. 개발서버 shutdown

 

톰캣서버의 start, shutdown은 bin폴더에 있다.

server.xml을 설정하기에 앞서 좀 더 안정적으로 진행하기 위해

서버를 sh shutdown.sh 명령어서 서버를 내린다.

 

2. server.xml 설정

 

server.xml은 conf폴더에 위치하고 있다.

vi server.xml 명령어로 server.xml을 작성한다.

 

<Service name="Catalina">

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URLEncoding="UTF-8" URIEncoding="UTF-8"/>

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" Server="tmis"/>
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" deployOnStartup="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b"/>
<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false"/>

<Context docBase="tmis" path="/tmis" reloadable="true"/>
</Host>
</Engine>
</Service>

<Service name="CatalinaTb">

<Connector connectionTimeout="20000" port="9090" protocol="HTTP/1.1" redirectPort="9443" URLEncoding="UTF-8" URIEncoding="UTF-8"/>

<Connector port="9009" protocol="AJP/1.3" redirectPort="9443" Server="tbamis"/>
<Engine name="CatalinaTb" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" deployOnStartup="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b"/>
<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false"/>

<Context docBase="tbamis" path="/tbamis" reloadable="true"/>
</Host>
</Engine>
</Service>
</Server>

 

위 첫 번째 service name ="Catalina"는 기존에 올라가 있는 다른 프로젝트다.

새로운 프로젝트를 배포하기 위해서는 기존 프로젝트와 겹치지 않도록 포트구성을 해줘야 한다.

 

그래서 service name="CatalinaTb"이름으로 새로운 프로젝트 배포를 위한 설정을 추가했다.

(Catalina와 CatalinaTb 서비스 블록을 비교해 보면 어디가 다른지 알 수 있다.)

 

새로운 프로젝트의 포트 9090, 9009, 9443으로 구성했고 서버명을 tbamis로 설정했다.

(Context docBase와 path도 tbamis로 설정)

 

3. 방화벽, 포트 열기(centos7기반)

sudo firewall-cmd --zone=public --permanent --add-port=9443/tcp
sudo firewall-cmd --zone=public --permanent --add-port=9090/tcp
sudo firewall-cmd --zone=public --permanent --add-port=9009/tcp
sudo firewall-cmd --reload

 

위 명령어로 포트를 열고 방화벽 재시작을 한다.

firewall-cmd --zone=public --list-all

포트가 열렸는지는 위 명령어로 확인한다.

 

4. war파일 올리고 서버시작

 

webapps 폴더에 tbamis.war파일을 올린 후

bin파일로 이동하여 sh startup.sh명령어서 서버를 기동 한다.

 

1. 톰캣은 server.xml파일을 읽어서 프로젝트를 실행한다.

2. server.xml에 구성되어 있는 것처럼 9009, 9443, 9009 포트를 사용하고 

webapps폴더에 있는 tbamis.war를 기반으로 프로젝트를 실행한다.

이 과정에서 tbamis이름의 폴더가 자동생성되고 폴더 안에 class파일들 프로젝트 구성요소들이 있다.

(서버가 정상 기동되면 war파일을 기반으로 tbamis폴더를 생성한다)

 

3. 서비스가 정상실행되면 netstat -antp|grep LISTEN 명령으로 포트가 정상적으로 리스닝되고 있는지 확인가능하다.

 

아까 방화벽으로 열어뒀던 9090,9443,8009 포트가 정상적으로 리스닝되고 있다.

만약 본인이 설정한 포트가 정상적으로 리스닝되고 있지 않다면(화면에 보이지 않는다면)

서비스(프로젝트) 자체가 정상 구동이 되고 있지 않다는 것이다.(배포실패)

서비스(프로젝트)가 실행되고 있지 않다면 server.xml파일 구성을 다시 확인해야 한다.

 

정상 구동됐다면 url에 https://톰캣이 설치된 서버의 아이피:9090/tbamis

입력하면 배포한 프로젝트에 접근이 가능하다.

 

 

톰캣서버에 직접 프로젝트를 배포해 보면서 배포과정을 자세히 알 수 있게 되었고

server.xml에 설정을 추가하면 한 개의 톰캣서버에 다수의 프로젝트를 배포할 수 있다는 것을 알게 되었다.

728x90
300x250