인프라/WEB, WAS, 배포
[Tomcat] 톰캣의 구조와 동작방식을 알아보자.
Kangjieun11
2024. 12. 7. 00:23
728x90
✅ 이전글
https://jie0025.tistory.com/649
✅ 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 "%r" %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 "%r" %s %b" />
- Realm
- 사용자인증/인가(권한관리) 담당
- 사용자/비번/역할을 DB / 파일에 저장해 인증한다.
이제 구성요소와 각 역할을 확인했으니
요청 처리 흐름을 명확히 해보자.
✅ 톰캣의 요청 처리 흐름
- 클라이언트가 요청한다
- http://localhost:8080/myapp
- Connector처리
- 8080포트의 커넥터가 요청을 수신한다.
- Engine으로 전달
- Host로 라우팅
- Context 매핑 >> myapp에 해당하는 컨텍스트를 찾아서 전달한다.
- 컨텍스트 내부 서블릿이 요청을 처리한다.
- 최종 결과를 클라이언트로 반환한다.
✅ Tomcat의 디렉터리 구조
- bin : 톰캣 실행/종료 관한 스크립트 파일이 위치
- conf : server.xml 서버 전체설정에 관한 파일이 위치
- lib : 톰캣 - 다른 웹서버를 연결해주는 바이너리 모듈, 톰캣 구동에 필요한 jar 라이브러리 위치
- logs : 예외 발생 사항 등의 톰캣 로그 파일
- temp : 톰캣 실행중에 임시파일들이 위치하는 임시 폴더
- webapps : 웹 애플리케이션이 위치
- work : jsp 파일을 서블릿 상태로 변환한 java/ class 파일들이 저장되는 위치
references
https://kadensungbincho.tistory.com/62