1. 그레이들 프로젝트 선택 화면

2. 프로젝트 그룹명과 아티펙트명 등록

GroupId는 'com.jojoldu.book' 과 같이 도메인 주소를 뒤집어 써놓은것과 같은 형태

ArtifactId는 프로젝트 이름와 동일하게 작성 해야한다.

자바 Project는 대문자 사용을 권장함

그러나 프로젝트 이름과 ArtifactId를 동일하게 작성 해야하고 ArtifactId는 소문자로만 작성 해야하니 소문자로 작성 하는듯 하다.

groupId

artifactId

쉽게 말하면 groupId는 프로젝트의 큰 틀, artifactId는 프로젝트의 각 기능들이다. 예를 들어 지하철 관련 프로젝트를 개발한다고 한다면 groupId는 지하철 노선 전체를 뜻하고, artifactId는 1호선, 2호선 등등을 의미한다.

3. 그레이들 프로젝트를 스프링 부트 프로젝트로 변경하기

인텔리제이에서 build.gradle 파일을 열어보면 다음과 같은 간단한 코드가 있다.

//1. 플러그인
**plugins {
    id 'java'
}

//2. 속성
group 'com.jojoldu.book'
version '1.0-SNAPSHOT'

//3. 저장소
repositories {
    mavenCentral()
}

//4. 의존 라이브러리
dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}

//5. 테스트
test {
    useJUnitPlatform()
}**

추가)

JUnit5란?

자바 개발자가 가장 많이 사용하는 테스팅 프레임워크

테스트 코드 작성을 위한 API와, 그렇게 작성한 테스트를 수행하는 Engine을 분리하였다.

"정확하게 모르겠지만 그렇다 치고 일단 넘어가자"

여기에 스프링 부트에 필요한 설정을 추가하자.

//1. 플러그인 의존성 관리
buildscript {
    ext {
        springBootVersion = '2.1.9.RELEASE'
    }
    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

//2. 플러그인
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

//3. 속성
group 'com.jojoldu.book'
version '1.0.4-SNAPSHOT'
sourceCompatibility = 1.8   

//4. 저장소
repositories {
    mavenCentral()
    jcenter()
}

//5. 의존 라이브러리
dependencies {
    compile('org.springframework.boot:spring-boot-starter-web')

    testCompile('org.springframework.boot:spring-boot-starter-test')
}
  1. 플러그인 의존성 관리

    플러그인 의존성 관리를 위한 설정

    ext : build.gradle에서 사용하는 전역변수 설정

    springBootVersion를 전역변수로 생성하고 그 값을 '2.1.9.RELEASE'로 하겠다.

    즉, spring-boot-gradle-plugin라는 스프링 부트 그레이들 플러그인의 2.1.9.RELEASE를 의존성으로 받겠다는 의미

  2. 플러그인

    플러그인 의존성들을 적용할 것인지를 결정하는 코드

    4개의 플러그인은 자바와 스프링 부트를 사용하기 위한 필수 플러그인

    추가)

    앞의 코드와 모양이 다른데 앞의 코드는 개선된 모양이다.

    뒤의 코드는 옛날 방식이다.

    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'
    
    plugins {
        id 'java'
        id 'eclipse'
        id 'org.springframework.boot' version '2.1.7.RELEASE'
        id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    }
    

    buildscript 와 apply plugin 부분을 plugins 블럭으로 간단하게 적용할 수 있다. (기존 것도 사용 가능)

    자세한 내용은 공식 문서를 참고하자.

  3. 속성

    1. group

      프로젝트의 그룹을 지정한다. 기본값이 있기 때문에 이 부분을 지워도 동작한다.

    2. version

      프로젝트의 버전을 지정한다. group과 마찬가지로 이 부분을 지워도 동작한다.

    3. sourceCompatibility

      컴파일에 사용할 자바 버전을 지정한다.

  4. 저장소

    각종 의존성(라이브러리)들을 어떤 원격 저장소에서 받을지 정함

    기본적으로 mavenCentral을 많이 사용하지만 최근에는 라이브러리 업로드 난이도 때문에 jcenter도 많이 사용함

    (jcenter는 라이브러리 업로드의 힘든 과정을 개선함)

  5. 의존 라이브러리

    프로젝트 개발에 필요한 의존성들을 선언하는 곳

    의존성 코드는 직접 작성해도 되고 자동완성으로 만들어도 된다.

    하지만 특정 버전을 명시하면 안된다.

    버전을 명시하지 않아야 위에서 작성한 전역변수인 springBootVersion의 버전을 따라가게 된다.

    이렇게 관리할 경우 라이브러리 버전 관리가 한 곳에서 집중되고, 버전 충돌 문제도 해결되어 편하게 개발을 진행할 수 있다.

    추가)

    "정확하지 않음.. 해당 내용을 더 확실히 알게 된다면 추가할 예정"

    앞의 코드와 모양이 다른데

    공식 문서를 보면 compile이 deprecated 되었으며 api와 implementation을 선택적으로 사용하되, implementation을 권장한다는 내용을 담고 있다. 또한 api 키워드에 대한 설명이 나와있는데, api 키워드가 작동하는 방식에 대한 서술을 보면 사실상 compile 방식과 동일함을 알 수 있다. 그래서 명시적으로 나와있지 않지만 동일하다고 판단

    대체 방법?

4. 그레이들 설정 반영

인텔리제이 오른쪽 아래에 Gradle projects need to be imported알람이 나온다.

그런데 진행하면서 알람이 나오지 않아서 그냥 Build에서 Reload했다.

Auto import는 편집하는 동안 기본적으로 비활성화되고 빌드 파일을 변경한 후 빌드 파일 편집기의 오른쪽 상단에 아이콘이 표시되어 변경사항을 반영할 수 있다.

Gradle을 확인하면 의존성이 잘 받아졌는지 확인할 수 있다.