기존의 서블릿을 사용하면 war로 빌드되어 따로 다운로드 받은 WAS에 배포해야 됐었는데 스프링 부트에서는 내장 톰캣이 있기 때문에 jar만 실행하면 다 자동으로 실행되었다. 이것이 가능한 이유에 대해서 학습해보았다.
내장 톰캣이 가능한 이유
먼저 war와 jar의 차이점에 대해서 알아보면
war는 웹 어플리케이션을 위한 압축 파일이고,
jar는 Java 클래스를 포함하고 있는 압축 파일이다.
jar는 보통 main() 메서드를 가지고 있는 클래스나 라이브러리 용도로 사용되는 클래스만을 가지고 있어서 내부에 다른 jar 파일을 포함할 수 없다.

스프링을 사용할 때 빌드되는 파일은 jar인데 톰캣이 Java로 만들어졌고, 라이브러리로 실행할 수 있도록 제공하기 때문에 톰캣 라이브러리를 가져다 인스턴스 생성 후 설정만 해주면 된다.

이렇게 톰캣 인스턴스를 만들고 포트 번호를 지정해준다.

스프링 컨테이너를 만들고 설정 클래스를 등록한다.

디스패처 서블릿을 만들고 여기에 스프링 컨테이너를 연결한다.
아래 부분은 빌드할 때 경로 관련 오류가 발생해서 포함시켰다.

톰캣에 디스패처 서블릿을 등록하고, 매핑 정보를 설정한다.
이렇게 작성하고 main() 메서드를 실행시키면 원래 하던대로 스프링 어플리케이션이 동작할 것이다.
jar의 문제점
기존에 빌드하던대로 gradlew를 이용해서 빌드하고 실행해보면 제대로 실행이 되지 않는 것을 알 수 있다. 그 이유는 프로젝트에 포함시킨 라이브러리들이 jar로 저장되어 있는데 어플리케이션을 빌드하면 jar로 만들어지고, jar 내부에는 jar 파일이 포함될 수 없기 때문이다.
그래서 Fat jar라는 것으로 라이브러리를 모두 순회하면서 내부에 포함되어 있는 클래스 파일들을 전부 가져와 빌드되는 jar에 포함시켜 빌드하게 된다.


스프링 부트 - 핵심 원리와 활용 강의 | 김영한 - 인프런
김영한 | 실무에 필요한 스프링 부트는 이 강의 하나로 모두 정리해드립니다., 백엔드 개발자를 위한 스프링 부트 끝판왕! 실무에 필요한 내용을 모두 담았습니다. [임베딩 영상] 김영한의 스
www.inflearn.com
'공부 > Spring' 카테고리의 다른 글
| [Spring Boot] 스프링 부트 자동 구성 및 @Conditional 알아보기 (0) | 2024.08.27 |
|---|---|
| [Spring Boot] 자동 라이브러리 관리 알아보기 (0) | 2024.08.26 |
| [Servlet] 서블릿 컨테이너 초기화 (0) | 2024.08.04 |
| [Spring] 포인트컷 지시자(Pointcut Designator) (0) | 2024.07.31 |
| [Spring] 자동 프록시 생성기 (0) | 2024.07.29 |