Tomcat
배경지식
Web Server
개념
- HTTP 프로토콜을 이용해 정적인 웹페이지를 보여주는 역할을 하는 서버 - 클라이언트로부터 HTTP요청을 받아드리고 HTML문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램 
- 위 기능을 제공하는 컴퓨터 프로그램을 실행하는 컴퓨터(하드웨어 측면) 
 
- HTTP 프로토콜 기반으로, 클라이언트의 요청을 서비스하는 기능 
역할
- 정적 컨텐츠 제공 - WAS를 거치지 않고 바로 자원 제공 
 
- 동적 컨텐츠 제공을 위한 요청 전달 - 동적컨텐츠 요청을 WAS로 넘겨주고, WAS에서 처리한 결과를 클라이언트에게 전달 
 
기능
- Reverse Proxy - 서버와 클라이언트 사이 프록시를 두고 프록시를 통해 데이터를 주고받음 
- 보안의 이유로 서버 내부 구조를 감추기 위해 사용 
 - Forward Proxy : 서버에 방문하는 클라이언트의 주소를 감춤 Reverse Proxy : 클라이언트에게 서버의 주소를 감춤
- 로드 밸런싱 - 클라이언트의 요청에 따른 처리를 동작 중인 여러 WAS에게 적절히 분배 
 
- 캐싱 - Reverse Proxy의 캐시를 의미 
- 서버로 찾아오는 클라이언트들이 자주, 반복적으로 요청하는 리소스들을 프록시 서버에 저장하고 제공 
 
- 주기적인 체크 - 웹 서버에 존재하는 수 많은 모듈을 사용해 WAS서비스가 정상적으로 동작하고 있는지 체크 
 
Reverse Proxy, 로드밸런싱, 캐싱의 역할을 Web Server가 담당하기에 Web Server와 WAS를 함께 이용한다
필요성
- 단순 정적 컨텐츠 처리를 맡으며 서버 부하 방지 및 효율적 분산처리 수행 
예시
- Apache, NginX, IIS(window 전용 web서버) 
WAS (Web Application Server)
개념
- DB조회 및 다양한 로직을 처리를 요구하는 동적 컨텐츠를 제공하기 위해 만들어진 Application server 
- HTTP를 통해 컴퓨터나 장치에 어플리케이션을 수행해주는 미들웨어 
- 웹 컨테이너,- 서블릿 컨테이너라고도 불림- 웹 컨테이너- JSP, Servlet을 실행할 수 있는 소프트웨어 
- 웹 서버에서 JSP를 요청하면 톰캣에서는 JSP파일을 서블릿으로 변환하여 컴파일을 수행하고, 서블릿 수행결과를 웹 서버에게 전달 
- JSP컨테이너가 탑재되어있는 WASsms JSP페이지를 컴파일해 동적인 페이지 생성 
 
- 즉 WAS는 JSP, Servlet 구동환경을 제공 
 
JSP (Java Server Pages)
HTML코드에 JAVA코드를 넣어 동적 웹페이지를 생성하는 웹어플리케이션 도구
JSP가 실행되면 서블릿으로 변환되며 웹 어플리케이션 서버에서 동작되며 필요한 기능 수행
위를 통해 생성된 데이터를 웹 페이지와 함께 클라이언트로 응답
역할
- Web Server 기능들을 구조적으로 분리해 처리하는 목적으로 제시 
- 현재 WAS가 가지는 Web server도 정적 컨텐츠를 처리하는데 성능상 큰 차이 없음 
기능
- 프로그램 실행 환경과 데이터베이스 접속 기능 제공 
- 여러개의 트랜잭션 관리 
- 업무를 처리하는 비즈니스 로직 수행 
- Web Service 플랫폼으로서의 역할 
필요성
- 자원의 효율적 사용: 요청에 맞는 데이터를 DB에서 가져와 비즈니스 로직에 맞춰 그때그때 결과 제공 
예시
- Tomcat, Jetty, Undertow, Boss, Jeus, Web Sphere 
위의 예시들은 자바진영에서 사용하는 것을 WAS로, 자바이외의 다른 진영에서는 WAS역할을 명확히 구분해놓지 않고있다.
Web Server와 WAS의 분리이유
- 기능 분리로 서버 부하 방지 
- 물리적 분리로 보안강화 
- 여러대의 WAS 연결이 가능하므로 로드밸런싱, fail over, fail back 처리에 유리 
- 여러 웹 어플리케이션 서비스 가능 
Apache Tomcat 이란?
- Apache 재단에서 제공하는 공개 소프트웨어 웹 어플리케이션(WAS) 
- Tomcat이 Apache의 기능 일부를 가져와 제공해주는 형태로 Apache Tomcat으로 같이 합쳐서 부름 
Apache
- Apache 소프트웨어 재단에서 관리하는 HTTP 웹 서버 - 흔히 부르는 apache server는 해당 재단에서 후원하는 오픈소스 프로젝트 커뮤니티에서 만든 http 웹 서버를 의미 
 
