| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- AOP
- 허깅 페이스
- webflux
- 본인확인
- ktlin
- Spring
- db
- Kotlin
- 인증
- 딥시크
- Flux
- AWS
- API
- deepseek vs chatgpt
- PostgreSQL
- spring security
- Spring Boot
- Mono
- 보안
- netty
- 공동인증서
- postgis
- IntelliJ
- 본인인증
- 코틀린
- docker
- 로그인
- exception
- NGINX
- 컨퍼런스
- Today
- Total
[수미수의 개발 브로구]
[Tomcat] 멀티 인스턴스 사용하기 본문
들어가기 전
개발 또는 운영 시 톰캣을 서버별로 올리게 되면, 비용이 발생 될 수 있다. 이럴 경우, 한 개의 서버에 여러개의 톰캣을 올릴 수 없을까 라는 생각을 하게 될것인데, 실제로 개발 또는 운영시 톰캣 멀티 인스턴스로 사용되곤 한다. 사용 하는 방법은톰캣을 그데로 복사해서 사용하는 방법과, 톰캣 엔진은 한개만 유지하고, 인스턴스별로 환경 설정만 변경해서 사용하는 방법이 있다. 환경 설정만 변경하는 방법은 기존 톰캣 바이너리를 실행 할때, 설정 정보만 다르게 하여 startup 시키는 방법이다.
이러한 멀티 인스턴스로 사용하게 되면 아래와 같이 장점이 있다.
톰캣을 업데이트 할때 엔진 하나만 업데이트 가능
톰캣 라이브러리를 여러 톰캣별 설치 할 필요 없음
하나의 서버에 여러개의 톰캣을 사용하여 비용적으로 효과를 볼 수 있음
따라하기
해당 글에서는 톰캣 엔진을 설치하고, 톰캣 인스턴스로 사용하고자 하는 디렉토리들을 생성하여 한 개의 톰캣 엔진을 이용하여 여러개의 톰캣 인스턴스를 사용하는 형태로 설명 한다.
1) 톰캣 엔진 설치
- 톰캣 바이너리 파일을 인스톨 한다. 해당 톰캣은 톰캣 엔진으로 사용 한다.
- 톰캣 설치 전 JAVA 설치가 되어 있어야 한다.
2) 톰캣 인스턴스 설치
- 톰캣 인스턴스로 사용하기 위해 톰캣 엔진을 인스턴스 폴도로 복사한다. (해당 글에서는 test1, test2 인스턴스를 띄운다고 가정한다.) 했을 때, 톰캣 바이너리를 test 이름으로 복사한다.
- 복사한 톰캣 폴더 정보에서 인스턴스 폴더에는, bin, conf, logs, webapp 폴더를 제외하고 삭제 한다.
[abc@dev:/data01/sw/test1]# ls
bin conf logs webapps
[abc@dev:/data01/sw/test1]#
- 이제, 스크립트 작성하고, server.xml 수정하여, 웹 리소스 및 포트를 변경 한다.
3) 스크립트 생성
- 이제 각 인스턴스 디렉토리로 복사한 디렉토리에서 스크립트를 생성한다.
- 스크립트는 기존 톰캣 바이너리와 새롭게 실행하고자 하는 인스턴스 설정 정보를 기반으로 작성한다.
startup.sh
startup.sh 는 각 톰캣 인스턴스별로 실행 되는 스크립트이며, 톰캣 엔진의 실행 파일로 톰캣 인스턴스를 띄운다.
#!/usr/bin/env bash
export CATALINA_BASE=/data01/sw/tomcat8.5/test1
export JAVA_HOME=/data01/program/jdk8
export TOMCAT_BIN=/data01/sw/tomcat8.5
cd $TOMCAT_BIN
./startup.sh
- CATALINA_BASE : 인스턴스 설정 정보 디렉토리
- TOMCAT_BIN : 톰캣 엔진 바이너리 폴더
log.sh
해당 스크립트는 log 폴더의 내용을 확인하기 위해 사용된다.
#!/usr/bin/env bash
export CATALINA_BASE=/data01/sw/tomcat8.5/test1
tail -f $CATALINA_BASE/logs/catalina.out
shutdown.sh
해당 스크립트는 톰캣 인스턴스를 종료 하는 스크립이다.
#!/usr/bin/env bash
export CATALINA_BASE=/data01/sw/tomcat8.5/test1
export JAVA_HOME=/data01/program/jdk8
export TOMCAT_BIN=/data01/sw/tomcat8.5/bin
cd $TOMCAT_BIN
./shutdown.sh –forcecd
- CATALINA_BASE : 인스턴스 설정 정보 디렉토리
- TOMCAT_BIN : 톰캣 엔진 바이너리 폴더
server.xml 수정
톰캣 인스턴스별로 사용하기 위한 포트를 설정하기 위해서 server.xml 을 수정 한다. 각 인스턴스별 포트 정보는 규칙에 따라 변경하는 것을 추천한다. 예를 들어 인스턴스 1의 경우 80XX 로 포트를 변경하고, 인스턴스 2의 경우 81XX 식으로 변경한다.
<!-- Note: A "Server" is not itself a "Container", so you may not
define subcomponents such as "Valves" at this level.
Documentation at /docs/config/server.html
-->
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- Security listener. Documentation at /docs/config/listeners.html
<Listener className="org.apache.catalina.security.SecurityListener" />
----------------------
<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8043" />
----------------------
<!-- Define an AJP 1.3 Connector on port 8109 -->
<Connector protocol="AJP/1.3"
address="::1"
port="8009"
redirectPort="8043" />
----------------------
- Shutdown Port: Tomcat 종료 Port
- Connector Port: Tomcat 접속 Port
- Redirect Port: SSL을 사용하는 요청이 들어오면 해당 Port로 Redirect 함
- AJP Port: AJP 관련 Port (Apache 연동 용도)
결론
해당 글에서는 한 개의 서버에서 여러개의 톰캣을 사용하는 방법에 대해서 설명하였으며, 그 중 한 개의 톰캣엔진을 바탕으로 여러개의 멀티인스턴스 폴더를 만들어 여러 톰캣을 사용하는 방법에 대해서 설명 했다. 이때, 스크립트 정보도 잘 작성해야 하지만 인스턴스별 포트 정보 설정에 주의 해야 한다.
참고 사이트
'Language & Framework > Java' 카테고리의 다른 글
| [Java] Java 기초 (0) | 2023.09.28 |
|---|---|
| [Java] Java Background 실행 (1) | 2023.09.22 |
| [IntelliJ] IntelliJ 빌드 시 Command line is too long. Shorten command line for 오류 발생 (0) | 2023.09.01 |
| [Java] Java Date (0) | 2023.08.10 |
| [Java] RestTemplate vs. Apache HttpClient (0) | 2023.08.10 |