본문 바로가기

JAVA/Spring Boot

스프링 부트 작동원리

반응형

스프링 부트 작동원리


@SpringBootApplication


org.springframework.boot.autoconfigure.SpringBootApplicaton

package org.springframework.boot.autoconfigure;


@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Inherited

@SpringBootConfiguration

@EnableAutoConfiguration

@ComponentScan(excludeFilters = {

@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),

@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })

public @interface SpringBootApplication {

@AliasFor(annotation = EnableAutoConfiguration.class, attribute = "exclude")

Class<?>[] exclude() default {};


@AliasFor(annotation = EnableAutoConfiguration.class, attribute = "excludeName")

String[] excludeName() default {};


@AliasFor(annotation = ComponentScan.class, attribute = "basePackages")

String[] scanBasePackages() default {};


@AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")

Class<?>[] scanBasePackageClasses() default {};

}


@SpringBootApplication는 @Configuration, @EnableAutoConfiguration, @ComponentScan 애노에테이션이 뭉쳐진 애너테이션이다.


스프링 부트 1.0버전 시절에 이 세 애노테이션을 모두 붙여 스프링 부트 앱을 만들었지만, 1.2.0 버전 이후 더욱 개선된 @SpringBootApplicaiton이 등장했다.

@EnableAutoConfiguration은 스프링 부트를 움직이는 원동력이다.

스프링 부트 자동 구성 auto-Configuration이 바로 이 애노테이션에서 시작된다.

스프링 부트는 클래스패스, 애노테이션, 구성파일을 보고 가장 적절한 앱에 가장 알맞은 기술을 넣어 구성을 마친다.

결국 이 애노테이션이 스프링 부트로 앱을 구성하게 된다.


@SpringBootApplication과 그 내부의 자동 구성 @EnableAutoConfiguration 기능 덕분에 전체 애플리케이션 컴포넌트를 식별한다.

우선 클래스 패스를 조사해서 spring-boot-starter-web 스타터가 선언된 것을 인지한 스프링 부트는 앱 애플리케이션을 구성한다.

따라서 @RequestMapping이 달린 메서드가 있고 @Controller 애노테이션이 달린 클래스는 웹 컨트롤러로 보고, 톰캣 서버는 spring-boot-starter-web의 의존체 중 하나이므로 톰캣으로 앱을 띄운다.


스프링 부트에는 앱에 필요한 비기능적 non-functional 요소가 골고루 갖춰져있다.

일단 스프링 부트로 웹 애플리케이션을 생성할 때 마다 톰캣 서버는 반드시 내장된다. 

톰캣을 들어내고 제티, 언더토우 등 다른 서버를 대신 사용할 수 있다.


단독형 앱은

mvn package

실행후 target 폴더에 JAR 파일이 생성된다.

java -jar target/spring-boot-project-0.0.1-SNAPSHOT.jar

실행 하면 localhos:8080으로 접속이 된다. 앱을 따로 제작해 고객사에 배포할 때 좋은 방법이다.




반응형

'JAVA > Spring Boot' 카테고리의 다른 글

Spring Data JPA  (0) 2018.04.02
스프링 부트 데이터 액세스  (0) 2018.02.12
스프링 부트 테스트  (0) 2018.02.09
스프링부트에서 스프링  (0) 2018.02.09
스프링과 스프링 부트 비교  (0) 2018.02.08