일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 소프티어
- 회고
- 프로그래머스
- 1과목
- 백준 알고리즘
- SW봉사
- 코틀린
- 백준
- 파이썬
- BFS
- java
- 데이터베이스
- 코딩교육봉사
- 시나공
- python
- C++
- 정보처리산업기사
- 백준알고리즘
- 코딩봉사
- CJ UNIT
- kotlin
- 문제풀이
- SQL
- softeer
- 스프링
- 자바
- programmers
- 공부일지
- MYSQL
- 알고리즘
Archives
- Today
- Total
JIE0025
[Tomcat] 톰캣의 구조와 동작방식을 알아보자. 본문
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
'인프라 > WEB, WAS, 배포' 카테고리의 다른 글
가상 면접 사례로 배우는 대규모 시스템 설계 기초 1장 : 사용자 수에 따른 규모 확장성 (5) | 2024.12.19 |
---|---|
[미들웨어] WAS - 각 서버의 특징을 알아보자 (Tomcat, WebLogic, JBoss, Jeus) (1) | 2024.12.05 |
[미들웨어] WAS와 웹서버의 차이는 무엇일까? (0) | 2024.12.04 |
[원티드] 8월 백엔드 챌린지 - Docker (0) | 2023.07.19 |
[AWS] EC2 무중단 배포 (linux - nohup) (0) | 2023.06.23 |