Apache Tomcat
1. Apache Tomcat 개요
전자정부 프레임워크의 표준 WAS서버로 국내에서 Spring Framework와 함께 가장 많이 사용되는 백엔드 서버
내장 HTTP 커텍터가 존재하여 웹서버 없이 WAS만으로 브라우저의 HTTP요청을 수신할 수 있다.
Tomcat은 Jakarta EE 중 웹 서비스에 필수인 Servlet과 JSP 기술만을 지원하는 경량 WAS이다.
Jakarta EE( (구) Java EE)스펙
Jakarta EE는 기업용 JAVA애플리케이션 개발을 위한 표준 사양 모음.
예전에는 Java EE로 불렸으나, JavaSun회사에서 Oracle로 넘어가면서 이름이 바뀜.
WEB, JPA, 트랜잭션 처리 등 영역별로 반드시 존재해야 하는 기능들이 정의 되어 있으며, Apache Tomcat은 이 중 Servelt과 Jsp 을 구현하였다.
웹
Servlet, JSP
웹 기반 애플리케이션 처리
비즈니스
EJB (Enterprise JavaBeans)
트랜잭션, 보안, 분산 처리를 위한 컴포넌트
데이터 접근
JPA, JDBC
데이터베이스 연동
메시징
JMS
시스템 간 메시지 전달
보안/트랜잭션
JTA, JAAS 등
엔터프라이즈 기능 지원
비지니스, 데이터 접근, 메시징 , 보안처리 등 나머지 표준은 Spring Framework의 모듈로 대체가 가능하다.
2. Apache Tomact 설치

tomcat9버전은 javax, 10버전이상은 jakarata라이브러리를 사용함.
이 후 수업할 Spring-Legacy에서는 tomcat9버전을 사용할 예정.
1) Apache Tomcat 디렉토리 구조

bin
tomcat 실행 파일들이 존재하는 폴더
서버구동 명령어 : startup.bat(윈도우)
서버종료 명령어 : shutdown.bat(윈도우)
conf
tomcat 설정파일들이 존재하는 폴더
톰캣의 핵심 설정인 server.xml이 존재한다.
lib
톰캣 라이브러리 저장소
logs
서버 로그 저장폴더
webapps
배포할 어플리케이션(Context)을 저장하는 폴더
war파일 혹은 압축 해제된 어플리케이션을 폴더 단위로 배포한다.
webapps/simpleapp 과 같은 war디렉토리가 존재한다면 , localhost:8080/simpleapp을로 요청을 보내게 되면, simpleapp이 Context가 된다.
2) server.xml
아파치 톰캣의 핵심 구성요소들에 대한 설정정보를 확인할 수 있는 파일로 conf 내부에 존재한다.
호스트정보, 커넥터정보, 컨텍스트 정보 등 tomcat의 전체적인 구조를 설정
톰캣 서버 가동시 Server.xml안의 내용을 읽어 들인 후 실행된다.
열어보자.
3) Apache Tomcat 핵심 구성요소

