Spring Initializr(spring-boot-starter-parent)

2023. 8. 4. 10:13Spring Boot

STS4에서 Spring Starter Project를 생성하면,다음과 같은 대화상자가 오픈됩니다. 

 

이는 사실 start.spring.io의 특정 RESTful API에게 Request Parameter[Project, Java version, Spring Boot Version,Dependencies]들을 전달함으로써, Spring Boot Project를 제공받습니다.

실제 start.spring.io에서 다음 이미지처럼 Spring Boot Project를 생서할 수 있습니다.

 

 

 

 

 

 

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.1.2</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.intheeast</groupId>
	<artifactId>first-cloud</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>first-cloud</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>11</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<excludes>
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>

<parent> 태그

Maven 기반의 Java 프로젝트에서 pom.xml 파일의 <parent> 태그는 프로젝트가 상속받을 부모 프로젝트(POM)를 지정하는데 사용됩니다. 
부모 POM에는 종속성 관리, 플러그인 관리, 공통 속성 등 프로젝트 전반에 걸쳐 공통적으로 사용되는 구성요소들이 정의됩니다. 하위 POM에서는 이 부모 POM을 <parent> 태그를 통해 참조하므로써 이러한 공통 구성요소들을 재사용할 수 있습니다. 
따라서 <parent> 태그는 중복된 구성을 최소화하고, 프로젝트의 유지 관리를 용이하게 하는데 큰 도움을 줍니다. 
Spring Boot 프로젝트에서는 일반적으로 spring-boot-starter-parent를 부모 POM으로 사용합니다. 이 부모 POM은 Spring Boot 애플리케이션 개발에 필요한 대부분의 기본 구성과 라이브러리 종속성들의 버전을 미리 정의하고 있습니다. 따라서 이를 상속받음으로써 개발자는 복잡한 설정이나 버전 관리 없이도 쉽고 빠르게 Spring Boot 애플리케이션을 개발할 수 있습니다.

이 XML 구문은 Maven 기반의 Java 프로젝트에서 pom.xml 파일의 일부입니다. 이는 프로젝트가 Spring Boot Starter 부모 POM을 상속하도록 지정하는 구문입니다. 

각 태그는 다음과 같은 의미를 가지고 있습니다:

  • <groudId> : 이 태그는 프로젝트가 종속되는 라이브러리 또는 POM의 그룹 ID를 나타냅니다. 이 경우에는 org.springframework.boot을 나타내며, 이는 Spring Boot 프로젝트에 대한 고유한 식별자입니다.   
  • <artifactId> : 이 태그는 프로젝트가 종속되는 라이브러리 또는 POM의 아티팩트 ID를 나타냅니다. 이 경우에는 spring-boot-starter-parent를 나타내며, 이는 Spring Boot의 부모 POM에 대한 고유한 식별자입니다.
  • <version> : 이 태그는 프로젝트가 종속되는 라이브러리 또는 POM의 버전을 나타냅니다. 이 경우에는 "3.1.2"를 나타내며, 이는 사용할 Spring Boot의 버전입니다.
  • <relativePath/> : 이 태그는 부모 POM이 파일 시스템의 어느 위치에 있는지를 나타냅니다. 여기서는 아무것도 지정하지 않았으므로, Maven은 기본적으로 중앙 저장소에서 부모 POM을 찾습니다.

spring-boot-starter-parent

spring-boot-starter-parent는 Spring Boot의 기본 부모 POM입니다. 이것은 대부분의 Spring Boot 애플리케이션에서 공통으로 사용하는 Maven 설정을 제공합니다.
spring-boot-starter-parent는 주요한 몇 가지 기능을 제공하는데, 이는 아래와 같습니다.
1. 공통 플러그인 관리: 부모 POM에 정의된 플러그인 관리 섹션은 공통 Maven 플러그인에 대한 기본 설정을 제공합니다. 예를 들어, Java 컴파일러의 버전이나 테스트를 실행하는 방법 등을 설정합니다.
2. 종속성 관리: spring-boot-starter-parent는 spring-boot-dependencies POM을 상속하고 있으며, 이를 통해 많은 인기 있는 라이브러리의 버전을 관리합니다. 이로 인해 개발자는 개별적으로 각 라이브러리의 버전을 관리하거나 호환성을 검증할 필요가 없습니다.

3. 기본 리소스 필터링: 프로퍼티 값들이 application.properties 또는 application.yml과 같은 리소스 파일로 치환될 수 있도록 리소스 필터링이 설정되어 있습니다.
4. 기본 인코딩 설정: 소스 코드 및 리소스 파일의 문자 인코딩이 UTF-8로 설정되어 있습니다.
5. 기본 spring-boot-maven-plugin 설정: Spring Boot 애플리케이션을 실행하고 패키징하는데 필요한 spring-boot-maven-plugin이 기본으로 설정되어 있습니다.

기억할 점은 spring-boot-starter-parent가 제공하는 기본 구성이라도 필요에 따라 프로젝트 수준에서 이를 오버라이드(재정의)할 수 있다는 것입니다. 이렇게 함으로써, 프로젝트의 특별한 요구사항을 쉽게 수용할 수 있습니다.

 

※Spring Boot 3.0 이상 버전은 Java 17 이상을 요구합니다.

'Spring Boot' 카테고리의 다른 글

Spring Boot Starter  (0) 2023.08.04
Spring Auto Configuration  (0) 2023.08.04
ZooKeeper  (0) 2023.06.04
Lombok  (0) 2023.04.27
SLF4J  (0) 2023.04.17