1) Coyote
코요테는 웹서버의 역할을 한다.
클라이언트로부터 들어온 http 요청을 처리하며, 톰캣에 TCP를 통한 프로토콜을 생성하고 관리한다.
2) Catalina
카탈리나는 톰캣의 가장 코어 요소인 서블릿 컨테이너이다. 자바 서블릿을 호스팅하는 환경을 제공한다.
카탈리나의 기본 설정은 6개의 config 파일을 편집하여 구현할 수 있는데, 이부분은 깊게 들어가면 시간이 걸릴것 같아 우선은 패스해둔다.
3) Jasper
톰캣의 jsp엔진이다. 재스퍼는 jsp파일을 파싱하여 서블릿 코드로 컴파일한다. jsp가 변경되면 리컴파일 작업도 수행한다.
스프링부트 프로젝트 생성시, spring-boot-starter-web 라이브러리를 사용하면 내장톰캣을 사용할 수 있다.
이 내장톰캣은 빌드와 배포를 편리하게 해주며, 빌드시 하나의 jar를 사용한다.
@SpringBootApplication
public class BootApplication {
public static void main(String[] args) {
SpringApplication.run(BootApplication.class, args);
}
}
스프링부트 실행시 main()메소드에서 SpringApplication.run()을 호출하게 되는데, 이때 컴포넌트 스캔을 비롯한 여러 작업을 실행한다.
그 중 중요한 작업 두가지는 이것이다.
이때 생성된 내장 톰캣은 build된 스프링부트 애플리케이션 jar를 java 명령어로 실행한다.
과거 스프링 레거시에서는 내장톰캣이 없었기 때문에, 자바 웹애플리케이션을 외부톰캣에 포함시켜주어야 했다.
외장톰캣을 사용하는 스프링 애플리케이션을 실행하려면
하지만 내장톰캣과 외장톰캣의 분명한 차이점은 존재한다.
- virtual host 기능
외장 톰캣은 main host 하위에 가상의 호스트를 소프트웨어적으로 둘수 있는 기능을 제공한다. 이는 여러 애플리케이션을 하나의 포트로 서비스할 수있게 한다. 내장톰캣도 이를 가능하게 할 수는 있지만, 굉장히 까다롭다고 한다.