Springboot 프로젝트 구동 시작점

𝙃𝙖𝙞𝙡𝙚𝙮·2021년 12월 14일
0
post-thumbnail

Springboot run 과정

springboot의 핵심은 아래와 같다.

build.gradle 파일 내용에 따라,
클래스패스, 어노테이션, 기타 자바 구성 클래스를 보고 적합한 앱으로 맞춤하는 자동구성

이를 이해하고나면, spring boot 프로젝트를 구동시키면 어떤 과정으로 서버가 돌아가는 걸까? 궁금해진다.

🛫 스프링부트의 진입점

package com.example.projectmybatis;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ProjectMybatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProjectMybatisApplication.class, args);
    }

}

(1) @SpringBootApplication
(2) main메서드에서 SpringApplication로 전체 앱을 실행한다.
(3) run메서드는 ProjectMybatisApplication 싱글턴클래스와, 어플리케이션 파라미터(args)를 파라미터로 받는다.

@SpringBootApplication

이 어노테이션의 정체는 @Configuration, @EnableAutoConfiguration, @ComponentScan 이 합쳐진 것이다. 이를 통해 전체 애플리케이션 컴포넌트(@RestController, @Service, @Repository, @Mapper, ...)를 식별한다.

따라서 순서를 보면
(1) classPath를 조사해서 spring-boot-stater-web 스타터가 선ㄴ언된 것을 인지한 스프링부트는 웹 애플리케이션을 구성한다.
(2) (@RestController, @Service, @Repository, @Mapper, ...)를 스캔한다.
(3) spring-boot-stater-web 의존체 중 하나인 톰캣으로 앱을 띄운다.

@Configuration

@EnableAutoConfiguration

🎯 깃헙 코드보기

@SpringBootApplication를 구성하는 것 중에서, @EnableAutoConfiguration를 확인해보자.
이 어노테이션은 자동구성을 거는 어노테이션이다. 즉, 앱에서 필요한 빈을 유추해서 구성하는 클래스이다. 주동 구성 클래스는 클래스패스 및 앱에서 정의한 빈에 따라 적용여부가 결정된다.

만약에 어떤 자동구성을 끄고 싶으면 해당 어노테이션에 exclude 파라미터 속성값에 클래스를 명시한다.

@EnableAutoConfiguration(exclude = [ActiveMQAutoConfiguration.class])

하지만 위에서도 설명했든, 해당 어노테이션은 @SpringBootApplication에 포함되므로 아래와 같이 표현하는 것도 가능하다.

@SpringBootApplication(exclude = {ActiveMQAutoConfiguration.class, DataSourceAutoConfiguration.class})

@ComponentScan

profile
ෆ 𝓋𝒾𝓈 𝓉𝒶 𝓋𝒾𝑒 ෆ

0개의 댓글