OpenSource/Spring Boot

springbootStudy02 - 그래들 기반 springboot project만들기! build.gradle 이해하기

태하팍 2021. 10. 14. 03:20
반응형
  • 이 강좌는 매주 화요일 사외 스터디를 통해 작성!
  • 스프링 부트와 AWS로 혼자 구현하는 웹서비스 책을 선정!(이동욱 저)
    • 내가 생각하는 커리큘럼이랑 같아서 선정! 

2021.10.13 - [OpenSource/Spring Boot] - springbootStudy01 - Jetbrains toolbox 설치


project 생성! 프로젝트는 spring 기본 셋팅을 지원해주는것을 사용하지 않고 쌩짜로 만들어봅니다.

왜냐면 build.gradle를 이해하기 위함이져!

 

기본 디폴트로 아래와 같이 build.gradle이 셋팅이 됩니다.

plugins {
    id 'java'
}

group 'kr.pe.acet'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}

test {
    useJUnitPlatform()
}

이제 build.gradle에 구성을 하나씩 해보도록 하겠습니다.
우선 스프링부트의 버전을 알아야하니 아래의 링크를 통해 최신버전을 알아보도록 하겠습니다.
https://spring.io/projects/spring-boot

현재 2021년10월 기준 2.5.5가 최신이네요

아래를 보시면 스프링진영에서 스프링부트 뿐만 아니라 많은 프로젝트들을 다루고 있네요

자! 다시 돌아와서 build.gradle의 파일에 아래의 내용을 추가 합니다.

buildscript {
    ext {
        springBootVersion = '2.5.5'
    }
    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'

plugins {
    id 'java'
}

group 'kr.pe.acet'
version '1.0-SNAPSHOT'

... 블라블라 ...

ext라는 키워드는 build.gradle에서 사용하는 전역변수를 설정하겠다라는 의미이며 springBootVersion을 전역변수로 생성하고
그 값은 2.5.5 입니다.
그 사용은 아래에 디펜던시로 잡혀있는 spring-boot-gradle-plugin의 2.5.5를 의존(디펜던시)하겠다는 의미.

repositories는 어떤 원격 저장소에서 받을지를 정합니다.
그 중에 jcenter()는 2022년 1월 이후에 더이상 사용하지 않는다고 하네요 그래서 deprecated된 상태 입니다. 
mavenCentral를 사용하면 됩니다.


위 4개의 플러그인은 자바와 스프링부트를 사용하기 위해 필수 플러그인이니 항상 추가해주면 됩니다.
특히 io.spring.dependency-management 플러그인은 스프링부트의 의존성들을 관리해주는 플러그인이라 반드시 필요 합니다.

dependencies는 프로젝트 개발에 필요한 의존성들을 선언하는 곳 입니다. 아래의 2개를 등록 합니다.
compile('org.springframework.boot:spring-boot-starter-web')
testCompile('org.springframework.boot:spring-boot-starter-test')

결과적으로 아래와 같은 build.gradle이 됩니다.

buildscript {
    ext {
        springBootVersion = '2.5.5'
    }
    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'

group 'kr.pe.acet'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    compile('org.springframework.boot:spring-boot-starter-web')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

그런데 막상 오류가 발생 한다..ㅠ

compile이라는 메소드를 찾을수 없다는 것! 즉, 형식이 변경되었다는 것이다.
처음에 아래와 같이 기본설정을 볼수 있었다.
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'

그러므로 아래와 같이 변경하여 추가하여 보자!

dependencies {
   implementation 'org.springframework.boot:spring-boot-starter-web'
   testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

추가 후 성공하는 것을 알수 있습니다.

최종 build.gradle은 아래와 같습니다.

buildscript {
    ext {
        springBootVersion = '2.5.5'
    }
    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'

group 'kr.pe.acet'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

test {
    useJUnitPlatform()
}

마지막으로 spring initializr를 통해서 만들어보고 비교해보겠습니다.

https://start.spring.io/

아래와 같이 비교적 간결하게 만들어지는군요
이제는 수월하게 읽어내려갈수 있을것 같네요! ㅎㅎ

plugins {
        id 'org.springframework.boot' version '2.5.5'
        id 'io.spring.dependency-management' version '1.0.11.RELEASE'
        id 'java'
}

group = 'kr.pe.acet'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
        mavenCentral()
}

dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-web'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

test {
        useJUnitPlatform()
}

확인은 인텔리J 우측에 gradle을 통해 알수 있습니다.

 

  끝.

 

반응형