๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Spring Boot Starter ์™„๋ฒฝ ํ™œ์šฉ ๊ฐ€์ด๋“œ: ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ

mrmount 2024. 10. 21.

 

 

์Šคํ”„๋ง ๋ถ€ํŠธ(Spring Boot) ์˜ ๊ฐ€์žฅ ํฐ ์žฅ์  ์ค‘ ํ•˜๋‚˜๋Š” ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ์†์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์ด๋•Œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ Spring Boot Starter ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Starter์˜ ์—ญํ• ๊ณผ ์ข…๋ฅ˜ ๋ฅผ ์†Œ๊ฐœํ•˜๊ณ , ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋Œ€ํ‘œ์ ์ธ Starter ๋“ค์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์˜์กด์„ฑ ์ตœ์†Œํ™”์™€ Starter ์„ ํƒ ์ „๋žต ์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ์— ๋งž๋Š” Starter๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

 


 

 

๋ชฉ์ฐจ

  1. Spring Boot Starter๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
  2. ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋Œ€ํ‘œ์ ์ธ Starter
  3. ์˜์กด์„ฑ ์ตœ์†Œํ™”์™€ Starter ์„ ํƒ ์ „๋žต
  4. Starter๋ฅผ ํ™œ์šฉํ•œ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ ์˜ˆ์ œ
  5. ํŠธ๋ Œ๋“œ์™€ ํ†ต๊ณ„: Starter ํ™œ์šฉ์˜ ์ค‘์š”์„ฑ

 


 

1. Spring Boot Starter๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

Spring Boot Starter ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ์˜์กด์„ฑ๋“ค์„ ๋ฏธ๋ฆฌ ๋ฌถ์–ด๋†“์€ ํŒจํ‚ค์ง€ ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ์ง์ ‘ ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ๊ณ  ์„ค์ •ํ•  ํ•„์š” ์—†์ด , ํ•„์š”ํ•œ Starter๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๊ด€๋ จ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ž๋™์œผ๋กœ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Spring Web Starter ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์š”ํ•œ Spring MVC, Jackson, Tomcat ๋“ฑ์ด ํ•จ๊ป˜ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

Starter ์‚ฌ์šฉ์˜ ์žฅ์  :
- ๊ฐ„ํŽธํ•œ ์˜์กด์„ฑ ๊ด€๋ฆฌ : ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ํ•œ ๋ฒˆ์— ํฌํ•จํ•  ์ˆ˜ ์žˆ์Œ
- ๋น ๋ฅธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์„ฑ : ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐœ๋ณ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌํ•  ํ•„์š” ์—†์Œ
- ๋ฒ„์ „ ํ˜ธํ™˜์„ฑ ์œ ์ง€ : Starter์— ํฌํ•จ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ์„œ๋กœ ํ˜ธํ™˜๋˜๋„๋ก ๊ด€๋ฆฌ๋จ

 


 

2. ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋Œ€ํ‘œ์ ์ธ Starter

์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ๋Š” ๋‹ค์–‘ํ•œ Starter๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ์ค‘ ์›น ๊ฐœ๋ฐœ , ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ , ๋ณด์•ˆ ์— ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” Starter๋“ค์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Starter ์ด๋ฆ„ ์„ค๋ช… ์ฃผ์š” ์‚ฌ์šฉ ์˜ˆ์‹œ
spring-boot-starter-web ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ œ๊ณต REST API, MVC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์ถ•
spring-boot-starter-data-jpa JPA๋ฅผ ํ™œ์šฉํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ ์ง€์› MySQL, H2์™€ ๊ฐ™์€ DB์™€ ์—ฐ๋™
spring-boot-starter-security ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์‚ฌ์šฉ์ž ์ธ์ฆ, ๊ถŒํ•œ ๋ถ€์—ฌ ๊ตฌํ˜„
spring-boot-starter-thymeleaf Thymeleaf ํ…œํ”Œ๋ฆฟ ์—”์ง„์„ ์‚ฌ์šฉํ•œ ๋ทฐ ๋ Œ๋”๋ง ์ง€์› HTML ๋ Œ๋”๋ง ๊ธฐ๋ฐ˜ ์›น ํŽ˜์ด์ง€ ๊ฐœ๋ฐœ
spring-boot-starter-test ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํฌํ•จ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ฐ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ




 

3. ์˜์กด์„ฑ ์ตœ์†Œํ™”์™€ Starter ์„ ํƒ ์ „๋žต

์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•  ๋•Œ๋Š” ์ตœ์†Œํ•œ์˜ Starter๋งŒ ์ถ”๊ฐ€ ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ€ ํฌํ•จ๋˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๊ณ  ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ์„ ํƒ ์ „๋žต ์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

1) ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ํฌํ•จํ•˜๊ธฐ

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹จ์ˆœํ•œ API ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ ๋‹ค๋ฉด spring-boot-starter-web ๋งŒ ์ถ”๊ฐ€ํ•˜๊ณ , ๋ณด์•ˆ์ด ํ•„์š”ํ•  ๋•Œ๋งŒ spring-boot-starter-security ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

2) ๊ธฐ์กด Starter์— ์ค‘๋ณต๋œ ์˜์กด์„ฑ ํ™•์ธํ•˜๊ธฐ

์ผ๋ถ€ Starter๋Š” ๊ณตํ†ต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, spring-boot-starter-data-jpa ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ด€๋ จ๋œ ์˜์กด์„ฑ์„ ํฌํ•จํ•˜๋ฏ€๋กœ, ๋ณ„๋„๋กœ JDBC Starter๋ฅผ ์ถ”๊ฐ€ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

