Spring Boot는 Spring을 더 편리하게 개발할 수 있게 도와주는 개발 프레임워크입니다. Spring이 다양한 기능을 포함하면서 환경설정이 어려워졌기에 자주 쓰는 설정들을 자동화 시켜서 편의성을 증진시킨 프레임워크라고 할 수 있습니다.
Spring Boot의 특징은 다음과 같습니다.
Spring은 원래 WAR 파일로 배포하여 외부 서버에 올리는 방식이었습니다. Spring Boot는 애플리케이션에 내장 서버를 포함해서 JAR 파일로 배포하는 방식을 사용합니다. 이렇게 만들어진 JAR 파일을 JVM에서 실행시키면, 서버도 같이 실행됩니다. 따라서 Spring Boot를 사용하면 외부 서버를 설치할 필요가 없습니다.
# jar가 실행될때 라이브러리로 등록된 톰캣을 실행시킨것
# 원래 자바 표준에선 jar 내부에 jar를 실행시킬 수 없지만 JarLauncher라는 실행클래스로 내부에 포함된 jar를 실행가능한 형식의 jar로 만든 뒤에 main class를 실행시키도록 설계함(BOOT-INF, META-INF)
하나의 Spring 프로젝트에는 다양한 빈이 필요합니다. 웹 애플리케이션을 개발할 때 자주 사용하는 빈들이 있을 것입니다. 개발자가 직접 빈을 설정하지 않으면 Spring Boot가 기본 설정으로 빈을 등록해줍니다. 자동으로 등록되는 빈의 종류를 알고 싶다면, 각 외부 라이브러리의 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports에 기재된 클래스를 확인하면 됩니다.
* 외부 라이브러리를 만든 개발자가 자동 등록시켜줄 configuration에 @AutoConfiguration을 붙인 뒤, 이를 org.springframework.boot.autoconfigure.AutoConfiguration.imports에 기재하면 클라이언트가 해당 라이브러리 사용시 자동으로 bean이 생성됨(@EnavleAutoConfiguration, AutoConfigruationImportSelector)
자주 사용하는 라이브러리를 묶어놓은 스타터 라이브러리를 제공합니다. 여러 종류가 있으며, 필요한 것을 선택하여 사용할 수 있습니다. Gradle 기준으로 build.gradle 파일에 다음과 같이 등록하면 됩니다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
starter 종류 링크
https://docs.spring.io/spring-boot/reference/using/build-systems.html#using.build-systems.starters
spring initializr를 사용하면 쉽게 프로젝트를 세팅할 수 있음
https://start.spring.io/
보통 개발자는 로컬 서버, 개발 서버, 운영 서버 등 다양한 환경마다 설정을 다르게 적용해야 합니다. 이를 위해 설정을 외부에서 관리하거나 외부 인자를 통해 다른 설정이 적용되도록 관리합니다. 외부 설정을 이용하는 방법은 크게 4가지가 있습니다:
Spring Boot는 이러한 설정 방법들을 추상화하여 하나의 Environment 인터페이스로 통합해 놓았습니다. Spring 애플리케이션이 시작할 때 Environment 빈이 자동으로 등록되며, 이를 통해 다양한 설정을 쉽게 주입받고 사용할 수 있습니다.
가장 일반적으로 사용되는 설정파일 관리방식은 application.properties입니다. 애플리케이션이 실행될 때 resources 디렉토리에 있는 application.properties 파일을 Spring이 읽고, 그 내용을 Environment에 등록합니다. 이 파일을 통해 다양한 설정 값을 정의할 수 있고 또한 특정 환경에 따라 다른 설정이 등록되도록 제어할 수 있습니다.
예를 들어, application-dev.properties, application-prod.properties 파일을 만들어 두고, Spring Boot가 활성화된 profie에 따라 적절한 파일을 자동으로 선택하게 할 수 있습니다.(spring.profiles.active=dev 등의 방식으로 외부인자를 던져줘야 함)