Spring/기초부터

1. 순수 Spring 프로젝트 세팅 - build.gradle 직접 구성하기

leevigong 2026. 3. 3. 15:00
반응형

SpringBoot는 너무 많은 것을 자동으로 해준다. 처음부터 Spring Boot로 시작해서 "이게 왜 동작하지?"라는 의문을 크게 가지지 않고 사용하여 Spring 동작 원리에 대해 가볍게 넘어갔다. 불편함을 직접 경험해야 Spring Boot의 편의성이 체감되고, 원리도 제대로 이해할 수 있다고 생각해서 순수 Spring으로 SpringBoot 및 Spring의 전반적인 흐름을 이해해보려 한다.

 

순수 Java 프로젝트에서 시작하여 직접 Spring을 세팅하면서 SpringBoot가 무엇을 대신해 주는지 확인해 볼 것이다.

해당 실습은 IntelliJ를 사용하여 진행한다.


프로젝트 세팅

원래는 start.spring.io에서 프로젝트를 생성해서 IDE에 적용하지만, 순수 Java 프로젝트에서 아래와 같이 설정했다.
- JDK 17
- Build system: Gradle
- Gradle DSL: Groovy
- Gradle distribution: Wrapper
- 나머지 Name, Location, GroupId, ArtifactId는 본인 취향에 맞게 작성한다.

 

build.gradle 세팅

IntelliJ에서 start.spring.io가 아닌 순수 Java 프로젝트를 생성하면 build.gradle은 아래와 같이 되어 있다.

plugins {
    id 'java'
}

group = 'com.leevigong'
version = '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testImplementation platform('org.junit:junit-bom:5.10.0')
    testImplementation 'org.junit.jupiter:junit-jupiter'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

test {
    useJUnitPlatform()
}

기본적으로 JUnit(테스트 라이브러리)만 포함되어 있고, Spring 관련 의존성은 하나도 없다.

여기서 Spring을 쓰려면 필요한 라이브러리를 하나하나 직접 찾아서 버전까지 맞춰 추가해야 한다. -> 번거로움 1 !!!

 

기본적인 웹 개발을 하기 위해서 Spring MVC,  Tomcat, Jackson, Servlet 의존성을 아래와 같이 추가해 준다.

dependencies {
    // Spring MVC
    implementation 'org.springframework:spring-webmvc:6.2.11'

    // 내장 톰캣
    implementation 'org.apache.tomcat.embed:tomcat-embed-core:11.0.12'

    // jackson: JSON 변환
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.16.0'

    // Servlet API
    compileOnly 'jakarta.servlet:jakarta.servlet-api:6.0.0'
}

 

이외 관련 포스팅

[Gradle] Spring 시작 전에 build.gradle 구조와 의존성부터 알아보기

 

 

버전 관리의 중요성

이렇게 라이브러리의 버전을 직접 관리하다 보면 빈번하게 보안 취약점 발견 경고를 마주치게 된다.

순수 Spring은 이걸 직접 확인하고 직접 버전을 올려야 한다. -> 번거로움 2 !!!

 

Spring Boot는 검증된 버전 조합을 자동으로 관리해 준다. Gradle에서는 org.springframework.boot 플러그인과 platform('spring-boot-dependencies')를 통해 버전 충돌도, 보안 패치도 대부분 자동으로 처리된다.

 

Spring Boot의 starter

Spring Boot를 쓰면 위의 Spring에서 4개의 의존성 추가가 1줄로 바뀐다.

// 순수 Spring
implementation 'org.springframework:spring-webmvc:6.2.11'
implementation 'org.apache.tomcat.embed:tomcat-embed-core:10.1.16'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.16.0'
compileOnly 'jakarta.servlet:jakarta.servlet-api:6.0.0'

// Spring Boot
implementation 'org.springframework.boot:spring-boot-starter-web'

 

spring-boot-starter-web 하나가 Spring MVC + 내장 톰캣 + Jackson + Servlet API를 전부 포함하고 있다.

거기다 버전 충돌 관리까지 자동으로 해줘서 버전을 명시할 필요가 없다.

 

정리

Spring 사용 시 불편한 점

  • 의존성 버전 충돌 관리
  • 보안 취약점 패치

 

반응형