Server & Service
Server는 톰캣의 최상위 객체로 하나 이상의 Service를 포함하고 있다. (말그대로 서버)
Service는 Connector와 Engine을 하나로 연결하는 객체
Connector는 사용자의 요청을 받는 수신기로, 식당으로 비유하자면 웨이터의 역할
Engine은 사용자의 요청을 처리하는 처리기로, 식당으로 비유하자면 손님이 주문한 요리를 하는 요리사의 역할
Connector - Coyote(Http Connector)
Tomcat 서버와 브라우저간의 통신을 담당하는 객체
TCP방식으로 브라우저와 통신하는 입출력담당한다
클라이언트의 요청을 받아 Servlet Container로 전달하고, 응답을 다시 클라이언트에게 전달한다
별도의 웹서버 구축 없이 브라우저와 통신이 가능하도록 하는 객체로, 웹서버 없이 운용한다면 Coyote가 8080포트를 사용한다.
AJP커넥터는 Apache나 Ngninx등 웹서버와의 통신에서 사용되는 커넥터. SSL은 https인증시 사용되는 커넥터
Valve
각 파이프라인에서 데이터를 전송할 때 사용되는 객체. 데이터 전송 전 전처리를 담당한다. ex) logging
Engine == Servlet Container(Catalina)
커넥터의 요청을 받아 요청내용을 처리하는 객체.
각 요청내용들을 실제로 처리할 수 있는 Servlet들을 보관하고 있다.
Servlet은 사용자의 요청내용을 처리하여 응답내용(html,json 등)을 생성하는 역할의 자바 클래스(다음장에서 자세히 알아볼 예정)
Servlet은 비유하자면 요리사로 한식요리사, 중식요리사, 일식요리사 등, 사용자가 주문한 주문내용에 맞춰 처리할 담당 Servlet들이 여러 개 존재한다. 이 Servlet들을 포함하고 있는 객체가 ServletContainer
커넥터(Coyote)로 부터 전달받은 http요청을 분석하여 어떤 웹 어플리케이션(Context)으로 요청내용을 처리할지 판단한다.
각 Context내부에 Servlet들이 존재함.
Context(웹 어플리케이션)
하나의 웹 어플리케이션을 의미하며 war단위로 작동한다.
war안에는 어플리케이션의 서비스별로 다양한 Servlet들이 존재한다.
Jasper(JSP Engine)
JSP(Java Servlet Page)페이지의 요청을 처리하는 역할의 객체
JSP는 Servlet의 일종으로, html형식의 데이터를 전문적으로 응답하는 자바 클래스 파일이다.
Realm
사용자 인증 및 권한을 확인하는 역할의 객체
Logger
로깅처리시 사용되는 객체
4) Apache Tomcat 동작 방식

브라우저에서 http요청을 전달
내장 http 커넥터(Coyote)에서 요청내용 수신 후, Servlet Container에 전달.
Coyote는 톰캣 서버와 브라우저간의 입출력 담당을 한다.
즉, 브라우저와 TCP연결되어 http요청을 수신하고, 응답결과를 반환한다.
Servlet Container에서 URL패턴을 통해 일치하는 Servlet 또는 JSP를 찾아 실행.
EX) /abc/login 으로 요청이 들어오면 abc요청을 처리할 수 있는 Context를 찾음
Context 내부에서 /login을 담당하는 Servlet을 찾아서 java코드를 실행.
만약 / abc/longin.jsp으로 요청이 들어오면 abc컨텍스트 내부에서 longin.jsp파일이 Jasper에 의해 Servlet으로 변환된 후 java코드 실행.
Servlet 비지니스 로직 실행
사용자의 요청 방식에 따라 doGet/doPost메서드가 실행되면서 Servlet에 작성해 놓은 비지니스 로직이 실행
비지니스 로직은 사용자의 요청을 처리하기 위한 과정으로, 로그인, 검색결과, 게시판보기 등 다양하다.
비지니스 로직 실행 완료 후 처리한 응답결과(HTML, JSON 등)를 http 커넥터(Coyote)에 전달
http커넥터에서 브라우저에게 응답내용 전달.
브라우저는 응답내용을 바탕으로 화면을 랜더링
5) 톰캣을 활용한 자바 어플리케이션 배포
배포(Deployment)
코드형태의 어플리케이션을 실제 동작하는 서비스로 만드는 과정
준비물
war파일
tomcat 9.x.x
War(Web Application Archive)파일을 webapps파일 아래에 보관

WAR?
Java어플리케이션을 배포하기 위해 필요한 모든 파일을 하나로 압축한 파일.
was서버에서 배포하기 위해 활용하며, was서버 시작시 자동으로 압축해제되며 서비스된다.
WEB-INF폴더 안의 내용을 바탕으로 어플리케이션을 서비스한다.
conf폴더의 server.xml을 수정

톰캣이 서비스하는 어플리케이션(Context)으로 myapp을 지정.
bin폴더 내부에 startup.bat파일 실행(톰캣 실행 명령어)

웹 브라우저를 열고 localhost:8080/myapp 으로 이동

Last updated