아파치 톰캣

**아파치 톰캣**(Apache Tomcat, 간단히 "톰캣")은 자카르타 EE의 자카르타 서블릿, 자카르타 서버 페이지, 자카르타 익스프레션 언어(Expression Language), 웹소켓, 자카르타 어노테이션(Annotations) 및 자카르타 인증(Authentication) 기술을 자유 및 오픈 소스로 구현한 것이다. 자바 코드가 실행될 수 있는 "순수 자바" HTTP 웹 서버 환경을 제공한다. 따라서 완전한 자카르타 EE 애플리케이션 서버는 아니지만, 자바 웹 애플리케이션 서버에 해당한다.

톰캣은 아파치 소프트웨어 재단의 후원 아래 개방형 개발자 커뮤니티에 의해 개발 및 유지관리되며, 아파치 라이선스 2.0 라이선스로 배포된다.

## 구성 요소
톰캣 4.x는 카탈리나(Catalina, 서블릿 컨테이너), 코요테(Coyote, HTTP 커넥터) 및 재스퍼(Jasper, JSP 엔진)와 함께 출시되었다.

### 카탈리나
카탈리나는 톰캣의 서블릿 컨테이너이다. 카탈리나는 썬 마이크로시스템즈의 서블릿 및 자바서버 페이지(JSP) 사양을 구현한다. 톰캣에서 Realm 요소는 해당 사용자에게 할당된 사용자 이름, 비밀번호 및 역할(유닉스 그룹과 유사함)의 "데이터베이스"를 나타낸다. Realm의 다양한 구현을 통해 카탈리나를 이러한 인증 정보가 이미 생성 및 유지 관리되고 있는 환경에 통합한 다음, 서블릿 사양에 설명된 대로 해당 정보를 사용하여 컨테이너 관리 보안(Container Managed Security)을 구현할 수 있다.

### 코요테
코요테는 웹 서버로서 HTTP 1.1 및 2 프로토콜을 지원하는 톰캣용 커넥터 구성 요소이다. 이를 통해 명목상 자바 서블릿 또는 JSP 컨테이너인 카탈리나가 로컬 파일을 HTTP 문서로 제공하는 일반적인 웹 서버 역할도 수행할 수 있다. 코요테는 특정 TCP 포트에서 서버로 들어오는 연결을 수신 대기하고 요청을 톰캣 엔진으로 전달하여 요청을 처리하고 요청한 클라이언트에 응답을 다시 보낸다. 또 다른 코요테 커넥터인 Coyote JK도 비슷하게 수신 대기하지만, 요청을 JK 프로토콜을 사용하여 아파치와 같은 다른 웹 서버로 전달한다. 이는 보통 더 나은 성능을 제공한다.

### 재스퍼
재스퍼는 톰캣의 JSP 엔진이다. 재스퍼는 JSP 파일을 구문 분석하여 (카탈리나가 처리할 수 있는) 서블릿 형태의 자바 코드로 컴파일한다. 런타임에 재스퍼는 JSP 파일의 변경 사항을 감지하고 이를 다시 컴파일한다.

버전 5부터 톰캣은 썬 마이크로시스템즈의 JSP 2.0 사양을 구현한 재스퍼 2를 사용한다. 재스퍼에서 재스퍼 2로 넘어오면서 다음과 같은 중요한 기능들이 추가되었다.
* JSP 태그 라이브러리 풀링(Pooling) – JSP 파일의 각 태그 마크업은 태그 핸들러 클래스에 의해 처리된다. 태그 핸들러 클래스 객체는 풀링되어 전체 JSP 서블릿에서 재사용될 수 있다.
* 백그라운드 JSP 컴파일 – 수정된 JSP 자바 코드를 다시 컴파일하는 동안에도 이전 버전을 서버 요청에 계속 사용할 수 있다. 새 JSP 서블릿의 재컴파일이 완료되면 이전 JSP 서블릿은 삭제된다.
* 포함된 페이지 변경 시 JSP 재컴파일 – 런타임에 페이지를 JSP에 삽입하거나 포함할 수 있다. JSP 파일 자체의 변경뿐만 아니라 포함된 페이지가 변경될 때도 JSP가 다시 컴파일된다.
* JDT 자바 컴파일러 – 재스퍼 2는 앤트와 `[[Javac]]` 대신 이클립스 JDT(Java Development Tools) 자바 컴파일러를 사용할 수 있다.

톰캣 7 출시와 함께 세 가지 새로운 구성 요소가 추가되었다.

