Spring Boot

Spring Boot Spring Initializr로 프로젝트 한방 생성: Gradle/Maven 선택부터 Java 17 설정까지

IT Lab 2026. 3. 5. 10:00

Spring Initializr로 Spring Boot 3.x 프로젝트를 빠르게 만들고, Gradle/Maven 선택 기준과 스타터 의존성 개념, Java 17 설정 포인트를 정리합니다.

도입 (문제 상황)

Spring Boot로 시작하려고 하는데 “프로젝트는 어떻게 만들지?”, “Gradle이랑 Maven 중 뭘 골라야 하지?”에서 첫날 시간을 다 쓰는 경우가 많습니다. 게다가 Spring Initializr 화면에서 의존성을 몇 개만 잘못 고르면, 실행은 되는데 나중에 설정 지옥이 시작되기도 해요.

핵심 개념 (Spring Initializr, 빌드 도구, 스타터가 중요한 이유)

Spring Initializr는 “Spring Boot가 잘 돌아가는 기본 골격”을 안전하게 만들어 주는 생성기입니다. 단순히 폴더만 만들어 주는 게 아니라, Boot 버전과 Java 버전 호환, 빌드 플러그인 구성, 스타터 의존성 조합까지 한 번에 정리해 줍니다. 즉, 첫 단추를 덜 삐뚤게 끼우게 해주는 도구예요.

Gradle vs Maven, 무엇을 선택해야 할까요?

둘 다 정답입니다. 다만 실무에서 체감 차이가 나는 지점이 있어서, 팀 상황에 맞춰 고르는 게 좋아요.

항목 Gradle Maven
설정 파일 build.gradle(Groovy) / build.gradle.kts(Kotlin) pom.xml
장점 빌드 성능/유연성 좋음, 멀티모듈 구성 편함 표준화/가시성 좋음, 레거시/기업 환경에서 흔함
단점 DSL 학습 필요(특히 Kotlin DSL) 복잡한 커스터마이징은 다소 장황
추천 상황 신규 프로젝트, 멀티모듈, CI 최적화 기존 Maven 기반 조직, 규정/템플릿 고정

Gradle과 Maven 선택 흐름을 보여주는 간단한 다이어그램

개인적으로 새 프로젝트라면 Gradle(특히 Kotlin DSL)을 많이 선택하지만, 조직 표준이 Maven이면 Maven으로 가는 게 장기적으로 비용이 적습니다. “내가 편한 것”보다 “팀이 유지보수하기 쉬운 것”이 더 중요해요.

스타터(Starter) 의존성은 “부품 세트”입니다

Spring Boot의 핵심 생산성은 spring-boot-starter-*에서 나옵니다. 스타터는 비유하면 “라면 스프” 같은 역할이에요. 개별 재료(라이브러리)를 하나씩 고르는 대신, 서로 호환되는 조합을 묶어서 제공하니 충돌이 줄고 설정이 단순해집니다.

예를 들어:

  • spring-boot-starter-web: Spring MVC + 내장 톰캣 + JSON 처리(Jackson) 등 웹 API에 필요한 기본 세트
  • spring-boot-starter-test: JUnit, Mockito, Spring Test 등 테스트 기본 세트

스타터를 잘 고르면 “왜 이 라이브러리 버전이 안 맞지?” 같은 문제를 초반에 크게 줄일 수 있습니다.

Java 17 설정은 “선택”이 아니라 “전제”입니다

Spring Boot 3.x는 Java 17 이상이 전제입니다. 따라서 Initializr에서 Java 17을 고르고, 로컬/CI에서도 동일하게 맞춰야 합니다.
특히 실무에서 흔한 함정은 “로컬은 21인데 CI는 17” 같은 버전 불일치예요. 컴파일 옵션과 실행 환경이 어긋나면, 빌드/런타임 오류가 뒤늦게 터집니다.

flowchart LR
  A["Spring Initializr"] --> B["Project Metadata"]
  B --> C["Build Tool: Gradle or Maven"]
  B --> D["Java Version: 17+"]
  B --> E["Dependencies: Starters"]
  C --> F["Generated build file"]
  D --> F
  E --> F
  F --> G["Run Application"]

Initializr는 빌드 도구/Java 버전/스타터 선택을 조합해 “바로 실행 가능한 프로젝트”를 생성합니다.

코드 예제 (Spring Initializr로 생성한 프로젝트 그대로 실행하기)

아래 예제는 Spring Initializr에서 다음처럼 선택했다고 가정합니다.

  • Project: Gradle - Groovy (원하시면 Kotlin DSL로 바꿔도 됩니다)
  • Language: Java
  • Spring Boot: 3.x
  • Java: 17
  • Dependencies: Spring Web, Spring Boot Actuator

build.gradle

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.3.2'
    id 'io.spring.dependency-management' version '1.1.6'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-actuator'

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
    useJUnitPlatform()
}

src/main/java/com/example/demo/DemoApplication.java

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

src/main/java/com/example/demo/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";
    }
}

src/main/resources/application.yml

server:
  port: 8080

management:
  endpoints:
    web:
      exposure:
        include: "health,info"

실행 방법

./gradlew bootRun
  • http://localhost:8080/hellohello
  • http://localhost:8080/actuator/health → 상태 확인

Maven을 선택하셨다면 mvn spring-boot:run으로 동일하게 실행할 수 있습니다.

실무 팁

💡 실무에서는
Java 버전은 “프로젝트 설정”이 아니라 “팀 약속”으로 고정해 두는 게 안전합니다.

  • Gradle이라면 위 예제처럼 toolchain { languageVersion = 17 }를 넣어두면, 로컬 JDK가 달라도 빌드 JDK를 일관되게 맞추기 쉬워요(단, CI에도 툴체인/JDK 설치는 필요합니다).
  • 운영 서버/컨테이너의 JRE 버전도 반드시 동일 계열(17)로 맞춰 주세요.

💡 실무에서는
스타터는 최소로 시작하고, 필요할 때 추가하는 방식이 유지보수에 유리합니다.
처음부터 이것저것 넣으면 “왜 자동 설정이 켜졌지?”를 추적하기 어려워집니다. 예를 들어 DB를 아직 안 쓰는데 spring-boot-starter-data-jpa를 넣어두면, 데이터소스 설정이 없어서 부팅이 실패하는 식의 불필요한 마찰이 생겨요.


핵심 요약

  • Spring Initializr는 Boot 3.x + Java 17 환경에서 “바로 실행 가능한” 프로젝트 골격을 안전하게 만들어 줍니다.
  • Gradle/Maven은 팀 표준과 운영/유지보수 관점에서 선택하는 게 가장 합리적입니다.
  • 스타터 의존성은 호환되는 라이브러리 묶음이라, 초반 설정 비용과 충돌을 크게 줄여줍니다.

다음 글: [#03 프로젝트 구조와 실행 흐름(메인 클래스부터)]