
./gradlew buildgradlew.bat buildgradle wrapper --gradle-version <원하는_gradle_버전>gradle wrapper --gradle-version 7.6.1: 프로젝트 이름을 설정, 멀티 프로젝트 구성 시 프로젝트를 포함할 수 있다.
rootProject.name = 'spring-boot-gradle-example'
: Gradle 빌드 스크립트로, 플러그인 / 의존성 / 테스크 등을 지정 가능
plugins {
id 'java'
id 'org.springframework.boot' version '3.0.5'
id 'io.spring.dependency-management' version '1.0.13.RELEASE'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
id 'java': 자바 프로젝트에 필수적인 태스크(compileJava, test, jar 등)를 제공한다.build.gradle 내 plugins { id 'java' }id 'org.springframework.boot': Spring Boot 애플리케이션을 실행하고 패키징하는 데 필요한 태스크(bootRun, bootJar 등)를 제공한다.id 'io.spring.dependency-management': Spring Boot에서 사용하는 BOM(Bill of Materials) 기반의 의존성 버전을 일관되게 관리한다.<dependencyManagement>와 유사한 기능을 사용할 수 있게 해준다.: Gradle은 여러 스코프로 의존성을 관리함
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok:1.18.26'
annotationProcessor 'org.projectlombok:lombok:1.18.26'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
}
ex) Lombok은 런타임 시에 필요하지 않으므로 compileOnly와 annotationProcessor를 통해 컴파일 시에만 적용하도록 설정한다.
=> 특정 annotation을 보고 해당 기능을 만들어줌 (예시 @Getter @Setter)
: Gradle 빌드는 여러 태스크로 구성됨. 각 태스크는 특정 작업을 수행한다.
implementation, testImplementation 등이 제공되지만, 필요하다면 사용자 정의 Configuration을 만들 수도 있다.configurations {
customConfig
}
dependencies {
customConfig 'org.example:some-library:1.0'
}
customConfig라는 Configuration을 정의해 특정 라이브러리를 별도로 관리할 수 있다.root
┣ settings.gradle
┣ build.gradle
┣ moduleA
┃ ┗ build.gradle
┗ moduleB
┗ build.gradle
settings.gradle:
rootProject.name = 'multi-module-project'
include 'moduleA', 'moduleB'
루트 build.gradle:
plugins {
id 'java'
}
subprojects {
apply plugin: 'java'
repositories {
mavenCentral()
}
}
if (project.hasProperty('devProfile')) {
dependencies {
implementation 'com.h2database:h2'
}
} else {
dependencies {
runtimeOnly 'com.mysql:mysql-connector-j'
}
}
./gradlew build -PdevProfile로 실행하면 H2 의존성을 사용한다.-build-cache, -scan 옵션을 자주 활용하며, Gradle Enterprise를 도입하면 빌드 스캔과 캐시 공유가 가능하다.: 지속적인 통합 / 지속적인 배포
Gradle을 활용하면 CI/CD(Continuous Integration / Continuous Deployment) 파이프라인에서 다음과 같은 작업을 자동화할 수 있다.

name: CI/CD with Gradle
on:
push:
branches:
- main # main 브랜치에 푸시될 때 실행
pull_request:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up JDK
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
- name: Grant execute permission for Gradle
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build # ✅ Gradle 빌드 실행
- name: Run tests
run: ./gradlew test # ✅ Gradle 테스트 실행
- name: Publish artifact
uses: actions/upload-artifact@v3
with:
name: application
path: build/libs/*.jar # ✅ 빌드된 JAR 파일 저장
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- name: Deploy to server
run: echo "Deploying application..." # 실제 배포 스크립트 실행 가능
📌 CI/CD 흐름
pipeline {
agent any
stages {
stage('Checkout') {
steps {
git 'https://github.com/example/repository.git'
}
}
stage('Build') {
steps {
sh './gradlew clean build'
}
}
stage('Test') {
steps {
sh './gradlew test'
}
}
stage('Deploy') {
steps {
sh './deploy.sh' // ✅ 배포 스크립트 실행
}
}
}
}
📌 Jenkins CI/CD 흐름
plugins {
id 'com.palantir.docker' version '0.30.0'
}
docker {
name 'my-app:latest'
files 'build/libs/app.jar'
buildArgs(['JAR_FILE': 'app.jar'])
}
gradle docker # ✅ Docker 이미지 빌드 실행
깃에 올릴 때, .gradle 파일이나 이미 빌드된 파일인 .build만 ignore 해주면 되고,
├── gradlew
├── gradlew.bat
└── gradle
└── wrapper
└── gradle-wrapper.properties
해당 파일들은 다 올라가야 남들이 열어볼 수 있고, CI/CD도 가능!