본문 바로가기

web

[211030] tomcat 자바 실행 옵션 setenv로 설정하기

.

 

일반적으로 톰캣을 실행할 때 startup.bat이나 startup.sh를 실행해서 시작한다. 원도우의 경우 .bat파일, 리눅스의 경우 .sh를 실행한다. 종료는 shutdown.bat이나 shutdown.sh를 실행해서 한다는 것도 톰캣을 조금만 만져봤다면 다들 알고 있을 것이다. 

 

최근에 서버를 실행할 때 자바 실행 옵션을 커스텀해서 설정해줘야 하는 일이 생겼다. 처음에는 단순하게 startup 파일 안에서 옵션 설정을 할 수 있을 줄 알았다. 그런데 startup 파일을 열어봤더니 자바를 실행하는 명령절이 전혀 보이지 않았다.

startup.sh 내부 코드

사진은 startup.sh 파일이다. 맨 마지막 줄에서 다음 명령을 실행하는 것을 알 수 있다. 

exec "$PRGDIR"/"$EXECUTABLE" start "$@"

코드를 좀 더 자세히 보면 $PRGDIR은 `dirname "$PRG"`이다.(41라인) 그런데 $PRG="$0"(29라인)이 할당되니까 결국 $PRGDIR이 현재 경로가 된다. 

$EXECUTABLE은 catalina.sh다.(42라인)

결과적으로 맨 마지막 명령은 현재 경로에 있는 catalina.sh를 실행하는 것과 같다. 

개인적으론 여기까지 뜯어보고 새로운 걸 알아낸 기분이었다... 톰캣은 startup.sh을 실행하면 실행되고 shutdown.sh를 실행하면 죽는 것만 알았는데... 톰캣의 내부 구조를 전혀 몰랐던 것 같다.

 

간단히 찾아본 결과, tomcat은 Catalina, Jasper, Coyote로 구성되어 있는 웹 서버 개발 환경이다.

  • Catalina: 톰캣의 서블릿 컨테이너로 Sun Microsystems의 사양을 구현한다. 
  • Jasper: 톰캣의 jsp엔진으로 jsp 파일을 구문 분석해서 java 코드 서블릿으로 컴파일해준다. 
  • Coyote: HTTP 웹서버를 지원하는 톰캣용 커넥터 구성 요소다. 이걸 사용해서 서블릿이나 jsp가 아닌 단순한 html도 웹 서버로 제공할 수 있다. 

 

아무튼, 자바 옵션을 추가하기 위해서는 startup.sh이 아니라 catalina.sh를 봐야 한다는 걸 알았다. 그래서 catalina.sh를 열어서 주석을 읽어봤는데, 다음 문장이 눈에 들어왔다. 

Do not set the variables in this script. Instead put them into a script setenv.sh in CATALINA_BASE/bin to keep your customizations separate.

 

찾아보니까 catalina.sh 안에는 여러 설정이 있어서, 유저가 임의로 수정했다가 코드가 꼬이기라도 하면 문제가 되어서 금지하는 모양이다. 주석의 말대로라면 톰캣을 설치한 경로인 CATALINA_BASE/bin 아래에 있는 setenv.sh에 변수를 설정해야 한다. 처음에는 setenv.sh 파일이 보이지 않아서 헤맸는데, 구글링을 해보니 setenv.sh은 직접 만들어줘야 한다고 한다. 윈도우라면 setenv.bat 파일을 만들면 된다. 만들어주면 catalina.sh가 실행될 때 알아서 setenv.sh를 끌고간다. 

 

참고로, catalina.sh에서 주석표시된 Environment Variable Prerequisites 아래를 보면 옵션이 설명되어 있다. 그 중 (Optional)이 적힌 옵션은 커스텀이 가능하다. 

내가 커스텀할 부분은 JAVA_OPTS 변수다. 

 

setenv.sh 내용 채우기

export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 \
-server \
-Xms1024m"

JAVA_OPT="$JAVA_OPTS 를 적어주고 뒤에 필요한 옵션을 추가적으로 기입하면 된다. 

\를 입력해서 줄바꿈을 할 수 있다. 개발자가 보기 편해진다는 효과가 있다. 

 

여기까지 하면 끝이다. ./shutdown.sh ./startup.sh를 차례대로 사용했을 때 옵션이 적용된 것을 확인할 수 있을 것이다. 

 

 

※ 요약

  • 자바 옵션 추가는 startup, catalina에서 하는 게 아니다. 
  • setenv.sh|bat 파일은 CATALINA_HOME.bin 아래의 경로에 생성해준다. 
  • setenv 안에 소스 작성이 완료되었다면 서버를 재실행하고 옵션이 잘 적용되었는지도 확인한다. 

 

- 참고 자료

https://wiper2019.tistory.com/226 

https://en.wikipedia.org/wiki/Apache_Tomcat