대부분의 Spring을 처음 시작할 때 start.spring.io에서 프로젝트를 생성하고, build.gradle에 의존성을 추가한 뒤, 바로 Controller를 작성하기 시작한다. 그런데 "왜 build.gradle에 이걸 쓰는지"를 설명해 주는 곳은 많지 않다. 그 부분에 대해 의문점을 가지고 알아보기 위해 이 글을 작성했다.
Gradle이란?
Gradle은 빌드 도구(Build Tool)로, 빌드 도구가 하는 일은 크게 3가지다.
- 필요한 라이브러리를 인터넷에서 다운로드
- 소스 코드를 컴파일
- 실행 가능한 파일(jar)로 패키징
즉, 개발에 필요한 모든 준비를 자동으로 해주는 도우미이다.
그럼 왜 Gradle이냐? Gradle 이전에는 Maven이라는 빌드 도구를 많이 썼는데, Maven은 pom.xml이라는 파일에 아래와 같이 XML로 설정을 작성했다.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>3.0.0</version> <scope>compile</scope> </dependency>
Gradle은 위의 Maven 코드를 한 줄로 줄였다.implementation 'org.springframework.boot:spring-boot-starter-web'
훨씬 짧고 읽기 편하다. 그리고 빌드 속도도 Maven보다 빠르고 설정도 유연해서 Gradle을 더 많이 쓴다.
build.gradle 구조
plugins {
id 'java' // 이 프로젝트가 Java를 사용한다고 선언
}
group = 'com.leevigong'
version = '1.0'
java {
sourceCompatibility = JavaVersion.VERSION_17 // Java 17 버전으로 컴파일
targetCompatibility = JavaVersion.VERSION_17
}
repositories {
mavenCentral() // 라이브러리를 어디서 받아올지
}
dependencies {
// 사용할 라이브러리 목록
}
- plugins: 빌드 방식 선언
- repositories: 라이브러리 저장소
- dependencies: 사용할 라이브러리 목록
repositories 블록
repositories는 라이브러리를 어디서 받아올지 지정하는 블록이다.
repositories { mavenCentral() }은 "라이브러리를 Maven 중앙 저장소에서 가져오겠다"는 선언이다.
Maven 중앙 저장소(repo1.maven.org)는 전 세계 개발자들이 만든 오픈소스 라이브러리가 모여있는 거대한 창고이다.
build.gradle에 라이브러리 이름 작성
↓
Gradle이 mavenCentral에서 찾아서 다운로드
↓
프로젝트에 자동으로 추가됨
원래 직접 라이브러리 파일을 찾아서 프로젝트에 넣었다고 하는데,, 엄청난 편리함!!
dependencies 블록
dependencies은 실제로 사용할 라이브러리를 선언하는 블록이다. 여기에 라이브러리를 추가하는 것을 의존성 추가 라고 하며, Gradle이 repositories에서 찾아서 자동으로 다운로드해준다.
dependencies 블록 안에는 키워드에 따라 라이브러리가 언제 필요한지를 구분한다.
- implementation: 컴파일 + 실행 모두 필요
- compileOnly: 컴파일할 때만 필요
- runtimeOnly: 실행할 때만 필요
- testImplementation: 테스트 컴파일 + 실행
// Spring MVC — 실행 중에도 계속 필요
implementation 'org.springframework:spring-webmvc:6.2.11'
// Servlet API — 코드 작성할 때 타입 인식용, 실행 시엔 톰캣이 제공
compileOnly 'jakarta.servlet:jakarta.servlet-api:6.0.0'
// MySQL 드라이버 — 실행할 때만 DB 연결에 필요
runtimeOnly 'com.mysql:mysql-connector-j'
// JUnit — 테스트할 때만 필요
testImplementation 'org.junit.jupiter:junit-jupiter'
이렇게 구분하는 이유는 불필요한 라이브러리가 최종 빌드에 포함되지 않도록 하기 위해서다. 빌드 파일이 가벼워지고, 의존성 충돌 가능성도 줄어든다.
Gradle Wrapper (gradlew)
프로젝트를 생성하면 아래와 같은 파일들이 같이 생긴다.

해당 파일들은 Gradle을 직접 설치하지 않아도, 프로젝트에 명시된 Gradle 버전으로 자동 실행해 준다.
gradle-wrapper.properties 안에 버전이 명시되어 있음
↓
./gradlew 실행 시 해당 버전 자동 다운로드 & 실행
↓
팀원 모두 같은 버전으로 빌드 가능
프로젝트를 진행하다 보면 gradle 대신./gradlew를 쓰는 경험을 해봤을 것이다.
./gradlew를 사용하는 이유는 내 로컬에 설치된 Gradle 버전과 무관하게 프로젝트 버전으로 맞춰서 실행되기 때문이다.
자주 쓰는 명령어
./gradlew build # 프로젝트 빌드
./gradlew bootRun # 앱 실행 (Spring Boot)
./gradlew clean # 빌드 결과물 삭제
./gradlew test # 테스트 실행
정리
Gradle은 단순한 빌드 도구가 아니라 프로젝트가 어떤 라이브러리를, 어디서, 언제 가져올지를 정의하는 핵심 설정 파일이다. Spring Boot가 편리한 이유도 결국 Gradle 위에서 의존성을 잘 관리해 주기 때문이다.
'Spring > 기초부터' 카테고리의 다른 글
| 1. 순수 Spring 프로젝트 세팅 - build.gradle 직접 구성하기 (0) | 2026.03.03 |
|---|