티스토리 뷰

728x90
반응형

이번 포스팅에서는 Spring Boot 디펜던시 관리 매니저 gradle에 대해 알아보겠습니다.

대표적인 디펜던시 체커 및 빌드 툴로는 Maven과 Gradle이 있습니다. 둘은 엄연히 다른 구성이지만 한편으로는 동일한 역할을 수행하는 라이브러리 관리 툴이라 볼 수 있습니다.

특히 gradle은 버전관리를 자동으로 해주는 것까지 담당하여 보다 편리한 프로젝트 관리가 가능합니다.

(# 물론 최근 Maven에서도 버전 관리는 자동으로 해주고 있습니다. 예전 버전에서는 직접 버전 명시까지 수행했어야 했죠.)

Spring Boot에서 gradle 빌드를 사용하기 위해서는 아래와 같이 프로젝트를 생성할 시점에 결정할 수 있습니다.

Spring Boot gradle 프로젝트 생성하기

1. Gradle 프로젝트 생성

초기 생성 방법은 Spring Boot Maven 프로젝트와 동일합니다.

상단 메뉴바 File → New → Spring Starter Project를 선택합니다.

위와 같은 화면에서 중간쯤에 Type에서 Gradle을 선택합니다. 포스팅에서는 Gradle (Buildship 3.x)를 선택하였습니다.

이후는 Spring Boot Maven과 동일합니다. Next → Finash를 선택합니다.

프로젝트 생성이 성공하면 다음과 같은 패키지 구조를 확인할 수 있습니다.

2. build.gradle 작성

Maven 환경의 pom.xml과 같이 gradle 환경에서는 build.gradle 환경파일을 수정하여 관리합니다.

build.gradle 환경을 다음과 같이 수정하겠습니다.

buildscript {
	ext {
		springBootVersion = '2.1.6.RELEASE'
	}
	repositories {
		mavenCentral()
	}
	dependencies {
		classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
	}
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
	mavenCentral()
}

dependencies {
	compile('org.springframework.boot:spring-boot-starter-web')
	compile('org.springframework.boot:spring-boot-starter-thymeleaf')
	compile('org.springframework.boot:spring-boot-starter-data-jpa')
	runtime('com.h2database:h2')
	runtime('org.springframework.boot:spring-boot-devtools')
	compileOnly('org.projectlombok:lombok')
	testCompile('org.springframework.boot:spring-boot-starter-test')
}

위 build.gradle 설정은 다음과 같습니다.

a. buildscript

buildscript에는 SpringBoot Version 정보, Maven Repository 정보, Dependency 모듈을 지정하여 스프링 부트 플러그인을 사용할 수 있는 기본 바탕을 정의합니다.

b. apply

플러그인을 적용합니다.

- apply plugin: 'java' → java용 웹 프로젝트를 생성합니다. sourceCompatibility = '1.8' 호환 버전을 지정하여 java 웹 프로젝트에서 사용할 java를 명시합니다.

- apply plugin: 'io.spring.dependency-management' → Spring IO Platform의 Gradle Plugin인 dependency-management를 사용합니다. 스프링 부트 1.x에서는 디폴트로 사용되었지만 2.x에서는 명시적으로 선언해 주어야 합니다.

c. dependencies

프로젝트에서 사용할 디펜던시 모듈을 정의합니다.

- compile → 먼저 compile 시점에 필요한 디펜던시 라이브러리들을 compile로 정의합니다.

- runtime → 런타임 시에 참조할 라이브러리를 정의합니다. 기본적으로 compile 라이브러리를 포함합니다.

- compileOnly → 컴파일 시점에만 사용하고 런타임에는 필요없는 라이브러리를 정의합니다.

- testCompile → 프로젝트의 테스트를 위한 디펜던시 라이브러리를 정의합니다. 기본적으로 Compile된 클래스와 compile 라이브러리를 포함합니다.

수정이 완료되면 다음과 같이 gradle → Refresh Gradle Project를 선택하여 라이브러리를 업데이트 합니다.

느낌적인 느낌으로 Maven보다 훨~씬 빠른 느낌이네요.

3. Gradle의 장점

이렇게 Gradle로 구성하게되면 Maven 빌드를 사용하는 것보다 눈에띄는 장점이 있습니다.

- 먼저 스크립트 길이와 가독성 면에서 Gradle이 매우 뛰어나다는 점입니다. Maven을 사용해 보신분들은 알겠지만, 스크립트를 XML로 정의하여 길이가 길고 이로인한 가독성이 떨어진다는 점입니다.
- 빌드 및 테스트 시 성능이 앞도적으로 뛰어나다. 특히 Gradle이 캐시를 사용하기 때문에 테스트 반복 시 차이가 점점 더 커집니다. 프로젝트의 개발이 진행되면서 의존성이 점점 늘어날 수록 성능과 스크립트 품질의 차이가 심해질 것입니다.

디펜던시 관리 매니저로써 Gradle을 선택하지 않는 것은 Maven에 익숙한 현재에서 벗어나고 싶지 않은 것 이외에는 딱히 다른 이유는 없을 것입니다.

물론 저도 여전히 Maven을 더 자주 많이 사용하고 있기는 하지만 프로젝트의 규모에 따라 Gradle의 필요성을 의식하고 있으며, 차차 전환해 나가야 할 필요성을 느끼고 있습니다.

이번 시간에는 Gradle 기본에 대해 살펴보았으며, 이후 Spring Boot Project에서는 Gradle 기반으로 디펜던시를 관리할 예정입니다.

728x90
반응형