Gradle프로젝트를 SpringBoot프로젝트로 변경하기

신광진·2021년 6월 4일
0
post-thumbnail

Gradle

Gradle을 Ant, Maven이 가진 단점을 보완하고 장점을 합쳐서 만든 오픈소스 Build툴이다.
이번에 공부하면서 Gradle을 처음 사용해봤기 때문에 어떤 특징을 가지고 있는지 간략하게 알아봤다.
나처럼 처음 Gradle을 사용해보는 사람이라면 아래 특징을 슥 읽고 넘어가도 좋을 것 같다.
더 자세히 알아보고 싶다면 Gradle Github을 참고하면 된다.

Gradle특징

  1. JVM에서 동작하는 스크립트 언어 Groovy기반의 DSL(Domain Specific Language를 사용한다. (Groovy는 Java와 문법이 유사하다)
  2. Gradle Wrapper를 이용하면 Gradle을 설치하지 않고도 프로젝트 빌드가 가능하다.
  3. Maven, Ivy등의 기존 저장소 인프라 또는 pom.xml파일과 ivy.xml파일에 대한 migration의 편의성을 제공한다.

SpringBoot 프로젝트로 변경하기

인텔리제이에서 Gradle프로젝트를 생성하면 build.gradle이라는 파일이 생성된다.
파일의 내용을 수정하여 기존 Gradle프로젝트를 SpringBoot프로젝트로 변경한다.
처음에 생성되는 파일 내용은 여기서 다루지는 않는다.

Build Script

가장먼저 작성하는 내용은 buildscript이다.
안에 내용을 하나씩 살펴보자.

  • ext
    • build.gradle에서 사용하는 전역변수를 선언하는 부분이다.
    • pom.xml에서 <properties></properties>안에 선언되는 변수와 매핑되는 개념이다.
  • repositories
    • 각종 의존성을 어떤 원격 저장소에서 받을지를 정한다.
    • mavenCentral은 익숙하지만 jcenter는 낯설 수 있다. 이 부분은 뒤에서 더 설명한다.
  • dependencies
    • 여기서 사용되는 dependencies는 springBoot의 GradlePlugin버전을 명시하고 있다. (ext에서 선언한 변수를 사용함)
    • SpringBoot는 라이브러리들의 버전까지 관리해주는 기능이 있는데 여기에서는 GradlePlugin 2.1.7.RELEASE를 기준으로 라이브러리들의 버전을 관리하겠다는 것이다.

plugin

문자 그대로 적용할 plugin들을 나열한 것이다.
위 4개의 플러그인은 자바와 스프링 부트를 사용하기 위해서는 필수 플러그인이기 때문에 항상 추가해야 한다.
특히 io.spring.dependency-management는 스프링 부트의 의존성들을 관리해주기 때문에 가장 중요하다.

dependencies

Maven과 동일하게 사용하고 싶은 라이브러리 의존성을 추가하는 영역이다.
스프링 부트를 사용해보지 않았다면 버전이 명시되어 있지않은것이 이상할 수 있다.
하지만 위에서 언급했듯이 스프링 부트는 라이브러리들의 버전도 관리해준다.
라이브러리 버전관리 기준은 BuildScript의 dependencies에 선언한 spring-boot-gradle-plugin의 버전이다.

두 개의 원격저장소를 사용하는 이유

mavenCentral의 문제점

mavenCentral에 라이브러리 업로드를 하기위해서는 매우 많은 설정과 과정이 필요하다.
이러한 문제로 개발자들이 mavenCentral에 라이브러리를 업로드 하지 않으면서 공유가 안되는 문제가 발생하였다.

jcenter의 문제점 해결

이 문제를 해결한 것이 jcenter이다.
jcenter는 라이브러리 업로드 과정이 mavenCentral에 비해 단순하다.
또한 jcenter에 업로드 된 라이브러리는 mavenCentral로 업로드 될 수 있도록 자동화 되어있다.
이러한 이유로 많은 개발자들의 라이브러리가 jcenter로 이동하고 있다.

P.S

Gradle은 projects와 tasks라는 개념 등 공부해야 할 것이 많아보인다.
위 내용들을 이미 알고있다면 spring Initializr를 사용하여 곧 바로 스프링 부트 프로젝트를 생성하면 된다.

profile
이거 왜안되냐

0개의 댓글