### 클러스터
이 구성 요소는 대규모 애플리케이션을 관리하기 위해 추가되었다. 여러 기술을 통해 달성할 수 있는 부하분산에 사용된다. 클러스터링 지원에는 현재 JDK 버전 1.5 이상이 필요하다.

### 고가용성
라이브 환경에 영향을 주지 않고 시스템 업그레이드(예: 새 릴리스, 변경 요청) 일정을 용이하게 하기 위해 고가용성 기능이 추가되었다. 이는 메인 포트에서 메인 서버가 업그레이드되는 동안 라이브 트래픽 요청을 다른 포트의 임시 서버로 파견함으로써 수행된다. 이는 트래픽이 많은 웹 애플리케이션에서 사용자 요청을 처리하는 데 매우 유용하다.

## 기능
톰캣 9.x는 서블릿 4.0 및 JSP 2.3 사양을 구현한다.

톰캣 10.1.x는 서블릿 6.0 및 JSP 3.1 사양을 구현한다.

톰캣 11.x는 서블릿 6.1 및 JSP 4.0 사양을 구현한다.

## 역사
톰캣은 1998년 11월에 썬 마이크로시스템즈의 소프트웨어 아키텍트인 제임스 던컨 데이비드슨에 의해 서블릿 참조 구현으로 시작되었다. 그는 나중에 이 프로젝트가 오픈 소스가 되도록 도왔으며, 썬 마이크로시스템즈가 아파치 소프트웨어 재단에 프로젝트를 기부하는 데 핵심적인 역할을 했다. 아파치 앤트 소프트웨어 빌드 자동화 도구는 톰캣을 오픈 소스 프로젝트로 만드는 과정의 부작용으로 개발되었다.

데이비드슨은 처음에 이 프로젝트가 오픈 소스가 되기를 희망했고, 많은 오픈 소스 프로젝트들이 표지에 동물이 그려진 오라일리 미디어 서적과 연관되어 있었기 때문에 프로젝트 이름을 동물의 이름을 따서 짓기를 원했다. 그는 톰고양이(Tomcat)라는 이름을 생각해 냈는데, 그 이유로 이 동물이 스스로를 돌볼 수 있는 존재를 나타낸다고 판단했기 때문이다. 비록 톰캣이라는 이름은 이미 다른 오라일리 서적 제목에 사용되고 있었지만, 2003년 오라일리가 표지에 눈표범이 그려진 톰캣 책을 출판하면서 동물 표지를 보고 싶다는 그의 소망은 결국 이루어졌다.

## 커뮤니티

아파치 소프트웨어는 사용자와 개발자 메일링 리스트가 모두 참여하는 커뮤니티 프로세스의 일환으로 구축된다. 개발자 리스트는 다음 릴리스의 구축 및 테스트에 대한 논의가 이루어지는 곳이며, 사용자 리스트는 사용자가 개발자 및 다른 사용자들과 문제를 논의할 수 있는 곳이다.

무료 아파치 톰캣 리소스 및 커뮤니티 중 일부로는 Tomcatexpert.com(대규모 프로덕션 환경에서 아파치 톰캣을 운영하는 개발자와 운영자를 위해 스프링소스가 후원하는 커뮤니티)과 MuleSoft의 Apache Tomcat Resource Center(다양한 버전의 톰캣 설치, 업데이트, 구성, 모니터링, 문제 해결 및 보안에 대한 교육 가이드를 제공함)가 있다.

## 아파치 TomEE
아파치 TomEE("토미"라고 발음)는 아파치 톰캣의 엔터프라이즈 에디션(Tomcat + Java/Jakarta EE = TomEE)으로, 아파치 OpenEJB, 아파치 오픈웹빈즈, 아파치 OpenJPA, 아파치 마이페이스 등을 포함한 여러 자바 엔터프라이즈 프로젝트를 결합한 것이다. 2011년 10월, 이 프로젝트는 오라클로부터 Java EE 6 웹 프로파일의 호환 구현으로 인증을 획득했다.

## 같이 보기
* 아파치 제로니모
* 와일드플라이
* 제티 (웹 서버)
* 글래스피시
* LibriX

## 각주

## 외부 링크
* 
* 

분류:아파치 소프트웨어 재단 프로젝트
분류:자바 플랫폼, 엔터프라이즈 에디션
분류:자유 소프트웨어
분류:크로스 플랫폼 소프트웨어
분류:자바로 작성된 자유 소프트웨어
분류:아파치 라이선스 소프트웨어
분류:크로스 플랫폼 자유 소프트웨어
분류:자유 웹 서버 소프트웨어