이번 장에서는 Web Application Server (WAS)의 대표적인 Open Source Software인 'Tomcat'에 대해 알아보겠습니다.
Apache 재단에서 만든, Java Servlet을 지원하기 위한 Open Source 프로젝트입니다. Tomcat은 Java를 이용한 웹 애플리케이션의 다양한 규격 (Spec)을 준수하여 JSP, HTML 파일들로 구성된 .war
파일을 배포해주는 엔진입니다.
Spec?
여러 사람들이 함께 개발하고 사용하기 위한 일련의 규칙이라고 이해하였습니다. Servlet, WebSocket 등 각각에 대해 약속을 정하고 이를 준수하여 개발 및 이용하도록 합니다. 무엇에 대해 규칙을 정해야하고, 왜 그것들이 필요한가? 에 대해서는 추후에 정리하도록 하겠습니다.
JSP, HTML 파일들로 구성된 .war 파일?
간단히 말해, 하나의 폴더를 제가 구성하고 싶은 웹 어플리케이션이라고 한다면, 그 폴더를 구성하는 다양한 하위 폴더들, 다양한 파일들을 압축해놓은 하나의 압축 파일입니다.
Tomcat의 경우, 혹은 다른 Java WAS (Web Application server)의 대부분의 경우도, '.war' 파일을 업로드 및 업데이트하여 실제 웹사이트에 배포하는 경우가 일반적입니다. 여기서는 '.war' 파일을 하나의 웹 애플리케이션을 구성하기 위한 모든 파일 및 폴더를 압축하였다고 이해하시면 됩니다.
Tomcat은 어떤 버전들이 있는지 살펴보겠습니다.
현재 사용되는 Tomcat 버전으로는, 7.0 / 8.5 / 9.0 이 있습니다. 10 버전은 알파버전으로 개발 중이라 합니다. 세 개의 버전의 차이는 크게 다음과 같습니다.
7.0 : connector가 채택할 protocol로써 BIO / NIO / ARP 지원
8.5 & 9.0 : connector가 채택할 protocol로써 NIO / NIO2 / ARP 지원, HTTP/2 지원
connector가 무엇인지, BIO / NIO / ARP / NIO2는 무엇인지, HTTP/2는 무엇인지에 대해서도 추후에 알아보겠습니다. (Network 카테고리에서 정리하려 합니다)
Tomcat은 Java로 구성한 웹 애플리케이션을 실행시켜주는 소프트웨어이며 여러 개의 버전이 있다는 정도로만 이해가 되셨으면 충분합니다.
다음으로 Tomcat의 구성요소에 대해 알아보기 전에, 자신의 OS에 맞는 바이너리 파일을 다운로드하여주시길 바랍니다.
(Windows의 경우, Tomcat의 실행이 Window Service 단위라고 합니다. 저는 OS X 유저라서, Linux를 기반으로 한 바이너리 파일을 기준으로 설명을 드리도록 하겠습니다~!)
바이너리 파일을 다운로드하였으면 아래와 같은 폴더 구성을 확인하실 수 있습니다.
주요 폴더에 대한 설명은 다음과 같습니다.
bin : 실행/종료등을 위한 스크립트 파일들이 있습니다.
conf : Tomcat이 기동되는 서버에 대한 설정부터, 유저 설정 (관리자), 기본적인 web.xml & context.xml 등 전역적인 설정을 다룹니다.
lib : 전역적으로 사용되는 라이브러리들이 있습니다.
logs : 로그 파일들이 생성되어 담기는 폴더입니다.
webapps : Tomcat에 배치시킬 다수 개의 웹 애플리케이션들이 주로 '.war'파일로 위치하는 곳입니다.
RUNNING.txt : Tomcat 바이너리 파일을 실행하는 방법에 대한 간단한 설명서입니다.
폴더 구성이 많아보일수도 있고, 각각이 왜 필요한지가 궁금한 것이 당연합니다. 실제로 Tomcat을 실행해보고, Tomcat의 전반적인 Architecture에 대해 다음 글에서 살펴보면서 이해해보도록 하겠습니다~!
위의 폴더 구성 설명에서, '전역적인' 이라는 뜻은 '여러 개의' 웹 어플리케이션들이 '하나의' Tomcat 서버에 구성될 수 있기 때문에 이들이 공용으로 사용한다는 뜻입니다.
Tomcat은 bin 폴더 아래의 startup.sh (Linux 계열 기준)을 실행하여 기동됩니다. Tomcat은 Java 프로그램이기 때문에, 당연히 최소한 JRE (Java Runtime Environment)가 설치되어 있어야 합니다.
./startup.sh
./shutdown.sh
Tomcat 실행 및 종료는 위와 같은 명령어를 통해 할 수 있습니다.
실행 후의 로그에서, CATALINA_BASE 와 같은 다양한 환경변수와 그 값들을 확인할 수 있습니다. 주요 환경변수들은 다음과 같습니다.
CATALINA_BASE : (optional) 처음에는 CATALINA_HOME과 동일합니다. 하지만, clustering 등과 같이 여러 개의 Tomcat instance를 사용한다면 각각의 BASE를 설정해야 합니다.
CATALINA_HOME : Tomcat이 설치된 폴더 주소입니다.
JRE_HOME : Java 프로그램인 Tomcat을 실행하기 위해서는 당연히 JVM을 포함한 JRE가 최소한으로 필요합니다. 이를 가리키는 경로입니다.
CLASSPATH : class path란, JVM이 Java 프로그램을 실행하는데 필요한 class 파일들의 위치를 나타냅니다.
Tomcat이 class path를 이용하여 class 들을 JVM에 로딩하고 사용하는 방법이 WAS라는 카테고리를 고려하여, 일반적인 Java Program의 경우와 다릅니다. 이는 Tomcat의 class loading에서 살펴보겠습니다.
Tomcat 실행 후, 프로세스 PID가 99869인 하나의 Java Program이 실행중인 것을 확인하실 수 있습니다.
다음 장에서는 Tomcat의 전반적인 Architecture와 구성요소들에 대해 알아보겠습니다.