1. Tomcat 서버 역사와 소개
아파치 톰캣(Apache Tomcat)은 1999년에 서블릿(Java Servlets) 및 JSP(JavaServer Pages) 사양을 구현하기 위해 개발된 오픈소스 웹 애플리케이션 서버입니다. 원래 자카르타 프로젝트의 일부로 시작되었으며, Sun Microsystems(현재 Oracle)의 지원을 받아 Java 기반 웹 애플리케이션의 표준 플랫폼이 되었습니다. 톰캣은 가볍고 빠르며, Java EE 애플리케이션 서버(예: JBoss, WebLogic)보다 더 단순한 구조를 가지고 있어, 소규모 또는 중형 웹 애플리케이션에 적합합니다.
2. 톰캣 서버의 Service
톰캣 서버는 하나 이상의 Service를 구성하여 여러 요청을 처리할 수 있습니다. 각 서비스는 클라이언트 요청을 받아들이는 커넥터와 요청을 처리하는 엔진으로 구성됩니다. 톰캣 서버는 각기 다른 포트를 통해 다양한 프로토콜(HTTP, AJP 등)을 지원하는 여러 개의 커넥터를 가질 수 있으며, 각각의 요청을 적절한 엔진으로 전달합니다.
3. 톰캣 서버의 Engine(Catalina)
Catalina는 톰캣의 핵심 엔진으로, 서블릿 컨테이너 역할을 수행합니다. Catalina 엔진은 각 요청을 분석하고 서블릿 또는 JSP로 요청을 전달하여 처리합니다. 또한, Catalina는 엔진 레벨에서 다수의 호스트(도메인)를 지원하며, 이를 통해 여러 웹 애플리케이션을 같은 서버에서 관리할 수 있습니다.
- Service: 엔진이 제공하는 서비스 단위로, 여러 개의 커넥터가 엔진에 연결될 수 있습니다.
- Engine: 하나의 서비스 내에서 여러 도메인(호스트)을 관리하며, 각 요청을 적절한 호스트로 전달합니다.
4. 톰캣 서버의 Realm
Realm은 톰캣 서버의 보안 영역을 담당하며, 사용자의 인증과 권한 부여를 관리합니다. Realm은 데이터베이스, LDAP, 파일 시스템 등 다양한 소스에서 사용자 정보를 가져올 수 있으며, 요청에 따라 사용자의 자격 증명을 확인한 후 적절한 권한을 부여합니다.
- 예: JDBCRealm을 사용하여 데이터베이스에서 사용자 정보와 암호를 확인하는 방식.
5. 톰캣 서버의 Connector
톰캣의 커넥터(Connector)는 클라이언트의 요청을 서버로 전달하는 역할을 합니다. 기본적으로 HTTP와 AJP(Apache JServ Protocol)를 사용합니다.
- HTTP 커넥터: 주로 웹 브라우저와의 통신을 담당하며, HTTP/1.1 및 HTTP/2 프로토콜을 지원합니다.
- AJP 커넥터: Apache HTTP 서버와의 연동을 위해 사용되며, Apache와 톰캣 간의 성능을 최적화하는 데 도움을 줍니다.
6. 톰캣 서버의 Valve
Valve는 톰캣의 요청 처리 과정에서 필터링이나 로깅 등의 추가 작업을 수행하는 데 사용됩니다. Valve는 특정 URL 요청을 가로채서 추가적인 작업을 수행하거나, 접근 권한을 제한하는 데 유용합니다. 필터와 유사하지만 톰캣 서버 자체에 더 밀접하게 연결되어 있습니다.
- 예: 액세스 로그를 남기거나 특정 IP에 대한 요청을 차단하는 역할.
7. 톰캣 서버의 Host
Host는 엔진 내에서 특정 도메인을 관리하는 역할을 합니다. 톰캣 서버는 여러 개의 호스트를 지원할 수 있어, 하나의 톰캣 인스턴스에서 여러 도메인을 운영할 수 있습니다. 각 호스트는 독립적으로 동작하며, 하나 이상의 웹 애플리케이션을 관리합니다.
- 예: localhost라는 호스트가 서버 내에서 특정 도메인의 요청을 처리.
8. 톰캣 서버의 Context
Context는 톰캣에서 하나의 웹 애플리케이션을 나타내며, 각 컨텍스트는 고유한 애플리케이션을 관리합니다. 하나의 호스트는 여러 개의 컨텍스트를 가질 수 있으며, 각 컨텍스트는 독립적으로 실행됩니다.
- 예: myapp이라는 애플리케이션이 특정 경로에 배포된 경우, 해당 애플리케이션의 모든 리소스와 설정은 컨텍스트에서 관리됩니다.
9. 톰캣 서버의 Servlet
서블릿(Servlet)은 Java 기반 웹 애플리케이션에서 클라이언트 요청을 처리하고 응답을 생성하는 작은 자바 프로그램입니다. 톰캣은 서블릿 컨테이너로, 서블릿의 생명주기(초기화, 요청 처리, 종료)를 관리하며, HTTP 요청에 맞는 서블릿을 실행하고 그 결과를 클라이언트에게 반환합니다.
- 서블릿은 동적인 웹 콘텐츠를 제공하는 데 주로 사용됩니다.
10. 톰캣 서버의 Logger
Logger는 톰캣 서버의 로그를 관리하는 요소입니다. 각 서비스나 엔진, 호스트, 컨텍스트마다 별도의 로깅 설정을 가질 수 있으며, 톰캣의 각 구성 요소에서 발생하는 다양한 이벤트를 기록합니다. 이를 통해 서버의 성능 분석이나 오류 진단에 도움을 줄 수 있습니다.
- 예: localhost_access_log 파일에 HTTP 요청 로그를 남기거나, 오류 발생 시 에러 로그를 기록.
11. 톰캣 서버의 JSP
JSP(JavaServer Pages)는 서버 측에서 실행되는 스크립트 언어로, HTML과 Java 코드를 결합하여 동적인 웹 페이지를 생성하는 데 사용됩니다. 톰캣의 Jasper 엔진이 JSP 파일을 서블릿으로 변환하고, 이를 Catalina 엔진에서 실행하여 클라이언트에게 동적 웹 콘텐츠를 제공합니다.
- JSP는 일반적으로 동적인 데이터베이스 조회 결과나 사용자 입력에 따라 변경되는 페이지를 생성하는 데 활용됩니다.
이와 같은 톰캣 서버의 구조는 다양한 Java 기반 웹 애플리케이션을 지원하고, 확장성과 유연성을 제공하는 데 기여합니다.