[CS] Gradle

박원준·2026년 2월 9일

📦 Gradle 정리

1. Gradle이란?

Gradle은 빌드 자동화 도구로, 주로 Java, Kotlin, Scala 등 JVM 기반 언어에서 사용된다.
우리가 작성한 소스 코드를 설정에 맞게 자동으로 빌드해 주는 역할을 한다.

여기서 빌드(Build)란,

우리가 작성한 소스 코드를 컴파일하고, 테스트를 수행한 뒤
실행 가능한 결과물(JAR, WAR 등)로 만드는 일련의 과정

Gradle을 사용하면 자바 프로젝트를 간단하게 실행 가능한 JAR 파일로 만들 수 있다.


2. 빌드 자동화 도구를 왜 사용할까?

빌드 자동화 도구를 사용하는 이유는 다음과 같다.

  • 컴파일, 테스트, 패키징, 배포와 같은 반복 작업을 자동화
  • 일관된 빌드 환경 제공
  • 증분 빌드, 캐시, 병렬 처리로 빌드 속도 최적화
  • 테스트 누락 등 휴먼 에러 방지
  • 외부 라이브러리 자동 관리로 의존성 충돌 감소
  • CI/CD와 연동하여 빌드부터 배포까지 자동화 가능

3. Gradle의 특징

Gradle은 기존 Ant, Maven의 단점을 보완하여 설계되었다.

  • 증분 빌드: 변경된 부분만 빌드
  • 빌드 캐시: 이전 결과 재사용
  • Gradle Daemon: JVM 초기화 비용 감소
  • 멀티 프로젝트 빌드 지원
  • 높은 확장성 (플러그인, 커스텀 태스크)
  • Groovy / Kotlin DSL 지원

4. build.gradle 이란?

build.gradleGradle 기반의 빌드 스크립트 파일이다.

이 파일을 통해 다음을 설정한다.

  • 프로젝트 빌드 방식
  • 플러그인 설정
  • 의존성(라이브러리) 관리
  • 커스텀 태스크 정의

Gradle 스크립트는 Groovy 또는 Kotlin DSL로 작성할 수 있다.


5. 의존성(Dependency) 관리

라이브러리란,
특정 기능을 수행하는 코드들의 묶음이라고 생각하면 된다.

build.gradledependencies 블록에 필요한 라이브러리를 작성하면
Gradle이 Maven Repository와 같은 외부 저장소에서
해당 라이브러리를 자동으로 다운로드한다.

Gradle은 라이브러리 간의 의존성 관계도 자동 관리해 주기 때문에
버전 충돌 걱정 없이 개발에 집중할 수 있다.


6. Maven과 Gradle의 차이

Maven과 Gradle의 가장 큰 차이점은 빌드 스크립트 방식과 빌드 속도이다.

구분MavenGradle
빌드 스크립트XML (pom.xml)Groovy / Kotlin DSL
빌드 속도느림빠름 (증분 빌드, 캐시)
의존성 관리기본적인 관리동적 관리, 의존성 캐싱 최적화
확장성한정적인 플러그인 가능다양한 플러그인, 커스텀 태스크
Android 지원공식 지원 XAndroid 공식 빌드 도구
멀티 프로젝트 빌드상속 기반, 설정 복잡설정 주입 방식, 멀티 프로젝트 관리 최적화

7. Dependency Configuration 이란?

Dependency Configuration은 의존성의 사용 범위(scope)를 정의하는 설정이다.

  • 빌드 성능 개선
  • 불필요한 의존성 제거
  • 결과물 크기 최적화

를 위해 사용된다.


8. 주요 Dependency Configuration 종류

🔹 implementation

  • 컴파일 + 런타임 모두 필요
  • 일반적인 라이브러리 추가 시 사용

🔹 api

  • 다른 모듈에서도 접근 가능한 의존성
  • 멀티 모듈 프로젝트에서 사용

🔹 compileOnly

  • 컴파일 시점에만 필요
  • 런타임에는 포함되지 않음
  • 예: Lombok

🔹 annotationProcessor

  • 컴파일 시점에 실행되는 어노테이션 프로세서
  • 예: Lombok, MapStruct

🔹 runtimeOnly

  • 런타임 시점에만 필요한 의존성
  • 예: DB 드라이버

🔹 test 관련 설정

  • testImplementation
  • testCompileOnly
  • testRuntimeOnly

👉 테스트 코드에서만 사용되는 의존성


9. Spring Boot 기준 build.gradle 예제

아래는 Spring Boot 프로젝트에서 가장 기본적으로 사용하는 build.gradle 예제이다.

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

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

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

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
    mavenCentral()
}

dependencies {
    // Spring Boot 기본 웹 스타터
    implementation 'org.springframework.boot:spring-boot-starter-web'

    // JPA (Hibernate 포함)
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

    // Lombok
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'

    // 테스트
    testImplementation 'org.springframework.boot:spring-boot-starter-test'

    // DB 드라이버 (런타임 시점에만 필요)
    runtimeOnly 'com.mysql:mysql-connector-j'
}

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

10. 마무리

Gradle은 단순한 빌드 도구를 넘어,
의존성 관리, 멀티 프로젝트 관리, CI/CD 연동까지 책임지는 핵심 도구이다.

Spring 프로젝트를 이해하기 위해서도
build.gradle과 Gradle의 동작 방식은 반드시 짚고 넘어가야 한다고 느꼈다.

0개의 댓글