아파치 톰캣

IT 위키
아파치 톰캣(Tomcat) 로고

아파치 톰캣(Apache Tomcat)은 아파치 재단에서 제공하는 공개 소프트웨어 웹 애플리케이션 서버(WAS)이다. 톰캣(Tomcat)이란 수고양이를 의미한다. 아파치 톰캣 소프트웨어는 개방적이고 참여적인 환경에서 개발되었으며 아파치 라이센스 버전 2로 배포된다. 아파치 톰캣 프로젝트는 전 세계의 최고의 개발자들과 협력하기 위한 것이다. 참여 규칙은 이곳에 나와 있다.

개요[편집 | 원본 편집]

흔히 사용하는 웹 서비스는 아파치 웹 서버와 아파치 톰캣, 그리고 DBMS로 이루어진 경우가 많다. 기업에서 가장 흔하게 사용하는 Web - WAS - DB구조에서 Web은 아파치 웹 서버, WAS는 아파치 톰캣을 사용하는 것이다.

WAS는 동적(dynamic)인 웹을 만들기 위한 웹 컨테이너, 서블릿 컨테이너라고 불리며, 웹 서버에서 정적으로 처리해야 할 데이터를 제외한 요청은 JSP, ASP, PHP 등은 WAS에 전달한다. 톰캣을 사용하면 동적인 데이터 처리가 가능하며, DB 연결, 데이터 조작, 다른 응용프로그램과 상호 작용이 가능하다. 톰캣은 기본적으로 8080 포트로 처리된다. 참고로 톰캣 또한 웹 서버의 기본적인 기능을 지원하므로 웹 서버 없이 톰캣만으로 웹서비스를 구현할 수도 있다.

역사[편집 | 원본 편집]

톰캣은 선 마이크로시스템즈의 소프트웨어 설계자인 제임스 덩컨 데이비슨에 의한 서블릿 참조 구현으로 출발했다. 그는 이후 이 프로젝트를 오픈소스화하는 데 도움을 주었으며 선 마이크로시스템즈가 아파치 소프트웨어 재단에 기부하는 데 핵심적인 역할을 했다. 아파치 앤트 소프트웨어 빌드 자동화 툴은 오픈 소스 프로젝트로 톰캣을 만든 것의 부작용으로서 개발되었다. 데이비슨은 처음에 이 프로젝트가 오픈소스가 되기를 바랐고 많은 오픈소스 프로젝트들이 O'Reilly와 관련된 책들을 가지고 있었기 때문에 그는 이 프로젝트의 이름을 동물의 이름을 따서 짓기를 원했다. 그는 톰캣이 자신을 지탱할 수 있는 무언가를 상징한다고 생각했기 때문에 톰캣을 생각해냈다. 톰캣은 이미 또 다른 오렐리 타이틀을 위해 사용되고 있었지만, 2003년 오렐리가 눈표범과 함께 톰캣 책을 출판하면서 동물 표지를 보고 싶은 그의 소망은 결국 실현되었다.[1]

특징[편집 | 원본 편집]

기본적으로 톰캣은 자바 서블릿 및 자바 서버 페이지 컨테이너이다. 자바 서블릿은 코드와 비즈니스 로직을 캡슐화하고 요청과 응답을 자바 서버에서 처리하는 방법을 정의한다. 자바 서버 페이지는 서버 측 뷰 렌더링 기술이다. 개발자는 서블릿 또는 자바 서버 페이지의 페이지를 작성한 다음 톰캣이 라우팅을 처리하도록 한다. 톰캣에는 웹 서버인 코요테 엔진도 포함되어 있다. 코요테 덕분에 Java Persistence API(JPA)를 비롯한 다양한 자바 엔터프라이즈 사양과 기능을 포함하도록 톰캣을 확장할 수 있다. 톰캣에는 또한 TomEE라는 확장된 버전이 있으며, 이는 더 많은 엔터프라이즈 기능을 포함한다. 서블릿 컨테이너는 사용자 입장에서 서블릿을 유지하고 호출하여 실행하는 쉘이다. 톰캣은 크게 3가지로 컨테이너로 구분한다.[2]

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]

버전[편집 | 원본 편집]

