스프링부트는 강력한 자기 주장으로 많은 의존성을 주입 및 결합하여 바로 무언가 작업을 할 수 있도록 초기 설정을 해준다. 나는 필요한 기술이 있다면 선택해서 주입하고, 비지니스 로직을 작성하기만 하면 된다.
그렇다면 초기 설정을 어떻게 해주는 걸까?
어떤 기술 스택을 선택할 것인가? 어떤 언어를 사용할 것인가? 웹 타입이 서블릿으로 할 것인가, 리액티브로 할 것인가? 데이터와 access를 할 때 어떠한 DB를 쓸 것인가? DB를 1개만 접근할 것인가 여러 개를 접근할 것인가? 뿐만 아니라 보안, 캐시 등 만들고자 하는 서비스를 고려하며 사용할 기술을 고민하고 선택하는 단계이다.
IDE를 사용하거나 https://start.spring.io/ 에서 프로젝트를 생성한다. 프로젝트 템플릿을 만들어 줄텐데, build 기술을 gradle로 할 경우 build.gradle 파일을 만들어 줄 것이고, maven으로 할 경우 pom.xml파일을 만들어 줄 것이다. 각각의 파일들은 사용할 라이브러리들 뿐만 아니라, 스프링부트 및 스프링 버전과 그에 맞는 각각의 라이브러리들의 버전들을 포함한다.
@AutoConfigurtaion의 후보들이 먼저 로딩이 된다. (META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 파일에 등록된 것들을 자동 구성 후보로 둔다. )기술 선택에 따라 스프링 부트가 제공하는 Core 자동 구성 후보들이 로딩될 수도 있고, 스프링 부트 액추에이터, 클라우드, 시큐리티 등에 따라 더 많이 로딩이 된다.
디폴트 자동 구성 인프라 빈은 각 인프라 빈들이 가지고 있는 속성 값들을 가지고 있는 채로 준비가 된다는 뜻이다.
스프링의 enviroment 추상화를 통해 외부의 다양한 프로퍼티 소스로부터 외부 설정 값들을 읽는다.(application.properties or yml)
보통 이 파일에는 DB연결 방법, 어떤 servlet 컨테이너를 사용할지, 쓰레드 개수, port 등 여러가지를 포함한다.
우리가 작성해서 만든 @ComponetScan or @Bean이 붙은 코드들을 스프링 컨테이너에 등록한다.
자동 구성 인프라스트럭처 빈과 사용자 구성 애플리케이션 빈이 합쳐져서 우리가 개발하는 애플리케이션 정보를 담은 스프링 부트가 동작하게 된다.