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