Spring Boot 을 이용하여 개발을 하게 된다면 어떤 dependency 를 사용해야 할지 선택해야만 한다. Spring Boot 의 Spring Boot Starter 는 특정 기능을 구현하는 데 필요한 라이브러리와 설정을 미리 묶어서 제공하는 package 이다.
예를 들어, spring-boot-starter-web 은 spring-web, spring-webmvc, hibernate-validator, json, tomcat 등의 dependency 들을 포함한다.
또한, 아래처럼 Spring Initializr 를 통하여 간단하게 pom.xml 에 dependency 를 자동으로 설정할 수 있다.

그렇다면, 각 Starter 에 포함되어 있는 dependency 들은 어떤 것들이 있는지 어떻게 확인할까?
우선적으로 Maven Central Repository 홈페이지에 접속하여 특정 Starter 에 대한 dependecy 목록을 확인할 수 있다. 예를 들어, Spring Boot Starter Web 에 대한 Dependecy 목록을 확인할 수 있다.
다른 방법은 IDE 를 통하여 해당 프로젝트에 포함된 Starter 들의 Dependency 목록을 확인할 수 있다. IntelliJ 의 경우, View > Tool Windows > Maven > Dependencies 를 통하여 아래와 같이 확인할 수 있다.

Spring Boot Starter Parent
Maven 이 Spring Boot 의 dependencies 를 개발자가 직접 다운로드 받고 설정하는 일을 대신 해준다. 또한 Starter 를 이용하여 어떤 dependency 를 사용해야 하는지 일일이 선택하지 않아도 된다.
그러나 여러개의 Starter 를 사용하는 경우에, 각 Starter 의 version 을 명시적으로 추가해줘야 한다. 이는 각 Starter 간의 version 호환성 문제로 인한 충돌이 일어날 수 있다.
이를 위하여 Starter 의 버전까지 통합 관리하는 Starter Parent 이 존재한다.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>POM 파일은 부모-자식 관계를 지원하기 때문에, 위와 같이 Starter Parent 를 통하여 version 을 지정하면 부모 POM 의 설정을 자식 POM 이 상속받을 수 있다.
<properties>
<java.version>17</java.version>
</properties>또한 각 Starter Parent 가 기본적으로 사용하는 Java version 이 존재한다. 따라서 위 코드처럼 overriding 을 통하여 해당 Java version 을 바꾸는 데에 사용하거나, 프로젝트에서 사용하는 Java version 을 명시적으로 나타내는 데에 사용할 수 있다.
이를 통하여 라이브러리 간의 version 충돌을 방지라고, 안정적인 개발 환경을 제공한다. 이외에도 Starter Parent 는 소스 인코딩 방식, Maven plugin 설정 등 프로젝트에 필요한 기본적인 환경의 정의한다.