Tomcat
개념
- Apache 재단에서 개발한 서블릿 컨테이너(WAS) 
- JSP, 자바 서블릿과 같은 자바 기술을 실행하고 관리하는데 사용 
구성
- Coyote (HTTP Connector) - 톰캣의 HTTP Connector 역할 담당 - 클라이언트와 서버간의 통신 처리 
- HTTP 프로토콜 지원 
 
- 아파치 웹서버와 함께 정적파일 서비스 
 - 클라이언트와 통신을 담당 
- Catalina (Servlet Container) - 톰캣의 Servlet Container 역할 - JSP, Java Servlet을 호스팅하는 환경 제공 
- 서블릿의 라이프사이클 관리 
 
 - 서블릿과 JSP의 실행 
- Jasper (JSP Engine) - 톰캣의 JSP엔진 - JSP페이지를 서블릿으로 변환하고 실행하는 역할 
- 클라이언트가 JSP페이지에 접근하면 이를 서블릿 코드로 변환하고 컴파일 후 실행 
 
 - JSP페이지의 처리 
동작
- HTTP request: HTTP요청을 Coyote에서 받아 Catalina로 전달
- Catalina: Catalina에서 전달받은 HTTP요청을 처리할 웹 어플리케이션(Context)를 찾음
- Context: WEB-INF/web.xml 파일 내용을 참조해 전달받은 요청을 서블릿에게 전달
- Servlet: 요청된 Servlet을 통해 생성된 jsp 파일들이 호출될 때, Jasper (JSP Engine)가 Validation Check / Compile 등을 수행
특징
- Tomcat은 자바로 작성된 프로그램으로 JVM위에서 동작 - 하나의 JVM에 하나의 Tomcat Instance(Server)가 하나의 프로세스로 동작 
 
Embedded Tomcat
외장 톰캣
어플리케이션 실행
- 톰캣 설치 - 실제 자바로 작성된 코드와 상호작용할 - 서블릿 컨테이너가 필요함
 
- 톰캣 설정 파일 구성 
- 톰켓 webapp 디렉토리에 빌드된 스프링 어플리케이션 war파일 포함 
- 톰캣 실행 
특징
- Host설정으로 apache virtual host 설정 가능 - Apache HTTPd에서 사용하는 Virtual Host 기능 제공 - Virtual Host: main host 하위에 가상의 호스트를 소프트웨어적으로 둘 수 있는 기능
 
 - 즉 여러 어플리케이션을 하나의 포트로 서비스 할 수 있음 
내장 톰캣
- Spring boot에는 톰캣이 내장되어있음 - 어플리케이션 빌드와 실행만으로 웹 어플리케이션 서비스 가능 
- 톰캣을 설치할 필요없이 어플리케이션 바로 실행 가능 
 
어플리케이션 실행
- 빌드된 스프링부트 어플리케이션 jar, war를 자바 명령어로 실행 
특징
- 여러 호스트를 분기할 수 있는 기능을 사용하기 매우 복잡 - 내장톰캣으로 실행하는 Spring boot어플리케이션은 그 자체가 하나의 프로그램으로 서블릿 컨테이너가 하나의 포트를 독자적으로 점유 
 
- 톰캣 구성 부분의 관심사를 분리하여 개발자가 코드 작성에 집중 가능 
Ref
아파치 톰캣 내부구조 Web - 아파치(Apache)/톰캣(Tomcat)이란? Embedded Tomcat과 Tomcat의 차이
Last updated