STS4에서 Spring Starter Project를 생성하면, 다음과 같은 대화상자가 오픈됩니다.
Add 누른다음.
Spring Boot DevTools, Lombok, Spring Web, Thymeleaf 선택
GENERATE 클릭 후, Demo 알집파일 다운.
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.kkh</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>17</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의 기본 부모 POM입니다.
이것은 대부분의 Spring Boot 애플리케이션에서 공통으로 사용하는 Maven 설정을 제공합니다.
spring-boot-starter-parent는 주요한 몇 가지 기능을 제공하는데, 이는 아래와 같습니다.
공통 플러그인 관리 : 부모 POM에 정의된 플러그인 관리 섹션은 공통 Maven 플러그인에 대한 기본 설정을 제공합니다. 예를 들어, Java 컴파일러의 버전이나 테스트를 실행하는 방법 등을 설정합니다.
종속성 관리 : spring-boot-starter-parent는 spring-boot-dependencies POM을 상속하고 있으며, 이를 통해 많은 인기 있는 라이브러리의 버전을 관리합니다. 이로 인해 개발자는 개별적으로 각 라이브러리의 버전을 관리하거나 호환성을 검증할 필요가 없습니다.
기본 리소스 필터링 : 프로퍼티 값들이 application.properties 또는 application.yml과 같은 리소스 파일로 치환될 수 있도록 리소스 필터링이 설정되어 있습니다.
기본 인코딩 설정 : 소스 코드 및 리소스 파일의 문자 인코딩이 UTF-8로 설정되어 있습니다.
기본 spring-boot-maven-plugin 설정 : Spring Boot 애플리케이션을 실행하고 패키징하는데 필요한 spring-boot-maven-plugin이 기본으로 설정되어 있습니다.
기억할 점은 spring-boot-starter-parent가 제공하는 기본 설정이라도 필요에 따라 프로젝트 수준에서 이를 오버라이드(재정의)할 수 있다는 것입니다. 이렇게 함으로써, 프로젝트의 특별한 요구사항을 쉽게 수용할 수 있습니다.
※Spring Boot 2.5 이후 버전은 Java 8 이상을 요구합니다.