Top

톰캣 최종분석

  • 원서명How Tomcat Works (ISBN 097521280x)
  • 지은이Budi Kurniawan, Paul Deck
  • 옮긴이이태상
  • ISBN : 8989975565
  • 28,000원
  • 2005년 03월 02일 펴냄 (절판)
  • 페이퍼백 | 458쪽 | 190*255mm

판매처

  • 현재 이 도서는 구매할 수 없습니다.

책 소개

소스 파일은 아래 깃허브 페이지에서 내려 받으실 수 있습니다.
(https://github.com/AcornPublishing/tomcatt)

<책 소개>
이 책은 톰캣의 사용 방법(how to use Tomcat)이 아닌, 톰캣의 작동 원리(how Tomcat works)를 설명하는 유일한 책이다. J2EE 시스템 관리자는 관리 기법과 커스터마이징에 대한 힌트를, J2EE 애플리케이션 개발자는 웹 컨테이너 안에서의 애플리케이션의 구동 원리를, Java 개발자는 상용 제품 수준의 서버 애플리케이션을 개발하는 방법을 배울 수 있다. 저자는 놀랍도록 쉬운 방법으로 서블릿 엔진이 실제 구현된 모습을 설명하고 있으며, 여러분이 고급 엔지니어나 개발자가 되는 데 커다란 도움을 줄 것이다.

■ 톰캣 설정 완벽 이해
■ 서블릿 컨테이너에 대한 연구
■ 톰캣 모듈의 확장
■ 개발자만의 톰캣 컴포넌트 개발



<이 책의 내용>
톰캣 최종분석에서는 단순한 톰캣 설정을 넘어 많은 정보를 얻을 수 있다. 이 책에서는 톰캣 4와 5를 해부해 각 컴포넌트의 내부 작동 원리를 파헤쳐본다. 책을 다 읽고 나면 기존의 컴포넌트를 확장하는 것 뿐 아니라 컴포넌트를 직접 개발할 수도 있을 것이다.

특히 이 책엔 다음과 같은 내용이 들어있다.

♦ 자바 웹서버 개발방법
♦ 각 서블릿에 맞게 톰캣이 생성하는 인스턴스들
♦ SingleThreadModel 인터페이스 구현 서블릿에 대한 톰캣의 운영방법
♦ 서블릿 컨테이너의 두 가지 주요 모듈: 커넥터와 컨테이너
♦ 커넥터 확장 및 직접개발 방법
♦ 네 가지 컨테이너: 엔진, 호스트, 컨텍스트, 래퍼
♦ 톰캣의 세션관리법 및 분산 환경에서의 세션관리 확장, 사용방법
♦ 보안영역과 로그인 설정 원리
♦ 톰캣의 설정 파일(server.xml) 처리방법 및 다이제스터를 사용한 XML 요소의 자바객체 변환방법
♦ 톰캣의 종료 후크
♦ JMX, 아파치 커먼스 모델러, 톰캣의 JMX 관리자원


<부록CD 포함>

- 이 책의 소스코드
- JDK 1.4
- 톰캣 4와 5의 소스코드
- 이클립스 3.0


<누구를 위한 책인가>

자바 기술과 관련된 일을 하거나 아래와 같은 항목에 해당된다면 누구나 흥미를 끌만한 책이다.

► 서블릿/JSP 프로그래머나 톰캣 사용자, 서블릿 컨테이너의 작동 원리에 관심이 있는 분들
► 톰캣 개발에 직접 참여하기 위해 현재까지의 톰캣 소스에 대해 분석할 필요를 느끼는 분들
► 웹 개발에 관여해 본 적은 없으나 일반적인 소프트웨어가 어떻게 개발되는지 관심있는 분들 - 톰캣과 같은 대형 애플리케이션이 어떻게 설계되고 개발되는지 배울 수 있다.
► 톰캣을 설정하거나 직접 수정해서 사용할 필요를 느끼는 분들

책의 내용을 이해하려면, 우선 서블릿 자바의 객체 지향 개념과 서블릿 프로그래밍에 대해 알고 있어야 한다. 서블릿 프로그래밍에 대해 잘 알지 못하는 독자라면, 본 저자의 ‘Java for the Web with Servlets, JSP and EJB’와 같은 서블릿 관련 서적들을 참고하기 바란다. 이 책의 각 장에서는 그 장의 주제를 이해하는 데 필요한 배경지식을 먼저 설명한다.


<장별 요약>
1장은 간단한 HTTP 서버에 대해 설명한다. 실제로 작동하는 HTTP 서버를 직접 빌드하기 위해서는, java.net 패키지에 있는 2개의 클래스인 Socket과 ServerSocket의 내부 작동 원리를 알아야 한다. 여러분이 예제 애플리케이션을 이해할 수 있도록 이 두 클래스에 대한 배경지식을 제공한다.

2장은 간단한 서블릿 컨테이너의 작동 방식을 설명한다. 정적 자원뿐 아니라 간단한 서블릿도 서비스할 수 있는 2개의 서블릿 컨테이너 애플리케이션을 제공한다. 특히 요청 및 응답 객체를 생성하는 방법과 이를 서블릿의 service 메소드에 전달하는 방법을 배우게 될 것이다. 또한 서블릿 컨테이너 안에서 운영될 수 있는, 즉 브라우저에서 직접 호출할 수 있는 하나의 서블릿을 제공할 것이다.

3장은 톰캣 4의 기본 커넥터를 간략화한 버전의 커넥터를 보여준다. 이 애플리케이션은 4장에서 설명할 커넥터를 이해하는 데 필요한 학습 도구의 역할을 할 것이다.

4장은 톰캣 4의 기본 커넥터에 대해 설명한다. 이 커넥터는 코요테(coyote)라 부르는 빠른 성능의 커넥터의 등장으로 디프리케이트된 것이지만, 그럼에도 불구하고 이 기본 커넥터는 커넥터를 쉽게 이해하는 데 큰 도움이 된다.

5장은 컨테이너 모듈에 대해 설명한다. 컨테이너는 org.apache.catalina.Container 인터페이스에 의해 대변되며, 엔진(engine), 호스트(host), 컨텍스트(context), 래퍼(wrapper)라는 네 종류가 존재한다. 5장에서는 각 컨텍스트와 래퍼를 사용하는 2개의 애플리케이션을 제시한다.

6장은 Lifecycle 인터페이스를 설명한다. 이 인터페이스는 카탈리나 컴포넌트의 생명주기를 정의하며, 하나의 컴포넌트에서 발생한 이벤트를 다른 컴포넌트에 전달하는 세련된 방법을 제공한다. 추가로, Lifecycle 인터페이스는 한 번의 시작과 중지로 카탈리나의 모든 컴포넌트를 시작 및 중지시킬 수 있는 세련된 메커니즘을 제공한다.

7장은 에러 메시지나 그 밖의 메시지들을 기록하는 컴포넌트인 로거(logger)에 대해 배운다.

8장은 로더(loader)에 대해 설명한다. 로더는 중요한 카탈리나의 모듈로서, 웹 애플리케이션이 사용하는 서블릿 및 클래스를 로드한다. 애플리케이션 재로딩이 어떻게 수행되는지도 설명한다.

9장은 세션 관리에 있어서 사용자의 세션을 관리하는 컴포넌트인 매니저에 대해 설명한다. 다양한 매니저의 종류에 대해 설명하며, 세션 객체를 저장장치에 지속적으로 저장하는 방법을 알려준다. 9장의 끝 부분에서는 어떤 정보를 세션 객체에 저장하는 서블릿을 실행하기 위해, StandardManager 인스턴스 사용 방법을 예제 애플리케이션을 통해 배우게 될 것이다.

10장은 특정 컨텐츠에 대한 접근을 제한하기 위한 웹 애플리케이션의 보안에 대해 설명한다. 여러분은 보안과 관련해 보안 주체(pincipals), 보안 역할(roles), 로그인 설정(login config), 인증자(authenticators) 등에 대한 개념을 배우게 될 것이다. 또한, StandardContext 객체에 인증자 밸브를 설치하고 기본 인증 방식을 사용해 사용자를 인증하는 예제 애플리케이션을 작성해 볼 것이다.

11장은 웹 애플리케이션 내의 서블릿을 대변하는 org.apache.catalina.core.StandardWrapper 클래스에 대해 자세히 설명한다. 특히 필터와 서블릿의 service 메소드가 호출되는 원리를 설명할 것이다. 11장에서 제시하는 애플리케이션은 서블릿을 대변하는 StandardWrapper 인스턴스를 사용하는 예제다.

12장은 웹 애플리케이션을 대변하는 org.apache.catalina.core.StandardContext 클래스에 대해 설명한다. 특히 StandardContext 객체를 설정하는 방법, 각 HTTP 요청이 들어왔을 때 발생하는 일들, 자동 재로딩의 원리, 그리고 연관된 컴포넌트들에서 정기적인 작업을 수행하는 스레드를 톰캣 5가 어떻게 공유해 사용하는지를 설명할 것이다.

13장은 남은 2개의 컨테이너인 호스트와 엔진에 대해 설명하고 이 두 컨테이너의 표준 구현 클래스인 org.apache.catalina.core.StandardHost와 org.apache.catalina.core.StandardHost 클래스에 대해서도 알려준다.

14장은 서버 컴포넌트 및 서비스 컴포넌트에 대해 설명한다. 서버는 서블릿 컨테이너 전체에 대해 세련된 시작 및 중지 방법을 제공한다. 서비스는 하나의 컨테이너와 하나 이상의 커넥터들을 보유하는 컴포넌트이다. 14장에서 제시하는 애플리케이션은 서버와 서비스를 사용하는 방법을 보여줄 것이다.

15장은 다이제스터(Digester)를 통해 웹 애플리케이션의 설정이 어떻게 이뤄지는지를 설명한다. 다이제스터는 아파치 소프트웨어 재단의 매우 흥미로운 오픈소스 프로젝트이다. 다이제스터를 잘 모르는독자들을 위해, 15장의 앞부분에서 다이제스터 라이브러리를 소개하고, 이 라이브러리를 사용해 어떻게 XML 문서가 자바 객체로 변환되는지를 설명한다. 그 다음 StandardContext 인스턴스를 설정하는 객체인 ContextConfig에 대해 배워본다.

16장은 사용자가 톰캣을 종료할 때 종료 명령을 써서 올바르게 끝내든 단순히 콘솔을 닫아버려 일방적으로 중지하든 간에, 필요한 뒤처리(clean-up)를 항상 할 수 있게 하는 종료 후크(shutdown hook)에 대해 설명한다.

17장은 배치 파일(batch file)이나 셸 스크립트(shell script)를 써서 톰캣을 시작 또는 중지하는 방법에 대해 설명한다.

18장은 웹 애플리케이션을 배치하고 설치하는 책임을 갖는 배치자(deployer)에 대해 설명한다.

19장은 ContainerServlet이라고 하는 특별한 인터페이스에 대해 설명한다. ContainerServlet은 서블릿으로 하여금 카탈리나의 내부 객체에 접근가능케 한다. 배치된 애플리케이션을 관리할 수 있는 관리자 애플리케이션(manager application)에 대해서도 논한다.

20장은 JMX에 대해 설명하고, 톰캣이 MBean을 만들어서 자신의 내부 객체들을 쉽게 관리하는 하는 방법에 대해 알려준다.

저자/역자 소개

<저자 소개>

Budi Kurniawan

Budi Kurniawan은 인터넷 및 객체 지향 프로그래밍 분야의 전문 IT 컨설턴트이며 ‘Java for the Web with Servlets, JSP, and EJB (NewRiders, 2002)’의 저자다. 그는 다수의 컴퓨터 서적 이외에도 10권 이상의 출판물에 100개가 넘는 글을 기고해 왔다. 이런 출판물에는 java.net, JavaPro, JavaWorld, www.onjava.com 등 유명한 자바관련 잡지들이 포함돼있다. 전세계적으로 많은 대기업에서 라이센스를 구매해 사용하고 있는 Brainysoftware.com의 File Upload Bean도 그의 작품이다.


Paul Deck

Paul Deck은 15년 이상의 경력을 지닌 IT 아키텍트이다. 그는 미국, 캐나다, 중국, 호주 등의 여러 국가에서 많은 프로젝트를 경험했다. 또한 그는 네트워크, 인터넷 프로그래밍, 디자인 패턴, 사용자 인터페이스 디자인에 대해서도 관심이 많다.


<역자 소개>

이태상 taesang@gmail.com

연세대학교 자연과학부를 졸업하고, 현재는 ㈜이인티그레이션에서 WebSphere 전문 엔지니어로 재직중이다. 약 20여개의 기업체에서 J2EE 애플리케이션 개발 교육을 진행해왔다. 저서로는 “Practical EJB Programming with IBM WebSphere (2001)”이 있으며, 현재 국내 WebSphere/Rational 사용자를 위한 사이트인 이클립시언즈닷넷(http://eclipsians.net)을 운영하고 있다. 최근에는 SOA 기반의 EAI 솔루션에 대한 많은 관심을 갖고 연구하고 있다.

목차

목차
  • 1장 간단한 웹 서버
    • 1.HyperText Transfer Protocol (HTTP)
      • -HTTP 요청
      • -HTTP 응답
    • 2.Socket 클래스
    • 3.ServerSocket 클래스
    • 4.애플리케이션
      • -HttpServer 클래스
      • -Request 클래스
      • -Response 클래스
      • -애플리케이션 실행하기
  • 2장 간단한 서블릿 컨테이너
    • 1.javax.servlet.Servlet 인터페이스
    • 2.애플리케이션 1
      • -HttpServer1 클래스
      • -Request 클래스
      • -Response 클래스
      • -StaticResourceProcessor 클래스
      • -ServletProcessor1 클래스
      • -애플리케이션 실행하기
    • 3.애플리케이션 2
      • -애플리케이션 실행하기
    • 4.요약
  • 3장 커넥터
    • 1.StringManager 클래스
    • 2.애플리케이션
      • -애플리케이션의 구동
      • -커넥터
      • -HttpRequest 객체 생성하기
      • -소켓의 입력 스트림 읽기
      • -요청 라인의 파싱
      • -헤더의 파싱
      • -쿠키의 파싱
      • -파라미터 얻기
      • -HttpResponse 객체 생성하기
      • -정적 자원과 서블릿의 처리
      • -애플리케이션 실행하기
    • 3.요약
  • 4장 톰캣의 기본 커넥터
    • 1.HTTP 1.1의 새로운 특징
      • -지속 연결
      • -청크 인코딩
      • -100 (Continue) 상태 코드의 사용
    • 2.Connector 인터페이스
    • 3.HttpConnector 클래스
      • -서버 소켓의 생성
      • -HttpProcessor 인스턴스의 관리
      • -HTTP 요청의 공급
    • 4.HttpProcessor 클래스
    • 5.요청 객체
    • 6.응답 객체
    • 7.요청 처리
      • -연결 정보의 파싱
      • -요청의 파싱
      • -헤더의 파싱
    • 8.간단한 컨테이너 애플리케이션
      • -애플리케이션 실행하기
    • 9.요약
  • 5장 컨테이너
    • 1.Container 인터페이스
    • 2.파이프라인 태스크
      • -Pipeline 인터페이스
      • -Valve 인터페이스
      • -ValveContext 인터페이스
      • -Contained 인터페이스
    • 3.Wrapper 인터페이스
    • 4.Context 인터페이스
    • 5.래퍼 애플리케이션
      • -ex05.pyrmont.core.SimpleLoader
      • -ex05.pyrmont.core.SimplePipeline
      • -ex05.pyrmont.core.SimpleWrapper
      • -ex05.pyrmont.core.SimpleWrapperValve
      • -ex05.pyrmont.valves.ClientIPLoggerValve
      • -ex05.pyrmont.valves.HeaderLoggerValve
      • -ex05.pyrmont.startup.Bootstrap1
      • -애플리케이션 실행하기
    • 6.컨텍스트 애플리케이션
      • -ex05.pyrmont.core.SimpleContextValve
      • -ex05.pyrmont.core.SimpleContextMapper
      • -ex05.pyrmont.core.SimpleContext
      • -ex05.pyrmont.startup.Bootstrap2
      • -애플리케이션 실행하기
    • 7.요약
  • 6장 생명주기
    • 1.Lifecycle 인터페이스
    • 2.LifecycleEvent 클래스
    • 3.LifecycleListener 인터페이스
    • 4.LifecycleSupport 클래스
    • 5.애플리케이션
      • -ex06.pyrmont.core.SimpleContext
      • -ex06.pyrmont.core.SimpleContextLifecycleListener
      • -ex06.pyrmont.core.SimpleLoader
      • -ex06.pyrmont.core.SimplePipeline
      • -ex06.pyrmont.core.SimpleWrapper
      • -애플리케이션 실행하기
    • 6.요약
  • 7장 로거
    • 1.Logger 인터페이스
    • 2.톰캣의 로거
      • -LoggerBase 클래스
      • -SystemOutLogger 클래스
      • -SystemErrLogger 클래스
      • -FileLogger 클래스
      • -open 메소드
      • -close 메소드
      • -log 메소드
    • 3.애플리케이션
    • 4.요약
  • 8장 로더
    • 1.자바 클래스 로더
    • 2.Loader 인터페이스
    • 3.Reloader 인터페이스
    • 4.WebappLoader 클래스
      • -클래스 로더의 생성
      • -저장소의 설정
      • -클래스 경로의 설정
      • -접근 권한의 설정
      • -자동 재로딩을 위한 새로운 스레드의 시작
    • 5.WebappClassLoader 클래스
      • -캐싱
      • -클래스의 로딩
    • 6.애플리케이션
      • -애플리케이션 실행하기
    • 7.요약
  • 9장 세션 관리
    • 1.세션
      • -Session 인터페이스
      • -StandardSession 클래스
      • -StandardSessionFacade 클래스
    • 2.매니저
      • -Manager 인터페이스
      • -ManagerBase 클래스
      • -StandardManager 클래스
      • -PersistentManagerBase 클래스
      • -스왑 아웃
      • -백업
      • -PersistentManager 클래스
      • -DistributedManager 클래스
    • 3.Store 인터페이스
      • -StoreBase 클래스
      • -FileStore 클래스
      • -JDBCStore 클래스
    • 4.애플리케이션
      • -Bootstrap 클래스
      • -SimpleWrapperValve 클래스
      • -애플리케이션 실행하기
    • 5.요약
  • 10장 보안
    • 1.Realm
    • 2.GenericPrincipal
    • 3.LoginConfig
    • 4.Authenticator
    • 5.인증자 밸브의 설치
    • 6.애플리케이션
      • -ex10.pyrmont.core.SimpleContextConfig 클래스
      • -ex10.pyrmont.realm.SimpleRealm 클래스
      • -ex10.pyrmont.realm.SimpleUserDatabaseRealm 클래스
      • -ex10.pyrmont.startup.Bootstrap1 클래스
      • -ex10.pyrmont.startup.Bootstrap2 클래스
      • -애플리케이션 실행하기
    • 7.요약
  • 11장 StandardWrapper
    • 1.메소드 호출 순서
    • 2.SingleThreadModel
    • 3.StandardWrapper
      • -서블릿 할당
      • -서블릿 로드
      • -ServletConfig 객체
      • -부모와 자식 관계
    • 4.StandardWrapperFacade
    • 5.StandardWrapperValve
    • 6.FilterDef
    • 7.ApplicationFilterConfig
    • 8.ApplicationFilterChain
    • 9.애플리케이션
      • -애플리케이션 실행하기
    • 10.요약
    • 12장 StandardContext
    • 1.StandardContext의 설정
      • -StandardContext 클래스의 생성자
      • -StandardContext의 시작
      • -Invoke 메소드
    • 2.StandardContextMapper
    • 3.재로딩 지원
    • 4.backgroundProcess 메소드
    • 5.요약
  • 13장 호스트와 엔진
    • 1.Host 인터페이스
    • 2.StandardHost
    • 3.StandardHostMapper
    • 4.StandardHostValve
    • 5.호스트 없이는 못살아
    • 6.애플리케이션 1
      • -애플리케이션 실행
    • 7.Engine 인터페이스
    • 8.StandardEngine
    • 9.StandardEngineValve
    • 10.애플리케이션 2
      • -애플리케이션 실행하기
    • 11.요약
  • 14장 서버와 서비스
    • 1.서버
    • 2.StandardServer
      • -initialize 메소드
      • -start 메소드
      • -stop 메소드
      • -await 메소드
    • 3.서비스
    • 4.StandardService
      • -컨테이너와 커넥터
      • -생명주기 관련 메소드
    • 5.애플리케이션
      • -Bootstrap 클래스
      • -Stopper 클래스
      • -애플리케이션 실행하기
    • 6.요약
  • 15장 다이제스터
    • 1.다이제스터
      • - Digester 클래스
      • - 다이제스터 예제 1
      • - 다이제스터 예제 2
      • - Rule 클래스
      • - 다이제스터 예제 3: RuleSet의 활용
    • 2.ContextConfig
      • - defaultConfig 메소드
      • - applicationConfig 메소드
      • - 웹 다이제스터의 생성
    • 3.애플리케이션
      • - 애플리케이션 실행하기
    • 4.요약
  • 16장 종료 후크
    • 1.종료 후크 예제
    • 2.톰캣에서의 종료 후크
    • 3.요약
  • 17장 톰캣의 기동
    • 1.Catalina 클래스
      • - start 메소드
      • - stop 메소드
      • - 시작 다이제스터
      • - 중지 다이제스터
    • 2.Bootstrap 클래스
    • 3.윈도즈에서의 톰캣 실행
      • - 배치파일의 작성법 소개
    • 4.catalina.bat 배치 파일
      • - 윈도즈에서의 톰캣 시작
      • - 윈도즈에서의 톰캣 중지
    • 5.유닉스/리눅스에서의 톰캣 실행
      • - 유닉스/리눅스 쉘 스크립트의 작성 방법 소개
      • - 유닉스/리눅스에서의 톰캣 시작
      • - 유닉스/리눅스에서의 톰캣 중지
    • 6.요약
  • 18장 배치자
    • 1.웹 컨텍스트의 배치
      • - 설명자의 배치
      • - WAR 파일의 배치
      • - 디렉토리의 배치
      • - 실시간 배치
    • 2.Deployer 인터페이스
    • 3.StandardHostDeployer 클래스
      • - 설명자의 설치
      • - WAR 파일과 디렉토리의 설치
      • - 컨텍스트의 시작
      • - 컨텍스트의 중지
    • 4.요약
  • 19장 관리자 서블릿
    • 1.관리자 애플리케이션의 사용
    • 2.ContainerServlet 인터페이스
    • 3.ManagerServlet의 초기화
    • 4.배치된 웹 애플리케이션 목록
    • 5.웹 애플리케이션 시작
    • 6.웹 애플리케이션 중지
    • 7.요약
  • 20장 JMX 기반의 관리
    • 1.JMX 소개
    • 2.JMX API
      • - MBeanServer 인터페이스
      • - ObjectName 클래스
    • 3.표준 MBean
    • 4.모델 MBean
      • - ObjectName 클래스
      • - ModelMBean 예제
    • 5.커먼스 모델러
      • - MBean 설명자
      • - 사용자만의 모델 MBean 클래스 작성
      • - Registry 클래스
      • - ManagedBean 클래스
      • - BaseModelMBean 클래스
      • - 모델러 API의 사용
    • 6.카탈리나의 MBean
      • - ClassNameMBean
      • - StandardServerMBean
      • - MBeanFactory
      • - MBeanUtil
    • 7.카탈리나에서의 MBean 생성
    • 8.애플리케이션

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

[ p174 두 번째 코드 아래 1행 ]
파라미터를 받지 않는 findSession 메소드는
→ 파라미터를 받지 않는 findSessions 메소드는

[ p251 코드 내 아래에서 12행 ]
호스트에 상대적인 요청 URI를 처리하는데 사용될 텍스트를 리턴한다.
→ 호스트에 상대적인 요청 URI를 처리하는 데 사용될 텍스트를 리턴한다.