SpringBoot

[SpringBoot] Gradle 이란? (Build Tool)

데브킹덕 2024. 6. 26. 16:51

 

빌드

  • 의존성 라이브러리 다운
  • 컴파일 (소스코드 -> 바이너리코드로 변경)
  • 바이너리코드 패키징
  • 테스트 실행
  • 운영시스템 배포

 

 

빌드 도구(Build Tool)

  • 소스 코드를 실행가능한 Application으로 자동으로 생성하는 프로그램
  • 즉 소스 코드를 컴파일하고 연결하고 패키징하여 실행가능한 상태로 가공

 

Java에서 주로 사용하는 빌드도구는 Gradle, Maven, Ant등이 있다

 

 

Gradle이란?

- 유연함과 성능에 초점을 둔 오픈소스 빌드도구

- Wrapper 지원(빌드 도구를 실행할 수 있는 jar 파일과 이를 실행하는 스크립트를 함께 등록하여 관리하는 방식)

- Maven의 POM개념을 활용

* POM (xml형식의 프로젝트 객체 모델)

- build.gradle 파일에서 Maven 중앙 저장소를 설정하고, Maven 방식으로 의존성을 선언할 수 있다.

 

 *Maven

-Project Object Model의 개념을 기반으로 하여 프로젝트 빌드, 보고서 생성 및 문서화 

 

maven은 xml로 설정하는 반면 gradle은 Groovy(JVM 안에서 작동되는 스크립트 언어)로 구성되어 있어 변수선언, if, else, for 등의 로직이 구현가능하며 간결하게 구성 가능하다.

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework:spring-core:5.3.9'
}

 

 

빌드 단계

Gradle은 빌드 라이프사이클의 세 가지 단계에서 빌드 스크립트를 평가하고 실행한다:

  • 초기화
    빌드 환경을 설정하고 빌드에 참여할 프로젝트를 결정한다.
  • 구성
    빌드에 대한 태스크 그래프를 구성하고 설정한다. 사용자가 실행하려는 태스크에 따라 어떤 태스크를 어떤 순서로 실행해야 하는지 결정한다.
  • 실행
    선택된 태스크들을 구성 단계의 마지막에 실행한다.

 

 

Gradle DSL(Domain Sepcific Language)

- 빌드 스크립트를 정의하는데 사용되는 언어

- 빌드 , 테스트, 배포 등을 관리하도록 도와줌

- Groovy DSL은 Gradle의 기본 DSL로 많이 사용되며,

Kotlin DSL은 타입 안정성과 IDE 지원이 강화되어 있어 점점 더 많이 사용되고 있다

 

 

  • 빌드 구성
// Groovy DSL 예제
plugins {
    id 'java'
}

group = 'com.example'
version = '1.0.0'

// Kotlin DSL 예제
plugins {
    id("java")
}

group = "com.example"
version = "1.0.0"

 

의존성 관리

// Groovy DSL 예제
repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework:spring-core:5.3.9'
}


// Kotlin DSL 예제
repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework:spring-core:5.3.9")
}

 

 

 

플러그인 적용

  • Gradle 플러그인을 적용하여 빌드 스크립트를 확장하고, 추가 기능을 사용할 수 있다. 예를 들어, Java 플러그인, Kotlin 플러그인, Spring Boot 플러그인 등을 적용할 수 있다.
// Groovy DSL 예제
plugins {
    id 'java'
    id 'org.springframework.boot' version '2.5.4'
}

// Kotlin DSL 예제
plugins {
    id("java")
    id("org.springframework.boot") version "2.5.4"
}

 

 

커스텀 로직 추가:

  • 빌드 스크립트에 커스텀 로직을 추가하여, 프로젝트의 특수한 요구사항을 충족시킬 수 있다.
  • 예를 들어, 특정 파일을 복사하거나, 환경 변수에 따라 다른 작업을 수행할 수 있다.
// Groovy DSL 예제
task copyFiles(type: Copy) {
    from 'src/main/resources'
    into 'build/resources/main'
}


// Kotlin DSL 예제
tasks.register<Copy>("copyFiles") {
    from("src/main/resources")
    into("build/resources/main")
}

 

 

 

build.gradle

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.1.0'  // Spring Boot의 최신 버전으로 설정
    id 'io.spring.dependency-management' version '1.1.0'  // Dependency management 플러그인 추가
}

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

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation platform('org.junit:junit-bom:5.10.0')
    testImplementation 'org.junit.jupiter:junit-jupiter'
}

test {
    useJUnitPlatform()
}

 

repositories

- 각종 의존성(라이브러리)들을 어떤 원격 저장소에서 받을지를 정함

- mavenCentral를 많이 사용하지만 업로드하기 위해 많은 과정과 설정이 필요

- 최근에 라이브러리 업로드를 간단하게 하는 jcenter 많이 사용

- jcenter는 mavenCentral에도 업로드 될 수 있도록 자동화 할 수 있음

 

dependencies

- 프로젝트 개발에 필요한 의존성들을 선언하는 곳

'SpringBoot' 카테고리의 다른 글

Model1 -> Model2 -> SpringMVC  (0) 2024.11.22
WAS란?  (0) 2024.09.03
SQL Mapper - Mybatis  (4) 2024.09.02
[Spring Boot] JPA를 왜 써야할까??  (0) 2024.06.27