3) ์˜์กด์„ฑ ์ถฉ๋Œ ์ฃผ์˜ํ•˜๊ธฐ

Starter๋Š” ์—ฌ๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„์ „ ์ถฉ๋Œ ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” exclude ์˜ต์…˜ ์„ ์‚ฌ์šฉํ•ด ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

 

์Šคํ”„๋ง ๋ถ€ํŠธ(Spring Boot) ์˜ ๊ฐ€์žฅ ํฐ ์žฅ์  ์ค‘ ํ•˜๋‚˜๋Š” ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ์†์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์ด๋•Œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ Spring Boot Starter ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Starter์˜ ์—ญํ• ๊ณผ ์ข…๋ฅ˜ ๋ฅผ ์†Œ๊ฐœํ•˜๊ณ , ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋Œ€ํ‘œ์ ์ธ Starter ๋“ค์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์˜์กด์„ฑ ์ตœ์†Œํ™”์™€ Starter ์„ ํƒ ์ „๋žต ์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ์— ๋งž๋Š” Starter๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

 


 

4. Starter๋ฅผ ํ™œ์šฉํ•œ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ ์˜ˆ์ œ

Starter๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ„๋‹จํ•œ REST API ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ์—์„œ๋Š” spring-boot-starter-web ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜์กด์„ฑ ์ถ”๊ฐ€ (pom.xml)

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

HelloController.java

package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring Boot Starter!";
    }
}

์„ค๋ช…

  1. @RestController : ์ด ํด๋ž˜์Šค๊ฐ€ REST API์˜ ์ปจํŠธ๋กค๋Ÿฌ์ž„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  2. @GetMapping("/hello") : /hello ๊ฒฝ๋กœ๋กœ GET ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  3. ์‘๋‹ต : ํด๋ผ์ด์–ธํŠธ๊ฐ€ /hello ๋กœ ์ ‘์†ํ•˜๋ฉด “Hello, Spring Boot Starter!” ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

์‹คํ–‰ ๊ฒฐ๊ณผ

  1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ณ , ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:8080/hello ๋กœ ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.
  2. “Hello, Spring Boot Starter!” ๋ผ๋Š” ์‘๋‹ต์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

 


 

5. ํŠธ๋ Œ๋“œ์™€ ํ†ต๊ณ„: Starter ํ™œ์šฉ์˜ ์ค‘์š”์„ฑ

  • Spring Boot Starter ๋Š” ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•˜๊ณ , ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ํฌ๊ฒŒ ๊ธฐ์—ฌํ•ฉ๋‹ˆ๋‹ค.
  • JetBrains์˜ 2024๋…„ ์„ค๋ฌธ ์กฐ์‚ฌ ์— ๋”ฐ๋ฅด๋ฉด, Java ๊ฐœ๋ฐœ์ž์˜ 65% ๊ฐ€ Spring Boot๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ๊ทธ์ค‘ ๋‹ค์ˆ˜๋Š” Starter๋ฅผ ํ™œ์šฉํ•ด ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŠนํžˆ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ธฐ์—…๋“ค์ด ๋Š˜์–ด๋‚˜๋ฉด์„œ, spring-boot-starter-web ๊ณผ ๊ฐ™์€ ๊ฒฝ๋Ÿ‰ํ™”๋œ ํŒจํ‚ค์ง€ ์‚ฌ์šฉ์ด ๋”์šฑ ์ค‘์š”ํ•ด์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 


 

๊ด€๋ จ ๋งํฌ

 

Spring ๊ณต์‹ ๋ฌธ์„œ๐Ÿ‘†

Spring Initializr๐Ÿ‘†

Maven Central Repository๐Ÿ‘†

์Šคํ”„๋ง ๋ถ€ํŠธ GitHub๐Ÿ‘†

Spring Boot Starter ๋ชฉ๋ก๐Ÿ‘†

Spring Boot์™€ JPA ํ†ตํ•ฉ ๊ฐ€์ด๋“œ๐Ÿ‘†

 


 

FAQ

 

1. Starter๋Š” ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋‚˜์š”?

  • Starter๋Š” ์—ฌ๋Ÿฌ ์˜์กด์„ฑ์„ ๋ฏธ๋ฆฌ ๋ฌถ์–ด๋†“์€ ํŒจํ‚ค์ง€๋กœ, ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

2. ์˜์กด์„ฑ ์ถฉ๋Œ์€ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜๋‚˜์š”?

  • pom.xml ์—์„œ exclusions ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด ๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ์ œ์™ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. spring-boot-starter-web๊ณผ Tomcat ์„œ๋ฒ„๋Š” ํ•„์ˆ˜์ธ๊ฐ€์š”?

  • ์•„๋‹ˆ์š”. Jetty๋‚˜ Netty ๊ฐ™์€ ๋‹ค๋ฅธ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด Tomcat์„ ์ œ์™ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Starter๊ฐ€ ์žˆ๋‚˜์š”?

  • spring-boot-starter-test ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด JUnit, Mockito ๋“ฑ ํ…Œ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

5. Starter๋ฅผ ์ž˜๋ชป ์„ ํƒํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋˜๋‚˜์š”?

  • ๋ถˆํ•„์š”ํ•œ Starter๋ฅผ ๋งŽ์ด ํฌํ•จํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๊ณ  ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

 


์ด์ œ Spring Boot Starter ๋ฅผ ํ™œ์šฉํ•ด ๋” ํšจ์œจ์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ด๋ณด์„ธ์š”! Starter๋ฅผ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” JPA๋ฅผ ํ™œ์šฉํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€