반응형

📝Tomcat 큰 3가지 구성

Coyote : Tomcat TCP 프로토콜 지원
Catalina : Java Servlet을 호스팅 해준다.
Jasper : JSP 페이지 요청 처리 Servlet

 

📝톰캣 동작 구조

Tomcat Server가 그 밑에 Service 객체를 생성한다 (그 하위에는 Engine, Connector(호출 포트), Host, Context(URI Mapping) 등이 존재)

HTTP 통신 요청 → 호출 포트에 해당하는 Connector 연결 → Service → Engine → Host → Context(기본적으로 webapps에 있는 곳 참조해 프로젝트 URI Mapping → 프로젝트 내 web.xml 읽기 → 프로젝트 내 web.xml 기반으로 프로젝트 URI 매핑

 

 


하나의 Server에는 여러개 Service가 존재할 수 있다.
하나의 Service에는 1개의 Engine과 여러개의 Connector로 구성
하나의 Engine에는 여러개 Host 존재할 수 있다.
하나의 Host에는 여러개 Context가 존재할 수 있습니다.

 

Tomcat Server → Engine(Connector로 통해 전달) → Host → Context 

[Tomcat에서는 server.xml에 적혀있는 내용을 가지고 객체를 만드는 거라고 생각하면 된다. 그렇기 때문에 Connector에 포트번호를 적어두면 어떤 Service를 이용할지 방향을 알려준다]

 

📝Server

port : Shutdown 명령을 보낼 수 있는 TCP/IP 주소

<Server port="8005" shutdown="SHUTDOWN">

 

📝Service

Serivce의 유일한 이름으로 Log를 남길 때 사용한다 (Catalina.out)

<Service name="Catalina">

 

 

📝Connector

 

특정 TCP port에서 request들을 listen해 engine으로 보내준다.

  • port
    • 리슨할 포트
  • protocol
    • TCP/IP 방식 
  • HTTP/1.1
    • 기본적으로 Connection당 하나의 요청을 처리 하도록 설계 동시 전송이 불가능하고 요청과 응답이 순차적으로 이뤄진다
  • HTTP/2
    • HTTP1.1을 완전하게 재작성한 것이 아니라 프로토콜의 성능에 초첨을 맞춰 수정한 버전 기본적으로 connection 한 개로 동시에 여러 개의 메시지를 주고 받을 수 있으며, 응답은 순서에 상관없이 stream으로 주고 받는다
  • AJP
    • "Apache JServ Protocol"의 약자로, Tomcat과 웹 서버(주로 Apache) 간의 통신을 위한 프로토콜로 Web서버인 Apache에서 어떤 포트를 들어오면 포트포워딩할 지에 대한 포트 설정을하고 Tomcat도 이에 대한 걸 받기 위한 프로토콜 설정 및 포트 개방을 한다
<!-- Apache 설정 -->
<VirtualHost *:80>
    ServerName yourdomain.com
    # 기타 설정

    ProxyPass / ajp://localhost:8009/    # Tomcat과의 AJP 연결 설정
    ProxyPassReverse / ajp://localhost:8009/
</VirtualHost>

<!-- Tomcat 설정 -->
<Connector protocol="AJP/1.3" port="8009" redirectPort="8443" />


위 프로토콜의 동작 방식 설정
- BIO : Tomcat 7 기본 방식 하나의 Thread가 하나의 Connection을 담당
- NIO :  Tomcat 8.5 기본 방식 하나의 Thread가 하나 이상의 Connection을 담당
- APR :  10.x 버전 부터 ARP 방식 삭제

<Connector port="7104" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="7004" URLEncoding="UTF-8" />

 

 

📝Thread Pool 설정

maxThreads : Connector가 생성할 수 있는 최대 Thread 수
maxConnections : 동시 처리 가능한 최대 Connection 수
maxSpareThreads : 최소로 실행을 유지할 thread 수
acceptCount : thread가 꽉 찼을 때 queue에 저장 가능한 최대 request 수

Thread Pool
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150", maxConnections >
공유 Thread Poll
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>

 

 

📝 Engine

name : Engine의 유일한 이름으로 Log를 남길 때 사용한다.
defaultHost ?

<Engine name="Catalina" defaultHost="localhost">

 

 

📝Host

name : 유일한 가상 Host명 (http://hostname/~)
appBase : app 폴더 (default webapps) Host마다 다른 appBase를 지정할 수 있다. (여러개 Domain 효율적 관리가능)
autoDeploy : appBase에 변동사항이 있을 때 자동으로 Deploy(배포) 해준다.
unpackWARs : war파일 deploy 설정 여부

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

 

 

📝Context

Host안에 있으며 하나의 WebApplication이며 주로 .war 형태로 배포됩니다.

docBase : 호출할 경로 URI이다. (/ABC/testing.jsp 호출시 /webapps/DEF/testing.jsp를 호출하게 된다.)

path : 실제 호출시킬 경로이다

만약 Context가 없으면 기본적으로 docBase는 webapps안에 있는 폴더 이름을 따라가게 된다.

즉, webapps/ABC 폴더가 존재시 /ABC/ 이런식으로 호출함

<Host name="localhost" appBase="webapps"
            unpackWARs="true" autoDeploy="true">
  <Context docBase="ABC" path="/DEF" reloadable="true"></Context>

 

 

 

 

🔗 참고 및 출처

https://velog.io/@hyunjae-lee/Tomcat-2-%EA%B5%AC%EC%A1%B0

 

Tomcat - (2) 구조

Tomcat의 구조에 대해 자세히 알아봅니다.

velog.io

 

https://bogyum-uncle.tistory.com/m/219

 

[Tomcat] server.xml 구조

톰캣의 server.xml 은 메인 설정 파일이며, Tomcat startup 초기 설정을 명세하는 책임이 있음 1. server.xml 태그 예시 2. 태그 상세 태그 설명 Server root element, shutdown port 지정, 전체 설정파일의..

bogyum-uncle.tistory.com

https://ijbgo.tistory.com/m/26

 

HTTP/1.1 VS HTTP/2

HTTP/1.1 동작 방식 HTTP/1.1는 기본적으로 Connection당 하나의 요청을 처리 하도록 설계동시 전송이 불가능하고 요청과 응답이 순차적으로 이뤄짐HTTP 문서 안에 포함된 다수의 리소스 (Images, CSS, Script)

ijbgo.tistory.com


https://velog.io/@wiostz98kr/HTTP1.1%EA%B3%BC-HTTP2.0%EC%9D%98-%EC%B0%A8%EC%9D%B4-e2v4x4t1

 

반응형