아파치 톰캣 버전[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

설치[편집 | 원본 편집]

톰캣을 설치하기 위한 최소 사전 요구 사항이 있다. JAVA_HOME 환경이 설정된 JDK 버전 1.8 이상을 설치하면 되고 선택적으로 Windows PATH에 JDK의 bin 폴더를 추가하면 된다. JDK가 설치되어 있는지 또는 어떤 버전인지 잘 모를 경우 명령 프롬프트를 열고 java -version을 입력한다. JDK가 설치된 경우 이 명령은 버전 및 빌드 세부 정보를 표시한다.

C:exampletomcat-installbin>java -version
java version "1.8.0"
Java(TM) SE Runtime Environment (build pwa6480sr3fp20-20161019_02(SR3 FP20))
IBM J9 VM (build 2.8, JRE 1.8.0 Windows 10 amd64-64 Compressed References 20161013_322271 (JIT enabled, AOT enabled)
J9VM - R28_Java8_SR3_20161013_1635_B322271
JIT - tr.r14.java.green_20161011_125790
GC - R28_Java8_SR3_20161013_1635_B322271_CMPRSS
J9CL - 20161013_322271)
JCL - 20161018_01 based on Oracle jdk8u111-b14

톰캣은 Apache.org에서 프로젝트의 다운로드 페이지에서 얻을 수 있다. 컴퓨터 아키텍처와 일치하는 zip 파일을 찾는다. 톰캣 설치 방법에 대한 이 예는 64비트 Windows Xeon를 예로 64비트 옵션을 선택했다. 파일의 압축을 풀고 Tomcat-9 폴더 이름을 바꾼다. 그런 다음 Tomcat-9 폴더를 \downloads 디렉토리에서 파일 시스템의 더 적합한 위치에 복사한다.

설치 홈 디렉토리[편집 | 원본 편집]

  • 톰캣 환경 변수
톰캣을 사용하는 애플리케이션은 Catalina_HOME 환경 변수 값을 검사하여 애플리케이션 서버의 위치를 찾는다. 그리고 CATLINA_HOME이라는 새 환경 변수를 생성하여 C:\_tools\tomcat을 가리키도록 한다. startup.bat 및 shutdown.bat 같은 톰캣 유틸리티를 명령 프롬프트 및 Bash 셸에 전체적으로 사용할 수 있도록 하려면 톰캣의 \bin 디렉토리를 Windows PATH에 저장하면 되지만 이 작업은 필요하지 않다.
  • 톰캣 서버를 시작하는 방법
톰캣의 \bin 디렉토리에서 명령 프롬프트를 열고 startup.bat 명령을 실행하기만 하면 된다. 그러면 톰캣이 시작되고 http://localhost:8080을 통해 Tomcat에 액세스할 수 있다. 아파치 톰캣 랜딩 페이지가 localhost:8080에 표시되는지 확인한 후 http://localhost:8080/예제/jsp/로 이동하고 스눕 서블릿을 실행하는 옵션을 찾는다. 이 톰캣 예제 서블릿은 브라우저와 HTTP 요청에 대한 다양한 세부 정보를 인쇄한다. 일부 값은 null로 반환될 수 있지만 괜찮다. 페이지가 나타나면 톰캣 설치의 정확성을 검증한 것이다.[4]
example@tutorial MINGW64 /c/example/tomcat-9/bin
$ ./startup.bat
Using CATALINA_BASE: “C:\_tools\tomcat-9”
Using CATALINA_HOME: “C:\_tools\tomcat-9”
Using CATALINA_TMPDIR: “C:\_tools\tomcat-9\temp”
Using JRE_HOME: “C:\IBM\WebSphere\AppServer\java\8.0”
Using CLASSPATH: “C:\_tools\tomcat-9\bin\bootstrap.jar;C:\_tools\tomcat-9\bin\tomcat-juli.jar”

장점[편집 | 원본 편집]

  • 아파치 소프트웨어 재단에서 개발되는 자바 애플리케이션을 위한 대표적인 오픈소스 WAS 제품이다.
  • 독립적으로 사용이 가능하며, 아파치 웹서버와 IIS 등의 웹서버와 연동이 가능하다.
  • 상용 WAS 제품 보다도 가볍고 빠른 성능을 제공한다.
  • WAS 제품으로 세계에서 가장 많이 사용되는 제품이다.[5]

현황[편집 | 원본 편집]

이터널 블루(EternalBlue, ETERNALBLUE)라고 알려진 익스폴로잇(exploit)의 새로운 버전 하나가 중국의 기업 수백 곳을 타격하고 있으며, 이러한 캠패인은 암호화폐를 노리는 크림토재킹을 위주로 한 공격으로, 비피(Beapy)라고 불린다. 비피는 웹서버를 노리기도 하며, 웹서버를 호스트로 활용하기 때문이다. 초기 미미캐츠(Mimikatz) 모듈을 사용하여 크리덴셜을 훔치기도 하며, 아파치 톰캣과 오라클 웹 로직 서버를 집중적으로 공략하였다. 이러한 내용은 차후 더 위험한 공격으로 발전하는 가능성을 내포하고 있다. 암호화폐 채굴인 만큼 데이터가 밖으로 새 나가거나 유출될 걱정은 없는 게 정상이지만, 암호화폐 채굴은 시스템과 네트워크의 성능과 속도를 크게 저하함으로써 시간과 자원을 낭비하게 하며, 비피의 경우는 크리덴셜까지 훔치기 때문에 다른 암호화폐 채굴 공격보다 더 위험하고 전문가는 말한다. 방지하기 위해 보안솔루션을 설치하고, 직원들을 교육해야 하며, 회사 차원에서 시스템 패치를 점검하는 것이 중요하다고 알렸다.

참고 자료[편집 | 원본 편집]

같이 보기[편집 | 원본 편집]

각주[편집 | 원본 편집]

  1. 1.0 1.1 1.2 Apache Tomcat Wikipedia - https://en.wikipedia.org/wiki/Apache_Tomcat#Web_application
  2. Matthew Tyson, 〈What is Tomcat? The original Java servlet container〉, 《infoworld》, 2019-12-19
  3. TCP/IP 소켓
  4. Cameron McKenzie, 〈How to install Tomcat as your Java application server〉, 《TheServerSide》, 2019-05-05
  5. 세계에서 가장 많이 사용되는 WAS – APACHE TOMCAT〉, 《오픈나루》