인프라/WEB, WAS, 배포

[Tomcat] 톰캣의 구조와 동작방식을 알아보자.

Kangjieun11 2024. 12. 7. 00:23
728x90

 

 

✅ 이전글


https://jie0025.tistory.com/649

 

[미들웨어] WAS - 각 서버의 특징을 알아보자 (Tomcat, WebLogic, JBoss, Jeus)

오늘은 업무에서 사용하게 될WAS의 종류와 각 서버의 특징 및 장단점에 대해 알아보겠다. - Tomacat, WebLogic, JBoss, Jeus     Tomcat아파치 소프트웨어재단의   자바 웹 애플리케이션 서버웹 애플리

jie0025.tistory.com

 

 


 

✅ Tomcat

 

 

  • Tomcat은 WAS (동적 컨텐츠를 제공하는 서버) 중 하나이다.   
    • 경량화된 WAS : 가볍고 빠르게 동작한다. 
    • JavaEE 기술 기반으로 됨 -> 다양한 플랫폼/OS의 호환성을 보장한다. 
    • 개발 배포의 용이 
      • 자바 웹 애플리케이션 개발 / 배포에 대부분의 기능을 제공함. 
    • 라이선스 비용이 없는 무료 오픈소스
    • EJB(Enterprise Java Beans) 등 JavaEE의 고급기능 지원이 부족하다.

 

 

 

정도로만 학습을 했었다. 

** EJB의 지원 여부에 따라
- 대규모서비스에 사용될지 (WebLogic)
- 소규모 팀 프로젝트에 사용될지 (Tomcat)
결정되는 느낌이라서  EJB의 개념도 조만간 공부해봐야겠다. 

 

공부하고 있는 한 글에 의하면,

EJB기술이 적용되어있지 않아서 WAS라고 명확하게 정의할 수 없다고한다.

 

 

 

서버 설정파일 (server.xml)

아래 파일은 Tomcat의 설정파일이다.ㅏ 

다른 애플리케이션/ 클라이언트와 연결/통신하는 방법을 정의하고 있다. 

 

이 파일을 보며 용어를 익혀보자.

<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
   <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
   <Listener className="org.apache.catalina.core.JasperListener" />
   <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
   <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
   <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
   <GlobalNamingResources>
     <Resource name="UserDatabase" auth="Container"
               type="org.apache.catalina.UserDatabase"
               description="User database that can be updated and saved"
               factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
               pathname="conf/tomcat-users.xml" />
   </GlobalNamingResources>
   <Service name="Catalina">
     <Connector port="8080" protocol="HTTP/1.1"
                connectionTimeout="20000"
                redirectPort="8443" />
     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
     <Engine name="Catalina" defaultHost="localhost">
       <Realm className="org.apache.catalina.realm.LockOutRealm">
         <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                resourceName="UserDatabase"/>
       </Realm>
       <Host name="localhost"  appBase="webapps"
             unpackWARs="true" autoDeploy="true">
         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                prefix="localhost_access_log." suffix=".txt"
                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
       </Host>
     </Engine>
   </Service>
</Server>

 

 

  • Context : 톰캣 내에서 단일 웹 애플리케이션을 의미
  • Connector : 클라이언트와 통신을 담당함. HTTP 요청을 받아들이고, 처리하는 역할
    • 특정 포트에서 요청을 기다린다. (default : 8080)
    • 속성 refirectPort  : SSL 연결이 필요한 경우 요청을 안전한 포트(8443)로 리디렉션한다. 
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
  • Engine : 서비스의 핵심 컴포넌트. Connector로부터 온 모든 요청을 수신하고 애플리케이션으로 넘긴다. 클라이언트로 응답 다시 전달
  • 하나 이상의 호스트가 포함되어야한다.
  • 기본구성 : Catalina 엔진 (localhost 포함)
  • Host : 톰캣 서버에 대한 네트워크 이름  (www.myDomain.com)을 Tomcat서버에 연결한 것. 
    • 기본구성 = localhost 호스트가 포함된다. 
    • 여러 컨텍스트를 포함할 수 있음
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" />
  • Valve : 요청을 가로채 추가 작업을 수행하는 필터 역할
    • 로깅/요청분석/접근제어 등을 수행함.
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
  • Realm 
    • 사용자인증/인가(권한관리) 담당
    • 사용자/비번/역할을 DB / 파일에 저장해 인증한다. 

 

 

이제 구성요소와 각 역할을 확인했으니

요청 처리 흐름을 명확히 해보자.

 

 

✅ 톰캣의 요청 처리 흐름

  1. 클라이언트가 요청한다 
    • http://localhost:8080/myapp
  2. Connector처리
    1. 8080포트의 커넥터가 요청을 수신한다.
  3. Engine으로 전달
  4. Host로 라우팅
  5. Context 매핑  >> myapp에 해당하는 컨텍스트를 찾아서 전달한다. 
  6. 컨텍스트 내부 서블릿이 요청을 처리한다. 
  7. 최종 결과를 클라이언트로 반환한다.  

 

 

 

 

 

✅ Tomcat의 디렉터리 구조

 

이미지 출처 : https://medium.com/@potato013068/%ED%86%B0%EC%BA%A3%EC%9D%98-%EA%B5%AC%EC%A1%B0%EC%99%80-%EB%8F%99%EC%9E%91-%EB%A9%94%EC%BB%A4%EB%8B%88%EC%A6%98-91fbebf0eb67

 

 

  • bin :  톰캣 실행/종료 관한 스크립트 파일이 위치
  • conf : server.xml 서버 전체설정에 관한 파일이 위치
  • lib : 톰캣 - 다른 웹서버를 연결해주는 바이너리 모듈,  톰캣 구동에 필요한 jar 라이브러리 위치
  • logs : 예외 발생 사항 등의 톰캣 로그 파일 
  • temp : 톰캣 실행중에 임시파일들이 위치하는 임시 폴더
  • webapps : 웹 애플리케이션이 위치
  • work : jsp 파일을 서블릿 상태로 변환한 java/ class 파일들이 저장되는 위치

 

 


 

 

references 

 

 

https://howtodoinjava.com/tomcat/tomcats-architecture-and-server-xml-configuration-tutorial/?source=post_page-----91fbebf0eb67--------------------------------

 

Tomcat Tutorial - Architecture and server.xml configuration

This tutorial discusses apache tomcat’s architecture consisting of a series of functional components inside server.xml in tomcat’s installation folder.

howtodoinjava.com

 

https://kadensungbincho.tistory.com/62

 

아파치 톰캣 내부구조 (Apache Tomcat Internals)

컨텍스트를 이해하며 알아보는 Nginx 내부구조 아파치 톰캣 내부구조 (Apache Tomcat Internals) 아파치 톰캣은 Java Servlet, JavaServer Pages, Java Expression Language와 WebSocket 기술의 오픈소스 구현체로, Java 코드

kadensungbincho.tistory.com

 

 

https://medium.com/@potato013068/%ED%86%B0%EC%BA%A3%EC%9D%98-%EA%B5%AC%EC%A1%B0%EC%99%80-%EB%8F%99%EC%9E%91-%EB%A9%94%EC%BB%A4%EB%8B%88%EC%A6%98-91fbebf0eb67

 

톰캣의 구조와 동작 메커니즘

아파치 톰캣이 무엇이고 어떻게 동작하며, 어떤 구조를 가지고 있는지에 대해서 알아보았습니다.

medium.com