Apache Tomcat 아파치 톰캣은 Java Servlet 및 JSP를 실행할 수 있는 서블릿 컨테이너이면서
자체적으로 HTTP 요청을 처리할 수 있는 웹 애플리케이션 서버 (WAS) 이다
독립적인 WAS 로 동작할 수 있지만, 대규모 시스템에서는 Apache HTTP Server 또는 NGINX 와 함께 사용하는 경우도 많다
Apache 아파치는, Web Server 를 일컫으며, 리눅스에서 httpd 로 명명지어져 배포된다
정적인 데이터, 이미지나 단순 HTML 을 처리하는 서버에서 안정적으로 돌아간다
Tomcat 톰캣은, 웹 서버와 웹 컨테이너의 결합으로,
현재 가장 일반적이고 많이 사용되는 Web Application Server 이다
동적인 데이터를 처리하거나 DB 연결, 데이터 조작 등을 활용하면 좋다
톰캣이 아파치의 기능 일부를 가져와서 제공해 주기 때문에 아파치 톰캣이라고 부른다고 하는 말도 있는데,
단순하게, 아파치 소프트웨어 재단에서 개발했기 때문에 Apache Tomcat 이라고 불린다고 한다
Tomcat 과 일반 WAS 의 차이
톰캣은 WAS 중에서도 서블릿 컨테이너 (Servlet Container) 기능만 제공하는 가벼운 서버이다
일반적인 WAS (WebSphere, JBoss, WebLogic 등) 처럼 JTA, EJB, JMS 등의 엔터프라이즈 기능을 지원하지 않는다
톰캣은 서블릿/ JSP 실행에 최적화된 가벼운 WAS 라고 볼 수 있다
단, 톰캣의 확장 버전인 TomEE 는 엔터프라이즈 기능을 지원한다
Tomcat 주요 기능
Tomcat 은 여러 가지 핵심 컴포넌트로 구성되어 있다
Component | Description |
Catalina | 톰캣의 핵심 서블릿 컨테이너, 서블릿의 생명 주기를 관리하고 요청 처리 |
Coyote | HTTP 요청을 처리하는 커넥터, 클라이언트로부터 들어오는 HTTP 요청을 받아 Catalina 에 전달 |
Jasper | JSP 를 서블릿으로 변환하는 엔진, JSP 파일을 컴파일하여 실행 가능한 서블릿 코드로 변환 |
Cluster | 여러 대의 톰캣을 연결해 부하 분산 처리 |
Manager App | 웹 UI 에서 톰캣 애플리케이션을 관리할 수 있는 기능 |
컴포넌트 간 상호 작용
1. Coyote가 클라이언트로부터 HTTP 요청을 받는다
2. Coyote는 이 요청을 Catalina에 전달한다 - 요청은 HTTP 1.1, HTTP/2, 또는 AJP 프로토콜을 통해 전달될 수 있다
3. Catalina는 요청을 적절한 서블릿에 라우팅한다 - 요청 URL 에 따라 적절한 서블릿을 찾아 실행한다
4. 요청이 JSP 파일과 관련된 경우, Jasper가 이를 서블릿으로 변환하고 Catalina 에서 실행할 수 있도록 준비한다
5. 서블릿이 요청을 처리하고 응답을 생성한다 - Catalina 는 해당 서블릿을 실행하여 비즈니스 로직을 처리하고 응답 데이터를 생성한다
6. Catalina는 생성된 응답 데이터를 Coyote에 전달하고, Coyote는 이를 클라이언트에게 반환한다
Spring Boot 는 내장 Tomcat 을 기본적으로 사용해서
애플리케이션을 실행하면, 내장 톰캣이 자동으로 백그라운드에서 실행되고, HTTP 요청을 처리해준다
spring-boot-starter-web 을 사용하면 내부에서 내장 톰캣을 사용한다
build.gradle 에 Dependency 를 추가해주면 된다
내장 톰캣에 대한 자세한 설명은 여기 정리 https://helloahram.tistory.com/215
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
Embedded Tomcat VS Standalone Tomcat
항목 | Embedded Tomcat | Standalone Tomcat |
배포 방식 | JAR 파일 실행 | WAR 파일을 톰캣에 배포 |
설정 편의성 | Spring Boot 에서 자동 설정 | 수동으로 server.xml 수정 필요 |
운영 방식 | 독립적인 애플리케이션 실행 | 톰캣 서버 먼저 실행 |
활용 사례 | 마이크로서비스 아키텍처, 클라우드 네이티브 애플리케이션, 빠른 개발 주기가 필요한 프로젝트 |
대규모 엔터프라이즈 시스템, 레거시 애플리케이션 호스팅, 복잡한 서버 구성이 필요한 환경 |
Standalone Tomcat 은 아래의 장점도 있다
1. 세밀한 설정 가능 - server.xml 을 통해 상세한 서버 설정 가능
2. 다중 애플리케이션 호스팅 - 하나의 Tomcat 인스턴스에서 여러 웹 애플리케이션 호스팅 가능
3. 독립적인 업그레이드 - 서버와 애플리케이션을 독립적으로 업그레이드 가능
4. 클러스터링 지원 - 대규모 시스템에서 부하 분산 및 고가용성 구현에 용이
Tomcat 사용 예제
@RestController
@RequestMapping("/api/v1")
public class HelloController {
@GetMapping("/")
public String hello() {
return "Hello, Ahram";
}
}
./gradlew bootRun 명령어를 실행하면 http://localhost:[PortNumber]/api/v1/ 에서 아래와 같이 출력된다
✔ Tomcat 은 Java 서블릿과 JSP 를 실행할 수 있는 서블릿 컨테이너 + HTTP 요청을 처리할 수 있는 가벼운 WAS 이다
✔ Standalone Tomcat 에 배포하려면 WAR 파일을 사용하고, Spring Boot 내장 톰캣은 JAR 파일 실행 방식이다
'TIL' 카테고리의 다른 글
Servlet 서블릿 (1) | 2025.02.13 |
---|---|
Embedded Tomcat 내장 톰캣 (1) | 2025.02.12 |
Java Application 실행 환경 구축 (1) | 2025.02.07 |
트랜잭션 Transaction (0) | 2025.02.06 |
[TIL] MTTD/ MTTR/ MTTF/ MTBF (0) | 2025.01.23 |