스프링부트를 고민해보자 (5) - 스프링부트 동작 과정(거시적)

허진혁·2023년 3월 23일
0

고민해보자

목록 보기
5/5

궁금점

스프링부트는 강력한 자기 주장으로 많은 의존성을 주입 및 결합하여 바로 무언가 작업을 할 수 있도록 초기 설정을 해준다. 나는 필요한 기술이 있다면 선택해서 주입하고, 비지니스 로직을 작성하기만 하면 된다.

그렇다면 초기 설정을 어떻게 해주는 걸까?

1. 사용할 기술을 고민하고 정한다.

어떤 기술 스택을 선택할 것인가? 어떤 언어를 사용할 것인가? 웹 타입이 서블릿으로 할 것인가, 리액티브로 할 것인가? 데이터와 access를 할 때 어떠한 DB를 쓸 것인가? DB를 1개만 접근할 것인가 여러 개를 접근할 것인가? 뿐만 아니라 보안, 캐시 등 만들고자 하는 서비스를 고려하며 사용할 기술을 고민하고 선택하는 단계이다.

2. Spring initializr가 build.gradle(그래들 사용시) 생성

IDE를 사용하거나 https://start.spring.io/ 에서 프로젝트를 생성한다. 프로젝트 템플릿을 만들어 줄텐데, build 기술을 gradle로 할 경우 build.gradle 파일을 만들어 줄 것이고, maven으로 할 경우 pom.xml파일을 만들어 줄 것이다. 각각의 파일들은 사용할 라이브러리들 뿐만 아니라, 스프링부트 및 스프링 버전과 그에 맞는 각각의 라이브러리들의 버전들을 포함한다.

3. 자동 구성 후보를 로딩

@AutoConfigurtaion의 후보들이 먼저 로딩이 된다. (META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 파일에 등록된 것들을 자동 구성 후보로 둔다. )기술 선택에 따라 스프링 부트가 제공하는 Core 자동 구성 후보들이 로딩될 수도 있고, 스프링 부트 액추에이터, 클라우드, 시큐리티 등에 따라 더 많이 로딩이 된다.

4. 자동 구성 인프라 빈들의 디폴트 상태가 만들어짐

디폴트 자동 구성 인프라 빈은 각 인프라 빈들이 가지고 있는 속성 값들을 가지고 있는 채로 준비가 된다는 뜻이다.

5. 외부 설정 프로퍼티들이 적용된다.

스프링의 enviroment 추상화를 통해 외부의 다양한 프로퍼티 소스로부터 외부 설정 값들을 읽는다.(application.properties or yml)
보통 이 파일에는 DB연결 방법, 어떤 servlet 컨테이너를 사용할지, 쓰레드 개수, port 등 여러가지를 포함한다.

6. 사용자 구성정보 등록

우리가 작성해서 만든 @ComponetScan or @Bean이 붙은 코드들을 스프링 컨테이너에 등록한다.

7. 스프링 부트 등장

자동 구성 인프라스트럭처 빈과 사용자 구성 애플리케이션 빈이 합쳐져서 우리가 개발하는 애플리케이션 정보를 담은 스프링 부트가 동작하게 된다.

profile
Don't ever say it's over if I'm breathing

0개의 댓글