이번 글은 이동욱님의 <스프링 부트와 AWS로 혼자 구현하는 웹 서비스>의 그레이들 프로젝트를 스프링 부트 프로젝트로 변경하기를 따라해보며 내용을 공유하고자 합니다.
평소 스프링 이니셜라이저를 통해 프로젝트를 생성해와서 build.gradle의 코드가 무슨 역할을 하는지를 잘 모르기 때문에
먼저, intellij에서 그레이들 기반의 자바 프로젝트를 생성합니다. 인텔리제이에서 build.gradle
파일을 열어보면 다음과 같은 간단한 코드들만 있습니다.
plugins {
id 'java'
}
group 'com.conatuseus.book'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
이 코드들은 자바 개발에 가장 기초적인 설정만 되어있는 상태입니다. 이제 스프링 부트에 필요한 설정들을 하나씩 추가해봅시다.
먼저 build.gradle 맨 위에 위치할 코드입니다.
buildscript {
ext {
springBootVersion = '2.1.7.RELEASE'
}
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
위 코드는 이 프로젝트의 플러그인 의존성 관리를 위한 설정입니다.
ext
라는 키워드는 build.gradle에서 사용하는 전역변수를 설정하겠다는 의미인데, 여기서는 springBootVersion 전역변수를 생성하고 그 값을 '2.1.7.RELEASE'로 하겠다는 의미입니다. 즉, spring-boot-gradle-plugin라는 스프링 부트 그레이들 플러그인의 2.1.7.RELEASE를 의존성으로 받겠다는 의미입니다.
다음은 앞서 선언한 플러그인 의존성들을 적용할 것인지를 결정하는 코드입니다.
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
io.spring.dependency-management
플러그인은 스프링 부트의 의존성들을 관리해 주는 플러그인이라 꼭 추가해야 합니다.
위 4개의 플러그인은 자바와 스프링 부트를 사용하기 위해서 필수 플러그인이니 항상 추가하면 됩니다. 나머지 코드는 다음과 같습니다.
repositories {
mavenCentral()
jcenter()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
repositories
는 각종 의존성(라이브러리)들을 어떤 원격 저장소에서 받을지를 정합니다. 기본적으로 mavenCentral을 많이 사용하지만, 최근에는 라이브러리 업로드 난이도 때문에 jcenter도 많이 사용합니다.
mavenCentral은 이전부터 많이 사용하는 저장소지만, 본인이 만든 라이브러리를 업로드하기 위해 많은 과정과 설정이 필요하다보니 개발자들이 직접 만든 라이브러리를 업로드하는 것이 힘들어 점점 공유가 안되는 상황이 발생했습니다.
이런 문제점을 개선하여 최근에 나온 것이 jcenter입니다. 그리고 jcenter에 라이브러리를 업로드하면 mavenCentral에도 업로드될 수 있도록 자동화를 할 수 있습니다. 여기서는 mavenCentral, jcenter 둘 다 등록해서 사용하겠습니다.
dependencies
는 프로젝트 개발에 필요한 의존성들을 선언하는 곳입니다. 여기서는 org.springframework.boot:spring-boot-starter-web과 org.springframework.boot:spring-boot-starter-test를 받도록 선언되어 있습니다.
의존성 코드는 직접 작성해도 되고, 자동완성으로 만들어도 됩니다. 단, 특정 버전을 명시하면 안됩니다. 버전을 명시하지 않아야만 맨 위에 작성한 'org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}'의 버전을 따라가게 됩니다.
이렇게 관리할 경우 각 라이브러리들의 버전 관리가 한 곳에 집중되고, 버전 충돌 문제도 해결되어 편하게 개발을 진행할 수 있습니다.
책에서는 dependencies에 compile, testCompile을 사용하였지만 저는 implementation을 사용했습니다.
이유는 document 를 보시면 알 수 있을 것 같습니다!
이 코드를 모두 적용한 전체 코드는 다음과 같습니다.
buildscript {
ext {
springBootVersion = '2.1.7.RELEASE'
}
repositories {
mavenCentral()
jcenter()
}
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'
group 'com.conatuseus.book'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
jcenter()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
그리고 Gradle 탭을 보면 아래와 같이 의존성이 잘 받아졌는지 확인할 수 있습니다.
마치며...
gradle을 파보진 않았지만, 현재 진행중인 프로젝트들의 gradle을 이해하는데 많은 도움이 될 것 같다.
검색하다보니 gradle과 maven에 대해 공부할 것들이 생각보다 더 많은 것 같다.
조만간 gradle과 maven을 공부하는 시간을 가져야겠다.