War배포의 불편함
내장 톰캣의 형식의 빌드와 배포(일반적인 jar)
내장 톰캣방식은 main()
메서드를 실행하면 톰캣이 작동되는 방식(라이브러리 형태로 서버가 내장)
main()
메서드를 실행하기 위해서는 jar형식으로 빌드되어야함
그리고 jar파일 안에는 META-INF/MANIFAST.MF파일에 실행할 main()
메서드의 클래스의 위치를 지정해줘야함(해당 파일에서 main()
메서드를 가진 클래스를 확인)
위 빌드방식으로 빌드했을 때는 치명적인 오류가 있다.
기본적으로 jar방식으로 빌드했을 때 jar파일은 내부에 jar파일을 못가지므로 해당 프로젝트를 빌드하는 과정에서 프로젝트가 의존하는 라이브러리 jar파일이 실행하려는 jar파일 내부에 존재하지 않는 것
이에 따라 main()
메서드를 실행하지 못하게 됨
war파일의 경우 libs폴더에 의존 라이브러리를 가지고 있었음
jar구조
jar파일은 jar파일을 포함할 수 없다
Fat jar
main()
메서드만 실행하면, 애플리케이션이 구동되는 jar파일을 만들 수 있게 됨스프링 부트 jar
구조
main()
메서드 실행 클래스)jar파일은 내부에 jar를 못가지는데 부트에서 빌드한 jar파일을 내부에 jar라이브러리를 가짐
boot-0.0.1-SNAPSHOT-plain.jar 파일도 빌드하면 생기는데, 이 파일은 우리가 개발한 코드만 가지는 순수한 jar파일
실행방식
main()
메서드를 실행main()
메서드를 실행함main()
메서드를 바로 실행함 → IDE가 필요한 라이브러리를 모두 인식 가능하기 때문