웹서비스와 WEB WAS 개념 2/2

younk·2023년 10월 30일
0

스프링부트

목록 보기
9/10

Tomcat의 3가지 구성요소

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 명령어로 실행한다.

스프링부트 프로젝트에서 외장톰캣을 사용하는 경우

과거 스프링 레거시에서는 내장톰캣이 없었기 때문에, 자바 웹애플리케이션을 외부톰캣에 포함시켜주어야 했다.
외장톰캣을 사용하는 스프링 애플리케이션을 실행하려면

  • 톰캣을 설치한다
  • 톰캣 설정 파일을 구성한다
  • 톰캣 webapp 디렉토리에 build된 스프링 애플리케이션 war파일을 포함시켜준다.
  • 톰캣을 실행해준다.
    딱봐도 외장톰캣을 사용하는것이 복잡해보인다. 스프링부트의 내장톰캣은 외장톰캣보다 성능이 좋지않다는 인식이 있는것 같던데,(회사 사수님께도 실제로 그런 소리를 들었다. 내장톰캣은 간단한 토이프로젝트에서만 사용한다는..) 객관적인 근거는 듣지못했다. 내장톰캣과 외장톰캣이 비슷한 성능을 가진다는 블로그글도 봤기에 확신하지는 못하겠다.

하지만 내장톰캣과 외장톰캣의 분명한 차이점은 존재한다.
- virtual host 기능
외장 톰캣은 main host 하위에 가상의 호스트를 소프트웨어적으로 둘수 있는 기능을 제공한다. 이는 여러 애플리케이션을 하나의 포트로 서비스할 수있게 한다. 내장톰캣도 이를 가능하게 할 수는 있지만, 굉장히 까다롭다고 한다.

참고자료
Embedded Tomcat과 Tomcat의 차이

0개의 댓글