작성일
20230623
20230725
스프링이든 스프링부트이든 클래스 내부에 있는 main() 메서드에 의해 스프링 부트 애플리케이션을 실행된다.
@SpringBootApplication
public class SpringBootDeveloperApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDeveloperApplication.class, args);
}
}
그리고 이러한 main() 메서드를 담고 있는 클래스에 @SpringBootApplication 애너테이션을 추가함으로써 실행 시 스프링 부트 사용에 필요한 기본 설정까지 완료된다.
SpringApplication.run(메인클래스.class, args)
: 애플리케이션 실행 메서드
① SpringBootDeveloperApplication.class
: 스프링부트 애플리케이션의 메인클래스로 사용할 클래스를 전달하는 첫 번째 인수
② args
: 커맨드 라인의 인수들을 전달하는 두 번째 인수이다. 여기서 커맨드 라인의 인수란, 애플리케이션을 실행할 때 실행 명령어 뒤에 입력하는 값을 의미하며, 다시말해 args는 CMD(명령 프롬프트)에서 입력한 값들을 스프링 부트 애플리케이션으로 전달하는 인수이다.
커맨드 라인에서 입력받는 값들은 특정한 설정이나 행동 조정을 위해 임의로 파라미터를 전달할 때 주로 쓰이며, 참고로 그 외의 입력은 일반적으로 스프링부트 애플리케이션은 웹 애플리케이션이기 때문에 HTTP 요청에 의해 이루어진다는 점을 알아두자.
package org.springframework.boot.autoconfigure;
import ···
@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 {
···
}
@SpringBootConfiguration
: 스프링 부트 관련 설정을 나타내는 애너테이션으로, 스프링 부트 개발자가 직접 다룰 일은 없다고 해도 무방하다고 한다.
@ComponentScan
: 사용자가 등록한 빈을 읽고 등록하는 애너테이션으로, @Component라는 애너테이션을 가진 클래스들을 찾아 빈으로 등록해준다.
@EnableAutoConfiguration
: 스프링 부트에서 자동 구성을 활성화시키는 애너테이션으로, 스프링 부트 서버가 실행될 때 메타 파일을 읽고 정의된 설정들을 토대로 spring.factories를 자동으로 구성한다.
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class)