제일 먼저 보이는 Application.java 파일을 열어봅시다.
public static void main().. 영락없는 JavaApp의 모습입니다.
일반 응용프로그램은 main부터 분석을 시작하지만..
웹프로젝트에서는 startPage를 찾기위해 web.xml을 열어 URL을 확인하던것과 사뭇 다른 모습입니다.
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
main 메서드 안에서 run메서드를 통해 Spring IOC Container를 띄우고 @SpringBootApplication을 기준으로 Spring Bean들을 탐색하게 된다.
기본적으로 Servlet이라고 하는 웹 어플리케이션으로 시작 할 수 있지만,
Application.properties 파일의 web-application-type: 설정에 따라 비웹어플리케이션타입으로 지정 할 수도 있다.
Gradle Build 후 SpringBoot.jar 생성
Springboot Workspace내의 Spring-boot 폴더로 이동 후 gradlew.bat build명령어를 실행합니다.
Gradle Wrapper에 의해서 Gradle bradle 빌드가 실행이 된다.
JAVA 컴파일, 테스트를 거쳐서 jar파일이 만들어지고 Spring-boot Gradle 플러그인에 의해 jar파일과 임베디드 Tomcat을 엮어서 다시 한번 SpringBoot.Jar가 만들어진다. (Fat jar 라고도 한다.)
Spring-boot\build\libs디렉터리에는 xxx-SNAPSHOT.jar파일이 만들어 진것을 확인 할 수 있다.
Spring-boot-xxx-SNAPSHOT.jar파일은 zip로 압축이 되어있다. 파일명만 jar이당.
unzip하여 풀어보면..- BOOT-INF/lib/밑에 우리가 사용할 jar파일이 있는것을 확인 할 수 있다.
- static폴더 하위에는 정적인 자원을 모아둔다. javascript, css, image파일이 위치한다.
- templates폴더 하위에는 동적으로 HTML을 생성할때 사용하는 템플릿 엔진들이 위치하게 된다.
unzip Spring-boot-xxx-SNAPSHOT.jar
- META-INF폴더에는 MANIFEST.MF파일이 위치하는데 해당 파일에는 jar안의 Application 정보가 저장된다.
Start-Class,
Class 경로 등등...
실질적으로는 jarLauncher가 실행이 되고
jarLauncher가 Start-Class인 우리 Application을 호출하는 기능을 하게된다.
- BOOT-INF 폴더에는 의존성 패키지가 위치하는 lib폴더와 classes폴더가 위치한다.
- classes폴더에는 application.yml과 우리가 생성한 패키지 리스트들이 있고 그 마지막엔 Application.class파일이 있다.
application.yml은 src밑에 있다. 그리고 그밑에 쭈욱 따라가면 우리가 생성한 패키지명대로 폴더가 있고 마지막으로 Application.class가 있게된다.
아까 말했던것처럼 @SpringBootApplication을 기준으로 Spring Bean들을 탐색하게 되므로, Application.class 위에 class가 있거나, Application.class(그러니까, SpringBootApplication)가 엉뚱하게 다른위치에 있거나 하면 실행이 안 될 수 있다고 한다.-
jar 파일을 실행하자.
java -jar Spring-boot-xxx-SNAPSHOT.jar
실행후 나오는 로그 레벨도 중요하다 -
//37:24
'Today I learned' 카테고리의 다른 글
[이클립스] 자주 사용하는 단축키 정리 (0) | 2019.09.22 |
---|---|
[JavaScript] 보안을 위해 console 로그 막기. (0) | 2019.09.09 |
Package Presentation 설정 (0) | 2019.09.04 |
[Window cmd] 특정 포트를 점유하고있는 프로세스 죽이기. (0) | 2019.09.04 |
[SQL] 특정 DB owner가 생성한 테이블의 정보 가져오기 (0) | 2019.09.04 |
댓글