이 문서의 과거 버전 (r1)을 보고 있습니다. 수정일: 2026.02.23 20:56
아파치 톰캣은 아파치 소프트웨어 재단이 개발하고 관리하는 자바 기반의 오픈소스 웹 서버이자 서블릿 컨테이너이다. 이 소프트웨어는 자바 서블릿, 자바서버 페이지 및 자바 엘리프식 언어 스펙을 구현하여, 자바로 작성된 웹 애플리케이션을 실행할 수 있는 환경을 제공한다. 자바 웹 개발 분야에서 사실상의 표준 런타임 환경으로 널리 사용된다.
이 소프트웨어는 1990년대 썬 마이크로시스템즈에서 자바 서블릿과 자바서버 페이지 표준의 참조 구현으로 개발되기 시작했으며, 이후 오픈소스로 공개되었다. 2005년부터는 아파치 소프트웨어 재단의 최상위 프로젝트가 되어 지속적으로 개발 및 유지보수되고 있다. 아파치 라이선스 2.0 하에 배포되어 자유롭게 사용, 수정, 배포할 수 있다.
톰캣은 경량화된 구조를 지향하며, 핵심적으로 서블릿과 자바서버 페이지를 실행하는 엔진에 집중한다. 이는 자바 플랫폼, 엔터프라이즈 에디션의 전체 스펙을 구현하는 전통적인 웹 애플리케이션 서버와 구분되는 특징이다. 이러한 경량 설계 덕분에 설정이 비교적 간단하고 자원 소비가 적어 중소규모 애플리케이션에 적합하다.
주요 구성 요소로는 서블릿 컨테이너인 카탈리나, HTTP 요청을 처리하는 커넥터인 코요테, 자바서버 페이지 파일을 컴파일하는 재스퍼 엔진 등이 있다. 또한, 스프링 프레임워크를 비롯한 다양한 자바 웹 프레임워크와 호환되어 현대적 자바 웹 애플리케이션 개발의 기반 인프라 역할을 한다.
아파치 톰캣의 기원은 1990년대 썬 마이크로시스템즈에서 시작된다. 당시 썬은 자바 기반의 웹 애플리케이션 표준인 서블릿과 JSP를 개발하면서, 이 표준의 공식 구현체(Reference Implementation)를 만들었다. 이 프로젝트는 초기에 "Java Web Server"라는 이름으로 진행되었으나, 이후 오픈 소스화되어 공개되었다. 이 오픈 소스 프로젝트가 바로 톰캣의 시초이다.
2000년대 초반, 이 프로젝트는 아파치 소프트웨어 재단의 자카르타 프로젝트로 이관되었다. 이후 2005년, 톰캣은 아파치의 최상위 프로젝트로 승격되며 완전히 아파치 재단의 핵심 프로젝트가 되었다. 이 과정에서 톰캣은 자바 서블릿 및 JSP 표준의 선도적인 구현체로 자리매김하며, 자바 커뮤니티 프로세스의 표준 사양을 지속적으로 반영해 왔다.
톰캣이라는 이름은 프로젝트 초기 개발자인 제임스 데이비슨이 그의 애완 고양이에서 영감을 받아 지은 것으로 알려져 있다. 흥미롭게도, 톰캣의 설치 경로를 가리키는 핵심 환경 변수는 TOMCAT_HOME이 아닌 CATALINA_HOME이다. 이는 개발자가 좋아하는 캘리포니아의 카탈리나섬에서 유래한 이름이다.
톰캣의 등장과 성공은 자바 기반 웹 개발 생태계에 지대한 영향을 미쳤다. 가볍고 효율적인 설계 덕분에, 톰캣은 스프링 프레임워크를 비롯한 수많은 자바 웹 애플리케이션의 표준 런타임 환경이 되었으며, 현재까지도 가장 널리 사용되는 웹 애플리케이션 서버 중 하나이다.
아파치 톰캣의 핵심 기능은 서블릿 컨테이너로서의 역할이다. 서블릿 컨테이너는 자바 서블릿과 JSP를 실행하는 런타임 환경을 제공하는 소프트웨어 구성 요소이다. 이는 웹 애플리케이션의 생명주기를 관리하고, HTTP 요청을 받아 해당하는 서블릿을 호출하며, 응답을 생성하여 클라이언트에게 반환하는 일련의 작업을 담당한다.
톰캣의 서블릿 컨테이너 구현체는 Catalina라는 코드명으로 불린다. Catalina는 자바 서블릿 스펙과 JSP 스펙을 준수하는 표준 구현체로서, 웹 애플리케이션 서버의 핵심 엔진 역할을 수행한다. 개발자는 WAR 파일 형식으로 패키징된 웹 애플리케이션을 Catalina에 배포하여 서비스를 제공할 수 있다.
서블릿 컨테이너는 멀티스레딩을 통해 동시에 여러 클라이언트 요청을 효율적으로 처리한다. 또한 세션 관리, 보안, 데이터베이스 연결 풀링과 같은 엔터프라이즈급 기능을 지원하여 안정적인 웹 서비스 운영을 가능하게 한다. 이러한 특성 덕분에 톰캣은 스프링 프레임워크 기반 애플리케이션을 비롯한 수많은 자바 EE 및 자바 웹 프로젝트에서 광범위하게 채택되고 있다.
Apache Tomcat은 기본적으로 서블릿 컨테이너로서의 역할이 가장 잘 알려져 있지만, 내장된 HTTP 커넥터를 통해 독립적인 웹 서버 기능도 수행한다. 이는 Coyote라는 구성 요소가 담당하며, HTTP/1.1 프로토콜을 지원하여 클라이언트의 요청을 직접 받아들이고 응답을 전송할 수 있다. 따라서 간단한 정적 콘텐츠를 호스팅하거나, JSP와 서블릿으로 구성된 동적 웹 애플리케이션을 배포할 때 별도의 외부 웹 서버 없이도 단독으로 운영이 가능하다.
그러나 대규모 상용 환경에서는 Apache HTTP Server나 Nginx와 같은 전문 웹 서버 뒤에 연결하여 사용하는 것이 일반적이다. 이는 로드 밸런싱, 정적 파일 처리 효율화, SSL/TLS 종료 등 전문 웹 서버의 고급 기능을 활용하고, Tomcat은 애플리케이션 로직 실행에 집중하도록 하기 위함이다. 이러한 구성에서 Tomcat은 AJP 프로토콜을 통해 웹 서버와 통신하며, 이 역시 Coyote 컴포넌트가 처리한다.
내장 웹 서버 기능은 개발 및 테스트 환경에서 특히 유용하다. 개발자는 복잡한 웹 서버 설정 없이도 Java 웹 애플리케이션을 빠르게 실행하고 디버깅할 수 있다. 또한, 스프링 부트와 같은 현대적인 Java 애플리케이션 프레임워크는 내장형 Tomcat을 기본 서블릿 컨테이너로 채택하여, 실행 가능한 JAR 파일 하나로 완전한 웹 애플리케이션 서버를 간편하게 구성할 수 있게 했다.
아파치 톰캣의 핵심 구성 요소인 카탈리나는 자바 서블릿과 JSP를 실행하기 위한 서블릿 컨테이너이다. 이는 자바 EE 스펙 중 서블릿 및 JSP 규격의 표준 구현체 역할을 하며, 웹 애플리케이션의 생명주기를 관리한다. 카탈리나는 웹 애플리케이션을 배포하고, 서블릿 클래스를 로드하며, HTTP 요청을 해당 서블릿에 매핑하고, 세션 관리와 보안을 처리하는 기능을 담당한다.
카탈리나의 구조는 계층적이며, 최상위 구성 요소는 서버이다. 서버는 하나 이상의 서비스를 포함하며, 각 서비스는 커넥터와 컨테이너를 묶는다. 카탈리나는 이 컨테이너 계층에 해당하며, 그 하위에는 엔진, 호스트, 컨텍스트가 존재한다. 엔진은 전체 서비스를 대표하며, 호스트는 가상 호스팅을, 컨텍스트는 개별 웹 애플리케이션을 의미한다.
이러한 모듈식 설계 덕분에 카탈리나는 유연한 구성이 가능하다. 관리자는 server.xml 설정 파일을 통해 각 계층의 구성 요소를 정의하고 연결할 수 있다. 또한 카탈리나는 JMX를 통해 모니터링과 관리를 지원하며, 내장된 관리자 웹 애플리케이션을 통해 원격에서 애플리케이션을 배포하거나 중지할 수도 있다.
카탈리나는 톰캣의 다른 주요 모듈인 코요테와 긴밀하게 협력한다. 코요테가 외부의 HTTP 요청을 받아들이면, 이를 카탈리나에 전달하여 적절한 서블릿을 실행하고, 그 결과를 다시 코요테를 통해 클라이언트에 반환한다. 이렇게 분리된 아키텍처는 성능 최적화와 기능 확장에 유리하다.
코요테는 아파치 톰캣의 HTTP 커넥터 컴포넌트이다. 이는 외부 클라이언트로부터 들어오는 HTTP 요청을 수신하고 처리하는 역할을 담당한다. 코요테는 웹 서버 기능을 수행하며, TCP/IP 소켓 연결을 관리하고, HTTP/1.1 프로토콜을 해석하여 요청을 카탈리나라는 서블릿 컨테이너로 전달한다. 이는 톰캣이 독립 실행형 웹 서버로서 동작할 수 있게 하는 핵심 요소이다.
코요테는 다양한 커넥터 구현을 제공하여 네트워크 환경에 맞게 구성할 수 있다. 가장 일반적인 것은 BIO와 NIO, APR 커넥터이다. BIO는 블로킹 방식의 입출력을 사용하는 전통적인 구현체이며, NIO는 논블로킹 입출력을 지원하여 더 많은 동시 연결을 효율적으로 처리할 수 있다. APR 커넥터는 아파치 휴대용 런타임 라이브러리를 사용하여 네이티브 코드로 성능을 최적화한다.
이 컴포넌트는 들어오는 요청을 HTTP 요청 객체로 변환하고, 카탈리나가 처리한 후 생성된 HTTP 응답 객체를 다시 클라이언트에게 보내는 바이트 스트림으로 변환하는 작업을 수행한다. 또한 SSL/TLS를 통한 HTTPS 연결 지원, 요청 압축, 커넥션 타임아웃 설정과 같은 네트워크 관련 기능도 담당한다. 코요테의 설정은 톰캣의 주요 설정 파일인 server.xml에서 이루어진다.
Jasper는 Apache Tomcat에 포함된 JSP 엔진이다. 이 엔진의 주요 역할은 JSP 파일을 Java 서블릿 소스 코드로 변환하고, 이를 컴파일하여 실행 가능한 클래스 파일을 생성하는 것이다. 사용자가 JSP 페이지를 요청하면, Jasper는 해당 페이지를 처리하여 동적인 HTML 콘텐츠를 생성해 웹 브라우저로 전송한다.
Jasper는 런타임 시 JSP 파일의 변경 사항을 감지하여 자동으로 재컴파일하는 기능을 제공한다. 이는 개발 단계에서 코드를 수정하고 저장할 때마다 서버를 재시작하지 않아도 변경 내용이 즉시 반영되도록 하여 개발 효율성을 높인다. 또한, JSP 표준 태그 라이브러리(JSTL)와 같은 태그 라이브러리를 지원하며, EL 표현식을 처리하는 기능도 포함하고 있다.
Tomcat의 버전이 업그레이드됨에 따라 Jasper 엔진도 지속적으로 개선되어 왔다. 성능 최적화, 컴파일 속도 향상, 그리고 더 엄격한 JSP 사양 준수가 주요 발전 방향이다. Jasper는 Tomcat의 핵심 하위 프로젝트 중 하나로, Catalina와 긴밀하게 통합되어 동작한다.
Apache Tomcat을 설치하고 실행하기 위해서는 CATALINA_HOME이라는 환경 변수를 설정하는 것이 일반적이다. 이 변수는 톰캣의 설치 루트 디렉토리를 가리키며, 톰캣의 시작 스크립트나 종료 스크립트가 해당 위치에서 필요한 라이브러리와 설정 파일을 찾을 수 있도록 한다.
CATALINA_HOME 변수명은 톰캣의 핵심 서블릿 컨테이너인 Catalina의 이름에서 유래했다. 톰캣의 초기 개발자인 제임스 데이비슨이 캘리포니아의 카탈리나섬을 좋아해 이 이름을 붙였다고 전해진다. 이는 다른 소프트웨어들이 주로 제품명을 변수명으로 사용하는 것(예: JAVA_HOME, ORACLE_HOME)과는 차별되는 점이다.
환경 변수를 설정하지 않고도 톰캣을 실행할 수 있지만, 특히 윈도우 시스템에서 서비스로 등록하거나, 여러 버전의 톰캣을 동시에 관리해야 하는 경우, 또는 이클립스나 인텔리제이 같은 통합 개발 환경과 연동할 때 CATALINA_HOME 설정이 중요해진다. 이 변수가 올바르게 설정되면, 명령 프롬프트나 터미널의 어느 경로에서도 startup.bat(또는 startup.sh)나 shutdown.bat(또는 shutdown.sh) 같은 스크립트를 실행하여 톰캣을 제어할 수 있다.
CATALINA_HOME 디렉토리 내에는 bin, conf, lib, logs, webapps, work 등의 주요 하위 디렉토리가 위치한다. 이 중 webapps 디렉토리는 배포할 웹 애플리케이션(WAR 파일)을 넣는 곳이며, conf 디렉토리에는 server.xml 같은 핵심 설정 파일이 포함되어 있다.
Apache Tomcat의 서버 설정은 주로 conf 디렉토리 내의 XML 구성 파일들을 통해 이루어진다. 이 파일들은 서블릿 컨테이너의 동작, 웹 서버 기능, 보안, 가상 호스트 등을 세밀하게 제어할 수 있게 해준다. 가장 핵심적인 설정 파일은 server.xml, web.xml, context.xml이다.
server.xml은 Tomcat 서버 자체의 핵심 구성을 담당한다. 이 파일에서는 HTTP 커넥터와 AJP 커넥터의 포트 및 프로토콜 설정, 서비스와 엔진 정의, 호스트 및 가상 호스트 추가, 리소스와 JNDI 데이터베이스 연결 풀 설정 등을 수정할 수 있다. 특히 Coyote 커넥터의 성능 튜닝이나 SSL/TLS 암호화 적용은 이 파일에서 주로 처리된다.
web.xml 파일은 두 가지 역할을 한다. 하나는 conf 디렉토리에 위치한 전역 web.xml로, 서버에 배포되는 모든 웹 애플리케이션에 공통적으로 적용되는 서블릿, 필터, 리스너, MIME 타입 매핑 등을 정의한다. 다른 하나는 각 웹 애플리케이션의 WEB-INF 디렉토리 내에 있는 web.xml로, 해당 애플리케이션만의 고유한 설정을 담당한다. context.xml 파일 역시 전역과 애플리케이션별로 존재하며, 데이터 소스, 환경 변수, JAR 파일 리소스와 같은 애플리케이션 컨텍스트 관련 설정을 정의한다.
서버 설정 변경 후에는 반드시 Tomcat을 재시작해야 적용된다. 또한, 로그 파일은 logs 디렉토리에 저장되며, logging.properties 파일을 통해 로그 레벨과 출력 형식을 관리할 수 있어 문제 진단에 유용하다. 이러한 구조화된 설정 방식을 통해 Java, JSP, 스프링 프레임워크 기반 애플리케이션을 안정적으로 호스팅할 수 있는 환경을 구성할 수 있다.
Apache Tomcat의 버전은 자바 서블릿 스펙과 JSP 스펙의 지원 수준에 따라 구분된다. 각 주요 버전은 특정 Java EE 또는 자카르타 EE 스펙을 구현하며, 이에 따라 필요한 JDK 버전도 결정된다. 예를 들어, Tomcat 10.x는 자카르타 EE 9 스펙(네임스페이스가 javax.*에서 jakarta.*로 변경됨)을 지원하며, Tomcat 9.x는 자바 EE 8 스펙을 지원한다.
주요 버전 | 지원 스펙 (서블릿 / JSP) | 최소 요구 JDK 버전 | 비고 |
|---|---|---|---|
Tomcat 10.x | 자카르타 서블릿 5.0 / 자카르타 서버 페이지 3.0 | JDK 8 이상 |
|
Tomcat 9.x | 서블릿 4.0 / JSP 2.3 | JDK 8 이상 | 현재 안정적인 주류 버전 |
Tomcat 8.x | 서블릿 3.1 / JSP 2.3 | JDK 7 이상 | 2018년 6월 지원 종료 |
Tomcat 7.x | 서블릿 3.0 / JSP 2.2 | JDK 6 이상 | 2021년 3월 지원 종료 |
호환성 측면에서 주의할 점은 Tomcat 10으로의 업그레이드이다. 자카르타 EE 9부터 API 패키지명이 javax.servlet에서 jakarta.servlet으로 변경되었기 때문에, 기존 자바 EE 8 이하 스펙으로 개발된 애플리케이션은 코드 수정 없이는 Tomcat 10에서 실행할 수 없다. 따라서 기존 프로젝트를 유지보수하는 경우 Tomcat 9를, 새로운 자카르타 EE 기반 프로젝트를 시작하는 경우 Tomcat 10을 선택하는 것이 일반적이다. 또한 스프링 프레임워크 5 이상의 버전은 Tomcat 8.5 이상을 필요로 한다.
Apache TomEE는 Apache Tomcat을 기반으로 하여 Java EE (현재의 Jakarta EE) 기능을 추가한 완전한 웹 애플리케이션 서버이다. Tomcat이 서블릿과 JSP 실행에 특화된 경량 서블릿 컨테이너라면, TomEE는 엔터프라이즈 애플리케이션 개발에 필요한 EJB, JPA, CDI, JAX-RS 등 다양한 자바 EE API를 통합 제공한다.
TomEE는 여러 프로파일로 제공된다. 주요 버전으로는 자바 EE 웹 프로파일 스펙을 구현한 TomEE Web Profile, 모든 자카르타 EE 스펙을 포함하는 TomEE Plus, 그리고 마이크로서비스 아키텍처에 최적화된 경량 버전인 TomEE Micro가 있다. 이는 개발자가 프로젝트의 규모와 필요에 따라 적합한 기능 세트를 선택할 수 있도록 한다.
TomEE의 핵심 장점은 Apache Tomcat의 가볍고 빠른 장점을 유지하면서도 엔터프라이즈급 애플리케이션을 구축할 수 있는 표준 기반의 풍부한 기능을 제공한다는 점이다. 스프링 프레임워크와 같은 다른 프레임워크 없이도 순수 자바 EE 표준을 사용하여 애플리케이션을 개발하고 배포할 수 있는 환경을 마련해 준다.
TomEE는 아파치 소프트웨어 재단의 톰캣 프로젝트에서 파생된 하위 프로젝트로 관리되며, 아파치 라이선스 2.0 하에 무료로 사용할 수 있다. 이는 Tomcat 생태계의 확장으로, 단순한 웹 서버를 넘어서는 완전한 애플리케이션 서버가 필요한 경우에 널리 채택되고 있다.