톰캣
톰캣(Tomcat)은 아파치재단에서 제공하는 오픈소스 웹 애플리케이션 서버(WAS)이다. 정식 명칭은 아파치 톰캣(Apache Tomcat)이다. 톰캣(Tomcat)이란 수고양이를 의미한다. 아파치 톰캣 소프트웨어는 개방적이고 참여적인 환경에서 개발되었으며 Apache License 버전 2로 배포된다. 아파치 톰캣 프로젝트는 전 세계의 최고의 개발자들과 협력하기 위한 것이다. 참여 규칙은 이곳에 나와 있으며, 아파치 톰캣 소프트웨어는 다양한 산업 및 조직에서 수많은 대규모 미션 크리티컬 웹 애플리케이션을 지원하고 있다. 이 사용자 중 일부와 내용은 PoweredBy 페이지에 나열되어 있다.
목차
개요
흔히 사용하는 웹페이지는 아파치와 톰캣으로 이루어져 있다. 리눅스 서버를 만들거나 웹서버를 만들다 보면, 아파치 톰캣을 설치하라고 하며, 아파치(Apache)와 톰캣(Tomcat)의 기능과 차이를 아는 것 또한 중요하며, 동적(dynamic)인 웹을 만들기 위한 웹 컨테이너, 서블릿 컨테이너라고 불리며, 웹서버에서 정적으로 처리해야 할 데이터를 제외한 JSP, ASP, PHP 등은 웹 컨테이너(톰캣)에 전달한다. 톰캣을 사용하면 동적인 데이터 처리가 가능하며, DB 연결, 데이터 조작, 다른 응용프로그램과 상호 작용이 가능하다. 8080 포트로 처리된다. 톰캣이 아파치 기능을 일부 가져오기 때문에 합쳐 부른다.
역사
톰캣은 선 마이크로시스템즈의 소프트웨어 설계자인 제임스 덩컨 데이비슨에 의한 서블릿 참조 구현으로 출발했다. 그는 이후 이 프로젝트를 오픈소스화하는 데 도움을 주었으며 선 마이크로시스템즈가 아파치 소프트웨어 재단에 기부하는 데 핵심적인 역할을 했다. 아파치 앤트 소프트웨어 빌드 자동화 툴은 오픈 소스 프로젝트로 톰캣을 만든 것의 부작용으로서 개발되었다. 데이비슨은 처음에 이 프로젝트가 오픈소스가 되기를 바랐고 많은 오픈소스 프로젝트들이 O'Reilly와 관련된 책들을 가지고 있었기 때문에 그는 이 프로젝트의 이름을 동물의 이름을 따서 짓기를 원했다. 그는 톰캣이 자신을 지탱할 수 있는 무언가를 상징한다고 생각했기 때문에 톰캣을 생각해냈다. 톰캣은 이미 또 다른 오렐리 타이틀을 위해 사용되고 있었지만, 2003년 오렐리가 눈표범과 함께 톰캣 책을 출판하면서 동물 표지를 보고 싶은 그의 소망은 결국 실현되었다.[1]
종류
아파치
아파치(Apache) 소프트웨어 재단에서 오픈 소스로 라이선스에 따라 배포되어 자신의 마음대로 사용할 수 있는 Http 웹 서버이다. 오픈소스 커뮤니티에서 만든 서버를 통틀어 아파치 서버로 불러온다. 웹서버는 클라이언트의 요청을 기다리고, 요청에 대한 데이터를 만들어서 응답하는 역할을 한다. 이때의 데이터는 정적인 데이터인 html, css, 이미지 등으로 한정된다.
톰캣
가장 일반적이면서, 많이 사용되고있는 WAS(웹 애플리케이션 서버)이다.WAS는 컨테이너, 웹 컨테이너, 서블릿 컨테이너라고도 부르며, 웹서버와 웹 컨테이너의 결합으로 다양한 기능을 컨테이너에 구현하며 다양한 역할을 수행한다. 웹 컨테이너는 클라이언트의 요청이 있을 때 내부 프로그램을 통해 결과를 만들어내고 이곳을 다시 클라이언트에게 돌려주는 역할을 한다.
차이점
그 이유는 목적이 다르기 때문이며 웹 서버는 정적인 데이터를 처리하는 서버이다. 이미지나 단순 html 파일과 같은 리소스를 제공하는 서버는 웹 서버를 통하면 WAS를 이용하는 것보다 빠르고 안정적이다. WAS는 동적인 데이터를 처리하는 서버이며 DB와 연결되어 데이터를 주고받거나 프로그램으로 데이터 조작이 필요한 경우에는 와스를 활용해야 한다.
아파치 톰캣이라 불리는 이유
톰캣에서 아파치의 기능(웹서비스데몬, Httpd[2])를 포함하고 있기 때문에. 그렇지만 톰캣이 아파치의 모든 기능을 포함하고 있는 것은 아니며, 보통 아파치 톰캣이라 부를때 톰캣 앞에 아파치가 붙는 이유는 많은 개발자가 어플리케이션 서버를 톰캣으로 이용하는 경우, 스태틱 파일인 CSS, JS, HTML, 이미지는 톰캣앞에 아파치 웹 서버인 Httped를 두어 처리하며, 외부 요청은 Apache Httpd[2]가 받고, 톰캣 내에서 처리할 자바 애플리케이션만 톰캣으로 다시 전달해서 처리하고 그 외의 리소스는 Apache Httpd[2]가 직접 처리하게 만들어야 성능이 좋다고 생각하였기에 아파치가 앞에 붙게 되었다.
특징
- Tomcat은 JSP 환경을 포함하고 있는 서블릿(Servlet) 컨테이너이다.
- Servlet 컨테이너는 사용자 입장에서 서블릿(Servlet)을 유지하고 호출하여 실행하는 쉘이다.
- Tomcat은 크게 3가지로 컨테이너로 구분한다.
Stand-alone servlet containers
내장된 웹서버의 기능을 사용하는 것이며, 기능 면에서 자바 웹서버의 부분인 서블릿 컨테이너와 자바 근간의 웹 서버를 사용한다.
In-process servlet containers
서블릿 컨테이너는 웹서버 플러그인과 자바 컨테이너를 구현하며, 웹서버 플러그인은 웹서버의 주소 공간 내에 JVM을 열고 그 안에 자바 컨테이너가 실행되도록 한다. 다중 스레드의 단일 프로세스 서버에 적당하고 퍼포먼스도 좋긴 하나 확장성의 한계가 있다.
Out-of-process servlet containers
웹서버 플러그인과 웹서버의 외부 JVM에서 실행하는 JAVA 컨테이너 구현하였으며, 웹서버 플러그인과 자바 컨테이너 JVM은 몇몇 IPC[3]를 사용해서 통신 Out-of-process 엔진의 반응 시간은 in-process만큼 좋지 않지만, out-of-process 엔진은 확장성과 안전성 면은 In-process보다 좋다.
구성 요소
- 카탈리나
- 카탈리나는 톰캣의 서블릿 컨테이너다. 카탈리나는 서블릿과 자바 서버 페이지(JSP, JAVA Server Page)에 대한 선 마이크로시스템즈의 사양을 구현한다. 톰캣에서 영역 요소는 해당 사용자에게 할당된 사용자 이름, 암호 및 역할의 "데이터베이스"를 나타낸다(유닉스 그룹과 유사함). 서로 다른 영역의 구현은 카탈리나를 그러한 인증 정보가 이미 생성되고 유지되고 있는 환경에 통합한 다음, 서블릿 규격에 설명된 대로 컨테이너 관리 보안을 구현하는 데 사용할 수 있게 한다.
- 코요테
- 코요테는 웹서버로서 HTTP 1.1 프로토콜을 지원하는 톰캣용 커넥터 컴포넌트다. 이것은 명목상 자바 서블릿 또는 자바 서버 페이지 컨테이너인 카탈리나가 HTTP 문서로서 로컬 파일을 제공하는 평범한 웹 서버 역할도 할 수 있게 해준다. 코요테는 특정 TCP 포트의 서버로 들어오는 연결을 청취하고 톰캣 엔진에 요청을 전달하여 요청을 처리하고 요청 클라이언트에 응답을 다시 보낸다. 또 다른 코요테 커넥터인 코요테 JK는 비슷하게 듣지만 대신 JK 프로토콜을 사용하여 아파치와 같은 다른 웹 서버에 요청을 전달한다. 이것은 보통 더 나은 성능을 제공한다.
- 재스퍼
- 재스퍼는 톰캣의 자바 서버 페이지 엔진이다. 재스퍼는 자바 서버 페이지 파일을 구문 분석하여 서블릿으로 자바 코드로 컴파일한다. 재스퍼는 런타임에 자바 서버 페이지 파일의 변경 사항을 감지하여 다시 컴파일한다.
- 자바 서버 페이지 태그 라이브러리 풀링
- 자바 서버 페이지 파일의 각 태그 표시는 태그 처리기 클래스에 의해 처리된다. 태그 핸들러 클래스 객체는 풀링하여 전체 자바 서버 페이지 서블릿에 재사용할 수 있다.
- 백그라운드 자바 서버 페이지 컴파일
- 수정된 자바 서버 페이지 자바 코드를 다시 컴파일하는 동안 서버 요청에 대해 이전 버전을 계속 사용할 수 있음 이전 자바 서버 페이지 서블릿은 새로운 자바 서버 페이지 서블릿의 재컴파일 작업이 완료되면 삭제된다.
- 자바 개발 도구 자바 컴파일러
- 재스퍼 2는 앤트와 자바 대신 이클립스 자바 개발 도구(JDT, Java Development Tools) 자바 컴파일러를 사용할 수 있다.
- 클러스터
- 이 구성요소는 대형 응용프로그램을 관리하기 위해 추가되었다. 그것은 많은 기법을 통해 달성할 수 있는 부하 분산에 사용된다. 클러스터링 지원에는 현재 JDK 버전 1.5 이상이 필요하다.
- 고가용성
- 실시간 환경에 영향을 주지 않고 시스템 업그레이드(예: 새로운 릴리스, 변경 요청) 일정을 쉽게 예약할 수 있도록 고가용성 기능이 추가되었다. 이것은 메인 서버가 메인 포트에서 업그레이드되는 동안 다른 포트의 임시 서버에 라이브 트래픽 요청을 전송함으로써 이루어진다. 트래픽이 많은 웹 애플리케이션에서 사용자 요청을 처리하는 데 매우 유용하다.
- 웹 애플리케이션
- 다양한 환경 전반에 걸친 배포 지원을 추가하기 위해 시스템 기반 웹 애플리케이션 개선뿐만 아니라 사용자도 추가했다. 네트워크 전체의 애플리케이션뿐만 아니라 세션 관리도 시도한다. 아파치 톰캣과 함께 많은 추가 구성요소를 사용할 수 있다. 이러한 구성요소는 사용자가 필요한 경우 또는 미러 중 하나에서 다운로드할 수 있는 경우에 제작할 수 있다.[1]
버전
시리즈 | 선언된 안정 | 설명 | 최신 릴리즈 | 최신 릴리즈 날짜 | 끝난 날짜 |
---|---|---|---|---|---|
2.0 | 1998 | 톰캣은 1998년 11월 선 마이크로시스템스의 소프트웨어 설계자인 제임스 던컨 데이비슨이 서블릿 참조 구현으로 시작했다. | |||
3.0 | 1999 | 최초 공개. 기증된 선 자바 웹 서버 코드와 ASF 및 구현 서블릿 2.2 및 자바 서버 페이지 1.1 규격의 병합. | 3.3.2 | 2004-03-09 | |
4.0 | 2002-09-06 | 서블릿 2.3 및 자바 서버 페이지 1.2 사양을 지원하는 첫 번째 아파치 톰캣 릴리즈. | 4.1.40 | 2009-06-25 | |
5.0 | 2003-12-03 | 서블릿 2.4, 자바 서버 페이지 2.0 및 EL 1.1 사양을 지원하는 첫 번째 아파치 톰캣 릴리즈. | 5.0.30 | 2004-08-30 | |
5.5 | 2004-11-10 | J2SE 5.0용으로 설계됨. 이클립스 자바 개발 도구를 포함하면 톰캣은 완전한 자바 개발 키트를 설치하지 않고도 실행할 수 있다. | 5.5.36 | 2012-10-10 | |
6.0 | 2007-02-28 | 서블릿 2.5, 자바 서버 페이지 2.1 및 EL 2.1 사양을 지원하는 첫 번째 아파치 톰캣 릴리즈. | 6.0.53 | 2017-04-07 | 2016-12-31 |
7.0 | 2011-01-14 | 서블릿 3.0, 자바 서버 페이지 2.2, EL 2.2 및 웹소켓 사양을 지원하는 첫 번째 아파치 톰캣 릴리즈. | 7.0.105 | 2020-07-07 | 2021-03-31 |
8.0 | 2014-06-25 | 서블릿 3.1, 자바 서버 페이지 2.3 및 EL 3.0 사양을 지원하는 첫 번째 아파치 톰캣 릴리즈. | 8.0.53 | 2018-07-05 | 2018-06-30 |
8.5 | 2016-06-13 | HTTP/2, JSSE용 OpenSSL, TLS 가상 호스팅 및 JASPIC 1.1 지원 추가. Java EE 8 지연 후 톰캣 9에서 생성됨. | 8.5.57 | 2020-07-05 | |
9.0 | 2018-01-18 | 서블릿 4.0 사양을 지원하는 첫 번째 아파치 톰캣 릴리즈. | 9.0.37 | 2020-07-05 | |
10.0 | 알 수 없음 | 서블릿 5.0, JSP 3.0, EL 4.0, 웹소켓 2.0 및 Authentication 2.0 사양을 지원하는 첫 번째 아파치 톰캣 릴리즈. | 10.0.0-M7 | 2020-07-05 |
현황
이터널 블루(EternalBlue, ETERNALBLUE)라고 알려진 익스폴로잇(exploit)의 새로운 버전 하나가 중국의 기업 수백 곳을 타격하고 있으며, 이러한 캠패인은 암호화폐를 노리는 크림토재킹을 위주로 한 공격으로, 비피(Beapy)라고 불린다. 비피는 웹서버를 노리기도 하며, 웹서버를 호스트로 활용하기 때문이다. 초기 미미캐츠(Mimikatz) 모듈을 사용하여 크리덴셜을 훔치기도 하며, 아파치 톰캣과 오라클 웹 로직 서버를 집중적으로 공략하였다. 이러한 내용은 차후 더 위험한 공격으로 발전하는 가능성을 내포하고 있다. 암호화폐 채굴인 만큼 데이터가 밖으로 새 나가거나 유출될 걱정은 없는 게 정상이지만, 암호화폐 채굴은 시스템과 네트워크의 성능과 속도를 크게 저하함으로써 시간과 자원을 낭비하게 하며, 비피의 경우는 크리덴셜까지 훔치기 때문에 다른 암호화폐 채굴 공격보다 더 위험하고 전문가는 말한다. 방지하기 위해 보안솔루션을 설치하고, 직원들을 교육해야 하며, 회사 차원에서 시스템 패치를 점검하는 것이 중요하다고 알렸다.
각주
참고 자료
- 톰캣 공식홈페이지 - http://tomcat.apache.org/
- Apache Tomcat Wikipedia - https://en.wikipedia.org/wiki/Apache_Tomcat#Web_application
- Sungbin.k, 〈WAS와 웹서버의 차이 – 톰캣과 아파치를 구별하지 못하는 사람을 위해〉, 《BLOG FOR ME》, 2015-02-15
- dongdong_, 〈아파치와 톰캣의 차이〉, 《tistory》, 2016-07-02
- Noon Gam, 〈아파치 톰캣이란 ?〉, 《DISQUS 블로그》, 2018-07-09
- 문가용 기자, 〈NSA의 해킹 툴 활용한 대규모 암호화폐 채굴 캠페인 주의〉, 《보안뉴스》, 2019-04-26
- httpd 위키백과 문서 - https://ko.wikipedia.org/wiki/Httpd
- 매운떡볶이튀김 〈톰캣〉, 《tistory》, 2013-07-21
같이 보기