Tomcat과 Catalina
Tomcat
Tomcat은 Apache 재단에서 제공하는 Java 웹 애플리케이션 서버(Web Application Server)이다.
웹 서버 기능뿐만 아니라 Servlet/JSP 컨테이너, HTTP 커넥터, 클러스터링, JNDI 리소스 관리 등 다양한 기능을 포함한 전체 프레임워크를 의미한다.
Catalina
Catalina는 Tomcat의 핵심 엔진으로, Servlet과 JSP를 실제로 실행하는 컨테이너이다.
Tomcat이 구동되면 Catalina 클래스(org.apache.catalina.startup.Bootstrap)가 JVM에서 시작되며, 웹 애플리케이션의 서블릿과 JSP를 관리한다.
즉, Tomcat은 건물 전체이고, Catalina는 그 안의 엔진 역할을 하는 기계실과 같다.
구성 요소 구조
Apache Tomcat
│
├── Catalina ← 서블릿/JSP 컨테이너
├── Coyote ← HTTP Connector, 요청/응답 처리
├── Jasper ← JSP Compiler, JSP → Servlet 변환
├── Cluster ← 세션 복제 관리
└── Naming/JNDI ← 리소스(DataSource 등) 관리
2. 웹 애플리케이션 배포 구조
WAR 배포
Tomcat에 웹 애플리케이션을 올릴 때는 대부분 WAR 파일을 사용한다.
WAR 파일은 Catalina 엔진의 JVM 프로세스 안에서 실행된다.
즉, 각 웹 애플리케이션은 독립 JVM이 아니라 Catalina JVM 내부에서 동작하며, Catalina JVM의 힙을 공유한다.
요청 흐름
[클라이언트 요청]
↓
[Coyote Connector] ← HTTP 요청 수신
↓
[Catalina Engine] ← 서블릿 매핑 및 실행
↓
[Jasper] ← JSP를 Servlet으로 변환 후 실행
↓
[웹 애플리케이션] ← 실제 로직 수행
- WAR 파일 자체에는 JVM 옵션을 지정할 수 없다.
- 모든 웹 애플리케이션은 Catalina JVM의
-Xmx,-Xms등 힙 설정을 그대로 공유한다. - 여러 웹 애플리케이션이 동시에 많은 메모리를 사용하면 Catalina JVM의 힙 부족이 발생할 수 있다.
3. JVM 옵션 설정 방법
Catalina JVM에 옵션 적용
- JVM 옵션(
-Xmx,-Xms등)은 Catalina JVM 프로세스에 적용해야 한다. - 권장 파일 위치:
- Linux/macOS:
$CATALINA_HOME/bin/setenv.sh - Windows:
%CATALINA_HOME%\bin\setenv.bat
- Linux/macOS:
예시 설정
Linux/macOS
export CATALINA_OPTS="-Xms1024m -Xmx4096m -XX:+UseG1GC -XX:MaxPermSize=256m"
Windows
set CATALINA_OPTS=-Xms1024m -Xmx4096m -XX:+UseG1GC -XX:MaxPermSize=256m
CATALINA_OPTS는 Tomcat 서버 시작 시에만 적용된다.
JAVA_OPTS는 stop/start 모두에 적용되므로 보통 힙 튜닝에는 사용하지 않는다.
확인 방법(for Unix/Linux)
- Catalina 관련 기본 지식과 구성 요소
주요 구성 요소
구성요소 역할
Engine Catalina 엔진, Host와 Context 관리
Host 가상 호스트 관리, appBase를 통해 WAR 위치 지정
Context 웹 애플리케이션 단위 관리, 각 웹앱의 서블릿 매핑
Wrapper 서블릿 단위 관리, 서블릿 생명주기 관리
Connector Coyote 기반, 클라이언트 요청 수신 및 Catalina 전달
로그 구조
Catalina 로그: $CATALINA_HOME/logs/catalina.out
WebApp 로그: 웹 애플리케이션 내부에서 지정한 로깅 (logback, log4j 등)
서버 설정 파일
파일 역할
conf/server.xml Catalina Engine, Host, Connector 설정
conf/context.xml 웹 애플리케이션별 Context 설정
conf/web.xml 서블릿 매핑, 필터, 리스너 등 글로벌 설정
- 실무 팁
여러 웹앱이 하나의 Catalina JVM을 공유하므로, Xmx를 적절히 조정하여 OutOfMemoryError를 방지해야 한다.
각 웹앱별 독립 JVM이 필요하면, Tomcat 인스턴스를 별도로 구동하거나 Spring Boot 등으로 개별 JAR 실행 방식을 고려한다.
Catalina의 Engine, Host, Context 구조를 이해하면 멀티 호스트 환경, WAR 배포, 세션 관리 등 실무 운영에 큰 도움이 된다.
JVM 옵션뿐만 아니라 GC, JMX, 디버깅 옵션도 CATALINA_OPTS에서 함께 관리한다.
'DEV > Web' 카테고리의 다른 글
| [HTTP] 상태 코드(Status Code) 설명 (11) | 2023.12.06 |
|---|