티스토리 뷰
이번 포스팅에서는 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 기반으로 디펜던시를 관리할 예정입니다.
'⑤ 개발, 데이터베이스 > ⓢ Spring Boot' 카테고리의 다른 글
[Spring Boot] Spring Boot Maven Repo 연동(Nexus2 OSS 내부 저장소) (0) | 2019.07.28 |
---|---|
[Spring Boot] Spring Boot Maven Repo 구축(Nexus2 OSS 내부 저장소) (0) | 2019.07.28 |
[Spring Boot] gitlab & Eclipse 연동을 통한 Spring Boot 개발 프로젝트 구축 (1) | 2019.07.28 |
[Spring Boot] git clone을 활용한 Spring Boot 프로젝트 repository 이관 (0) | 2019.07.27 |
[Spring Boot] JUnit (embedded Servlet Container & Mockup Test) (0) | 2019.07.14 |
- Total
- Today
- Yesterday
- 아키텍처
- aws
- API Gateway
- 마이크로서비스 아키텍처
- MSA
- git
- Docker
- TA
- SWA
- openstack tenant
- JEUS6
- node.js
- 마이크로서비스
- k8s
- kubernetes
- nodejs
- openstack token issue
- wildfly
- JBoss
- Da
- Architecture
- apache
- 쿠버네티스
- JEUS7
- aa
- jeus
- OpenStack
- SA
- 오픈스택
- webtob
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |