[Spring] 스프링과 Tomcat
- [ Backend ]/Spring
- 2023. 2. 16.
개요
스프링 프레임워크가 처음 출시되었을 때는 의존성 버전을 직접 관리하거나, 서버를 직접 설치해주어야 하는 등의 초기 설정을 직접 해주어야 했다.
이를 보완하기 위해서 스프링 부트가 출시되었는데, 이것은 최소한의 설정으로 스프링 기반의 애플리케이션을 독립 실행할 수 있게 돕는 프레임워크라고 할 수 있다. 우리는 스프링 부트를 통해
1. starter 패키지를 통해 필요한 의존성을 자동으로 가져올 수 있게 되었을 뿐 아니라,
2.기존에는 @ComponentScan, @EnableAutoConfiguration, @Configuration을 통해서 명시적으로 설정해주어야 했던 반면, @SpringBootApplication을 통해서 이 셋 대신 자동으로 필요한 빈을 설정해줄 수 있게 되었다.
3. 또한, 내장 웹 서버를 통해 외부의 추가적인 웹 서버 설정 없이도 애플리케이션을 실행 가능하다. 스프링 부트는 초기(ver 1.0)부터 Apache Tomcat을 기본 내장 WAS로 사용하고 있다.
과 같은 이점을 얻을 수 있다.
Tomcat
옛날에는 OS에 톰캣을 직접 설치한 후, WAR로 패키징한 파일을 특정 디렉토리(/webapps)에 복사한다. 이 과정에서 필요한 xml 설정 파일을 직접 조작해주어야 했다.
implementation 'org.springframework.boot:spring-boot-starter-web'
하지만 스프링 부트를 사용하면, 위와 같이 우리가 기본적으로 사용하는 스프링 부트의 web starter 패키지 안에 톰캣이 설정되어 있다.
스프링 프로젝트에서 Dependency를 살펴보면 현재 설치된 스프링 부트 웹 스타터 패키지 3.1.6 하위에 spring-boot-starter-tomcat 패키지가 존재하는 것을 확인할 수 있다.
추가)
서블릿을 분석하다가 coyote와 connector, catalina라는 패키지 안에 Request객체가 존재하는 것을 확인할 수 있었다. 이 때 coyote라는 패키지는 실제 네트워크 통신을 담당하는 낮은 수준의 커넥터를 말하고, catalina 패키지는 서블릿 컨테이너 자체를 말한다. 또한 connector는 coyote로부터 받은 Request객체를 catalina로 전달하고, catalina를 거쳐 되돌아오는 Response를 coyote로 전달하는 중간 다리 역할을 한다.
Tomcat은 위와 같이 컨테이너 계층 구조로 이루어져 있으며, 톰캣을 구성하는 컴포넌트들은 Container라는 인터페이스를 구현하고 있다.
'[ Backend ] > Spring' 카테고리의 다른 글
[Spring] 비동기 환경에서 트랜잭션은 어떻게 동작할까? (0) | 2023.12.08 |
---|---|
[Spring Security] Security 인증, 인가 설정 (0) | 2023.10.16 |
[Spring Security] @AuthenticationPrincipal, HandlerMethodArgumentResolver (0) | 2022.11.13 |
[Spring Security] jwt를 활용하여 시큐리티 커스텀하기 (0) | 2022.08.13 |
[Spring Security] JWT(Json Web Token) 개념 (0) | 2022.08.12 |