본문 바로가기

웹 개발/Spring Boot

Spring Boot) Gradle이란

Gradle 

오픈소스 빌드 자동화 툴
거의 모든 타입의 소프트웨어를 빌드할 수 있는 유연함이 강점인 툴로 Maven 보다 빌드 스크립트 작성이 간편하다. 

1. Gradle 특징


  • 오픈 소스 기반 빌드 자동화 툴
  • Groovy 기반 : 자바와 문법이 유사하여 자바 개발자가 쉽게 익힐 수 있다. 
  • Maven에 비해 빌드 시간이 짧고 빠른 성능을 보인다. 
  • convention을 기반으로 빌드하여 스크립트 규모가 작고 가독성이 높다. 
  • configuration injection을 사용해서 프로젝트 조건을 체크할 수 있어 프로젝트별 cofiguration을 다르게 설정할 수 있다. 
  • 멀티 프로젝트 빌드 지원을 위해 설계되었다. 
  • Andorid Studio, IntelliJ IDEA, Eclipse 등의 IDE에서 Gradle을 임포트해서 사용할 수 있다. 
유연성, 사용 편의성, 성능 면에서 우수한 빌드 자동화 툴 = Gradle 

 

2. Gradle-Spring Boot project 


├─ gradle
│       └─ wrapper
│       ├─ gradle-wrapper.jar
│       └─ gradle-wrapper.properties
├─ gradlew
├─ gradlew.bat
├─ build.gradle
└─ settings.gradle

 

  • gradlew
    리눅스, 맥 운영체제 용 실행 쉘 스트립트 파일
  • gradlew.bat
    윈도우 운영체제 용 실행 배치 스크립트 파일 
  • gradle-wrapper.jar  
    JAR 형식으로 압축된 wrapper 파일로, 프로젝트의 gradlew, gradlew.bat가 이 jar 파일을 사용하여 gradle task를 실행한다. 
  • gradle-wrapper.properties 
    gradle wrapper 설정 정보 파일로, wrapper 버전 등 세부 설정이 가능하다.
  • build.gradle 
    프로젝트 라이브러리 의존성, 플러그인, 라이브러리 저장소 등을 설정할 수 있는 빌드 스크립트 파일
  • settting.gradle
    프로젝트 구성 정보 파일, 
    멀티 프로젝트를 구성하여 프로젝트를 모듈화할 경우 하위 프로젝트의 구성을 설정할 수 있다. 

 

3. 라이브러리 의존성 관리 


 

  • repository : 의존성 모듈을 저장하는 곳
  • local / remote 인지는 repository 선언을 통해 알려줄 수 있다. 
  • 특정 task실행시키기 위해 필요한 의존성들을 런타임에 remote 또는 local repository에서 import (= dependency resolution) 
  • dependency cache (로컬 캐시)에 의존성 파일을 저장해 두고 사용한다. 

build.gradle

  • 라이브러리 의존성 설정을 위한 스크립트 파일 
  • 플러그인, 저장소, 의존성 등을 설정
  • Groovy(default) 또는 Kotlin 으로 작성 
  • spring boot project - build gradle example
plugins {
    id 'org.springframework.boot' version '2.3.2.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
}

group = 'com.example' // 프로젝트 생성시 사용자의 group 이름으로 자동 생성 
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11' //사용하는 JDK 버전

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.webjars:bootstrap:4.5.0'
    implementation 'org.webjars:jquery:3.5.1'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'mysql:mysql-connector-java'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

test {
    useJUnitPlatform()
}

 

repository 선언하기 

...
repositories{
	mavenCentral() or jcenter() or google()
}
...

 

  • repository 종류 
    • 포맷에 따른 구분 
      • Maven 기반 저장소
      • Ivy 기반 저장소
      • 로컬 디렉토리 형식 저장소 
    • 연결성에 따른 구분
      • 인증 체계가 구성된 저장소
      • 원격 프로토콜로 연결 가능한 저장소 

dependency 설정하기

... // ex)
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.webjars:bootstrap:4.5.0'
    implementation 'org.webjars:jquery:3.5.1'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'mysql:mysql-connector-java'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

 

  • 의존성이 사용될 범위를 설정하는 것 
  • implementation: 구현할 때만 사용
  • compileOnly: 컴파일 할 때만 사용
  • runtimeOnly: 런타임에만 사용
  • testImplementation: 테스트할 때만 사용 

References