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 μ„€μ • λ“± ν”„λ‘œμ νŠΈμ— ν•„μš”ν•œ 기본적인 ν™˜κ²½μ˜ μ •μ˜ν•œλ‹€.