
안녕하세요 (●'◡'●)
오늘은 Gradle 프로젝트를 Spring boot 프로젝트로 변경하는 방법에 대해서 알아보겠습니다.
우리는 Spring boot 프로젝트를 생성할 때, Spring Initializr를 주로 사용합니다.

Spring Initializr란, Spring boot를 기반으로 spring 관련 프로젝트를 생성해주는 사이트인데요! 다음과 같은 기능들을 지원해주기 때문에 편리하게 프로젝트를 생성할 수 있다는 장점이 있습니다!
- Maven, Gradle 지원
- Java, Groovy, Kotlin 지원
- Dependency 최소화 (*-starter 라이브러리 dependency 추가시)
- 다양한 IDE에서 빠른 임포트 가능 ex) STS(Eclipse), IntelliJ
- 필요한 라이브러리 검색을 통해 프로젝트 자동 생성.
- 또는 https://github.com/spring-io/initializr 를 통해 커스텀 start 페이지 구성 가능
이렇게 spring initializr를 사용하게 되면 build.gradle의 코드가 무슨 역할을 하는지, 이니셜라이저 외에 추가로 의존성 추가가 필요하면 어떻게 해야 할지 등을 모르는 상태로 개발하는 경우가 있습니다.
그래서 오늘은 Gradle 기반으로 프로젝트를 생성한 후 Spring boot 프로젝트로 직접 변경해보면서 Spring boot 프로젝트에 필요한 옵션들을 하나하나 살펴보는 시간을 가져봅시다.😉
일단 Intellij를 사용해서 프로젝트 생성부터 해봅시다.
Language는 Java로 설정해주고,
Build system은 Gradle로 설정해줍니다.
GroupId와 ArtifactId도 입력해주어야 하는데, 특히 ArtifactId는 프로젝트의 이름이 되기 때문에 원하는 이름으로 작성해 주시면 됩니다.

이제 Gradle 프로젝트를 Spring boot 프로젝트로 변경해 보겠습니다.
우선 build.gradle파일을 열어봅시다.
💡여기서 build.gradle파일은 이러한 역할을 수행합니다.
build.gradle파일 자체가 Project 오브젝트이다.
Project 오브젝트는 Project 인터페이스를 구현하는 구현체이다.
Project 오브젝트는 Project 단위에서 필요한 작업을 수행하기 위해 모든 메서드와 프로퍼티를 모아놓은 슈퍼 객체이다.
프로젝트를 방금 생성했다면 다음과 같은 간단한 코드들만 있을 겁니다.

이 코드들은 자바 개발에 가장 기초적인 설정만 되어있는 상태입니다. 여기에 Spring boot에 필요한 설정들을 하나씩 추가해봅시다.👻
먼저 build.gradle 맨 위에 위치할 코드입니다.
buildscript {
ext {
springBootVersion = '3.2.1'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
이 코드는 이 프로젝트의 플러그인 의존성 관리를 위한 설정입니다.
ext라는 키워드는 build.gradle에서 사용하는 전역변수를 설정하겠다는 의미인데, 여기서는 springBootVersion 전역변수를 생성하고 그 값을 '3.2.1'로 하겠다는 의미입니다.
즉, spring-boot-gradle-plugin 이라는 Spring boot gradle 플러그인의 3.2.1을 의존성으로 받겠다는 의미입니다.
다음은 앞서 선언한 플러그인 의존성들을 적용할 것인지를 결정하는 코드입니다.
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
io.spring.dependency-management 플러그인은 Spring boot의 의존성들을 관리해 주는 플러그인이라 꼭 추가해야만 합니다.
이 4개의 플러그인은 자바와 Spring boot를 사용하기 위해서는 필수 플러그인들이니 항상 추가해 주세요😎
나머지 코드는 다음과 같습니다.
repositories {
mavenCentral()
jcenter()
}
dependencies {
implementation('org.springframework.boot:spring-boot-starter-web')
testImplementation('org.springframework.boot:spring-boot-starter-test')
}
repositories는 각종 의존성들을 어떤 원격 저장소에서 받을 지를 정합니다.
기본적으로 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}의 버전을 따라가게 되기 때문이죠!
이렇게 관리를 하게 될 경우 각 라이브러리들의 버전 관리가 한 곳에 집중되고, 버전 충돌 문제도 해결되어 편하게 개발을 진행할 수 있습니다.👍

이렇게 코드를 다 작성하였다면 'build.gradle에 변경이 있으니 반영하라'는 알림이 오른쪽에 나옵니다.

이 버튼을 누르게 되면 Gradle이 변경된 내용을 반영하기 시작합니다.

반영이 모두 완료되고 나서 오른쪽 위의 Gradle탭에 들어가보면 이런식으로 의존성들이 잘 받아졌는지 확인해 볼 수도 있습니다.

이렇게 해서 오늘은 Intellij에 기본적인 Spring boot 개발 환경을 직접 구축해 보았습니다! Spring initializr로 간편하게 프로젝트를 생성하는 것도 좋지만, 이렇게 수동으로 프로젝트를 만들어보는 것이 훨씬 유익한 것 같네요👻
그럼 다음 포스트로 찾아뵙겠습니다. 읽어주셔서 감사합니다 :)
📚Reference
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 이동욱
Spring Initialzr란
build.gradle의 동작원리