본문 바로가기
Today I learned

[Spring Boot] 봄은 지난지 오래지만 마음만은, 스프링부트. 3일차

by soheemon 2019. 9. 4.

제일 먼저 보이는 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);
	}

}

Run As > Spring Boot App을 클릭하면 실행됩니다.

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

댓글