본문 바로가기

Backend/Spring

[Spring/SpringBoot] IntelliJ 소개 및 Gradle 프로젝트 설정

필자는 SpringBoot 개발 환경으로 보통 IntelliJ를 사용한다.

아직 개발에 대한 경험이 깊지 않아 eclipse와 다양한 관점에서 비교는 어려울 수 있으나, 필자가 확실하게 느낀 IntelliJ의 강점은 다음과 같다.

 

* Smart Completion

* 다양한 Refactoring 기능

* 자원들에 대한 빠른 검색 속도

* SpringBoot 개발 편리성

* 편리한 git/github...

 

이 다섯 가지는 확실하게 IntelliJ가 강하다.

 

Eclipse로 Html, Css관련 작업을 진행해 보지 못하여서 IntelliJ가 HTML, CSS, JAVASCRIPT관련 기능 지원 부분에서 강한지는(?) 잘 모르겠다. 

(IntelliJ도 무료 버전은 Javascript, Typescript문법 지원을 하지 않는다... 유료버전을 결제해야 한다)

 

Smart Completion이라는 것은 현재 문맥상 내가 import할 패키지나 라이브러리를 정확하게 추천하여 자동 완성해주는 것을 말한다.

 

Refactoring이라는 것은 코드를 정리하거나 클래스를 분리하거나 메소드를 분리하는 등의 작업을 말한다.

 

실제로 다음과 같은 Controller 코드 중

Account를 Build하는 과정을 따로 묶고 싶다면

extracted라는 method name은 변경 가능

이런 식으로 편리하게 따로 리팩토링이 가능하다.

 

자동완성 기능도 확실히 eclipse보다 편하다.

SpringBoot 개발에서는 외부 서버 없이 실행이 가능하다.

git/github의 이용 역시 편리하다. VCS(버전 관리시스템)을 지원해준다.

 

이러한 장점들이 있기 때문에, 처음 Spring을 접하시는 분이라면 IntelliJ를 사용해보시길 권장한다.

 

오늘의 메인 주제인 Gradle Project를 SpringBoot Project로 변경하는 것에 대해 적어보려 한다.

Maven과 Gradle의 차이점에 대해서는 따로 다룰 예정이다. 필자는 Gradle을 주로 사용하기 때문에 Gradle 위주로 블로깅을 진행할 예정이다.

 

Gradle 프로젝트를 한번 생성해 보자.

 

처음 프로젝트를 생성하면 build.gradle 파일에 다음과 같이 되어있을 것이다. (버전마다 조금씩 다를 수 있습니다)

<build.gradle 초기 화면>

우선 이 파일을 SpringBoot 프로젝트 파일로 변경해보자.

buildscript{
    ext {
        springBootVersion = '2.4.4'
    }

    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

SpringBoot 프로젝트 파일로 변경하기 위해 가장 먼저 추가해야 할 buildscript이다.

 

ext라는 키워드는 build.gradle에서 사용할 전역 변수를 설정하는 부분이다. 필자는 보통 springBootVersion으로 2.4.4 버전을 사용한다. 다른 버전을 사용 중이라면 해당 버전에 맞게 수정하면 된다.

 

repositories에 관한 설명으로는 "스프링 부트와 AWS로 구현하는 웹서비스" 라는 책의 문구를 인용하겠다.

repositories는 각종 의존성(라이브러리)들을 어떤 원격 저장소에서 받을지를 정합니다. 기본적으로 mavenCentral()을 사용하지만 라이브러리 업로드 난이도 때문에 jcenter를 많이 사용합니다.

 

즉 개발자들이 개발한 라이브러리를 업로드하는 것이 MavenCentral로는 어려워서 최근에 Jcenter로 많이 이동하고 있고, Jcenter에서 업로드하면 MavenCentral에도 자동 업로드된다고 한다.

 

하지만 jcenter를 저렇게 추가하면 뭔가 warnings가 발생한다.

 

그리고 검색 결과 

 

여러 Android 프로젝트에서 사용하는 JCenter 아티팩트 저장소를 유지하는 회사인 JFrog가 2021년 3월 31일에 JCenter를 읽기 전용 저장소로 만들었습니다. 발표에 따르면 JCenter는 기존 아티팩트의 다운로드를 무기한으로 허용합니다.

 

흠 그렇게 되면 Jcenter의 장점이 무의미해지는 것 같다...

 

저 문구가 Error를 일으키지는 않아서 저렇게 사용해도 되는데 필자는 저런 경고문구를 굉장히 싫어하므로

필자와 같은 성격이라면 Jcenter()를 지우고 MavenCentral() 하나만 추가해서 사용하면 된다.

 

그다음으로는 plugin에 관한 설정인데

 

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

 

해당 네 개의 plugin은 자바와 스프링 부트를 사용하기 위해 필수적인 plugin이기 때문에 항상 추가하면 된다.

 

group = 'com.StudyProject'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.projectlombok:lombok'

    implementation 'com.h2database:h2'
    
    developmentOnly 'org.springframework.boot:spring-boot-devtools'

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

test {
    useJUnitPlatform()
}

 

그 뒤로 group명, version, Java version을 각각 적어주고 (필자는 11 버전을 사용 중입니다)

 

아까 적었던 MavenCentral()을 한번 더 추가해주고

 

그 뒤로 프로젝트에서 사용할 의존성들을 상황에 맞게 추가해주면 된다.

 

마지막 test까지 작성을 완료하고 build.gradle파일을 다시 실행해주면 여러 의존성들이 설치되고 

정상적으로 Application이 실행되면 기본적인 셋팅이 완료되었다고 생각하면 된다.

 

 

*저의 글에 대한 피드백이나 지적은 언제나 환영합니다.