1. Spring Boot
- 스프링 부트는 스프링 프레임워크의 범위를 포함한다.
- 스프링 부트는 스프링 프레임워크를 기반으로 개발된 프레임워크이다.
- 아래의 항목은 스프링 부트가 추가적으로 제공하는 기능이다.
1-1. 단독 실행 가능한 스프링 애플리케이션
- 스프링 부트 프로젝트는 빌드 플러그인을 제공하고, 이를 실행하면 단독 실행 가능한 JAR 파일을 만들 수 있다.
1-2. 간편 설정을 위한 '스타터' 의존성 제공
- 스타터 내부에 라이브러리 의존성 설정을 포함하고 있어, 기능을 사용하는데 필요한 모든 라이브러리를 한 번에 추가할 수 있다.
1-3. 스프링 기능을 자동 설정하는 '자동 구성' 제공
- 스프링 부트는 자동 구성 기능을 제공한다.
- 특정 조건이 충족되면 미리 설정된 자바 설정 클래스가 동작하고, 애플리케이션을 구성한다.
1-4. 액추에이터
- 스프링 부트는 spring-boot-actuator 모듈을 제공하는데 이를 사용하여 서버를 모니터링할 수 있다.
1-5. XML 설정을 위한 일이 없음
- 스프링 프레임워크를 이용할 때 ApplicationContext 설정을 XML로 작성했습니다.
- 하지만 스프링 프레임워크 3.0부터 Java 클래스를 이용하여 설정하는 Java Config 방식의 등장하였습니다.
1-6. 내장 WAS
- spring-boot-starter-web에 Tomcat이 내장되어 있기 때문에 Dev, Stage, Production 환경에서 일관된 실행 환경을 가질 수 있습니다.
Tomcat이 아닌 Jetty나 UnderTow와 같은 것들로 쉽게 변경할 수 있습니다.
2. Spring Boot 생산성에 도움을 주는 라이브러리
- spring-boot-devtools
- 애플리케이션 실행 후 클래스패스에 포함된 파일이 변경되면 자동으로 애플리케이션을 재시작
- 리소스가 변경되면 자동으로 새로고침
- 웹 서비스에서 사용하는 캐시를 자동으로 막아줌.
실제 환경에는 배포되지 않도록 해야함.
- spring-boot-configuration-processor
- application.yml이나 application.properties 파일은 편집할 때 IDE에서 자동으로 완성해줌.
- lombok
3. pom.xml 분석
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>...</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.9</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframwork.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
- 자식 pom.xml은 부모 pom.xml 파일에 설정된 의존 관계를 그대로 상속 받을 수 있습니다.(자식 pom.xml에 설정된 의존관계가 우선권을 가집니다.)
-> 이러한 코드들을 나타내는 부분이 <parent> ~ </parent>입니다.
4. @SpringBootApplication
@SpringBootApplication
public class ApiApplication {
public static void main(String[] args) {
SpringApplication.run(ApiApplication.class, args);
}
}
- @SpringBootApplication은 3개의 주요한 어노테이션을 포함합니다.
4-1. @SpringBootConfiguration
- 내부에는 @Configuration을 포함하고 있습니다. @Configuration이 명시된 클래스는 자바 설정 클래스로 여겨지며, 별도의 스프링 빈을 정의할 수 있습니다.
4-2. @EnableAutoConfiguration
- 스프링 부트 프레임워크의 자동 설정 기능을 활성화하는 기능을 제공합니다.
4-3. @ComponentScan
- 클래스패스에 포함되어 있는 @Configuration으로 정의된 자바 설정 클래스와 스테리오 타입 어노테이션(@Component)로 정의된 클래스를 스캔합니다.
- 스프링 빈 설정을 스캔하며 찾아낸 것들은 스프링 빈 컨테이너가 스프링 빈으로 로딩하고 관리합니다.