FrameWork/Spring Boot

gradle 및 스프링 부트3 프로젝트 생성

soooy0 2025. 2. 25. 17:44
인텔리제이 설치

 

먼저 인텔리제이를 설치했다. 설치 방법은 여기를 참고바란다.

https://to-mypage.tistory.com/51

 

 

gradle 프로젝트 생성

 

1. New Project 클릭 ➡️ Build system을 Gradle로 설정 ➡️ 'download JDK...' 클릭

  • 책에서 JDK17버전을 사용하고 있었는데, 나는 Azul Zulu JDK11버전을 사용중이었어서 새롭게 다운로드 받아야 했다.
  • JDK에서 'download JDK...'를 누른다.
  • 이미 JDK17버전을 쓴다면 아래 과정 스킵 가능

 

 

2. version: 17로 선택 ➡️ Vendor는 아무거나 가능하다. 나는 Azul Zulu Community를 선택했다.

 

 

 

3.

  • 언어: Java
  • Name(프로젝트 이름): springboot-developer
  • Build system: Gradle
  • Gradle DSL: Groovy
  • GroupId(회사 도메인이나 자신의 도메인을 적는다): me.jinsoyeong
    이렇게 설정해준 후, create를 누르면 프로젝트가 생성된다.



 

4. 프로젝트가 생성되면 JDK17이 알아서 다운로드된다. 여기까지 하면 gradle 프로젝트를 생성한 것이다.

여기까지 나의 궁금점
더보기

Q. Build system의 gradle과 maven의 차이는 무엇일까?
A. gradle과 maven은 자바 생태계에서 널리 사용하는 빌드 관리 도구이다. 우리가 작성한 소스코드는 사용자가 바로 사용할 수 없는 형태이다. 이를 사용 가능한 모습으로 갖추려면 '빌드'라는 과정을 거쳐야 한다.

이러한 빌드 과정에서 필요한 것들을 관리하고 자동화하는 도구를 '빌드 관리 도구'라고 한다.
의존성 내려받기, 코드 패키징, 컴파일, 테스트 실행 등이 포함되어 있다. 에전에는 메이븐을 많이 사용했지만, 요즘은 gradle을 많이 사용하는 추세라고 한다.

Q. gradle의 특징은?
A.
- maven에 비해 가독성이 좋고 설정이 간단하다.

- 자바, 코틀린, 그루비 등 다양한 언어를 지원하며, 원하는 대로 빌드 스크립트를 작성할 수 있다.

- 빌드 테스트 속도가 maven에 비해 더 빠르다.

Q. gradle DSL을 groovy로 설정했는데, 이게 무엇인지?
A.

gradle은 빌드 자동화 도구이다. 이 빌드 스크립트((프로젝트의 빌드(컴파일, 패키징, 의존성 관리 등)를 설정하는 코드))를 작성할 때 사용할 수 있는 DSL(도메인 특화 언어, groovy 또는 kotlin)을 제공한다.

 

Gradle에서는 2가지 DSL을 지원하는데
✅ Groovy DSL (build.gradle)
✅ Kotlin DSL (build.gradle.kts)

즉, Gradle 스크립트를 Groovy 문법으로 작성할지, Kotlin 문법으로 작성할지 선택할 수 있음.

Groovy DSL(build.gradle) vs Kotlin DSL (build.gradle.kts) 차이점

기본 문법 Groovy 사용 Kotlin 사용
코드 자동완성 약함 (동적 타입) 강함 (정적 타입)
빌드 속도 상대적으로 느림 상대적으로 빠름
가독성 유연하지만, IDE 지원이 부족할 수 있음 더 명확하고 안전한 문법
사용성 기존 프로젝트에서 많이 사용 최신 프로젝트에서 선호

 

 

Q. gradle distribution을 wrapper로 설정했는데, 이게 무엇인지?
A. Gradle을 로컬에 직접 설치하지 않아도 프로젝트에서 자동으로 사용할 수 있도록 설정했다는 의미

 

Gradle distribution이란?

-> Gradle을 실행하려면 Gradle이 설치되어 있어야 하는데, 설치하는 방식에는 2가지 옵션이 있음.

  1. Gradle을 직접 설치
    • 사용자가 직접 Gradle을 다운로드하고 시스템에 설치함
    • 특정 Gradle 버전이 필요하면 수동으로 변경해야 함
  2. Gradle Wrapper 사용 (gradlew) ✅
    • Gradle이 자동으로 다운로드 및 실행됨
    • 프로젝트에 필요한 Gradle 버전을 자동으로 관리
    • 빌드 환경이 다르더라도 같은 Gradle 버전을 보장

Gradle Wrapper(gradlew)란?

-> Gradle Wrapper는 프로젝트에 포함된 스크립트(gradlew, gradlew.bat)이다.
이를 통해 Gradle을 따로 설치하지 않아도, 프로젝트별로 특정 Gradle 버전을 유지하면서 실행할 수 있다.

📌 Gradle Wrapper가 있으면, 실행 시 자동으로 필요한 Gradle 버전을 다운로드하고 실행함
📌 gradlew를 실행하면 Gradle을 직접 설치하지 않아도 됨
📌 CI/CD 환경에서 Gradle 버전을 고정할 때 유용함

-> Gradle이 Wrapper 모드로 실행되면, gradle/wrapper/gradle-wrapper.properties 파일에 Gradle 버전이 저장돼 있다.

ex) distributionUrl → 프로젝트에서 사용할 Gradle 버전을 정의, 7.5버전을 사용한다는 의미

distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip

 

스프링부트 3 프로젝트 생성

 

이제 앞에서 만들었던 gradle프로젝트를 spring boot3 프로젝트로 바꾸어보자.

 

1. build.gradle(gradle 설정파일)을 더블클릭

 

 

2. build.gradle 파일 수정

// 프로젝트에 사용할 플러그인
plugins {
    // Java 플러그인 적용, java 프로젝트임을 명시
    id 'java'

    // 스프링부트 플러그인 사용
    id 'org.springframework.boot' version '3.2.0'

    // 스프링의 의존성을 자동으로 관리하는 플러그인
    /*
        1. 애플리케이션을 실행 가능한 JAR로 패키징
        2. 내장 Tomcat 서버 실행 가능
        3. 자동 의존성 관리 (별도로 버전을 명시하지 않아도 됨) */
    id 'io.spring.dependency-management' version '1.1.0'
}

// 지정한 그룹 이름 (보통 도메인 형식으로 지정)
group = 'me.jinsoyeong'

// 프로젝트 버전 (SNAPSHOT: 개발 중인 버전)
version = '1.0-SNAPSHOT'

// 추가: 자바 소스 컴파일 시 사용할 자바 버전 입력
sourceCompatibility = '17'

// 의존성을 받을 저장소 지정, Maven 중앙 저장소 사용
// Gradle이 필요한 라이브러리를 찾을 때, Maven Central 저장소에서 다운로드
repositories {
    mavenCentral()
}

// 프로젝트를 개발하며 필요한 기능의 의존성을 입력, 라이브러리 추가
dependencies {
    // implementation → 실행 시 필요한 라이브러리
    // Spring Boot 웹 애플리케이션 개발을 위한 라이브러리 추가 (내장 Tomcat 포함)
    implementation 'org.springframework.boot:spring-boot-starter-web'

    // testImplementation → 테스트 전용 라이브러리
    // JUnit 기반의 테스트 기능을 제공하는 라이브러리 추가
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

test {
    useJUnitPlatform()
}

 

각 코드가 의미하는 바를 주석으로 적어두었다.

이 코드가 어떤 것을 의미하는 지 알고 쓰는 것이 굉장히 중요하다고 느꼈기 때문이다.

 

위 gradle 설정파일이 의미하는 바는 아래와 같다.

✅ Spring Boot 3.2.0 기반 Java 17 프로젝트
✅ 웹 애플리케이션 개발 가능 (spring-boot-starter-web)
✅ JUnit 5 테스트 환경 설정 (spring-boot-starter-test)
✅ Gradle의 Dependency Management를 활용하여 의존성 자동 관리

 

 

3. 우측 탭에서 gradle 아이콘을 클릭

 

 

4. 새로고침 버튼 클릭

 

 

여기서 나는 에러가 발생했다....

Dependency requires at least JVM runtime version 17. This build uses a Java 11 JVM.

 

gradle을 실행하려 했으나 JDK버전이 맞지 않아 생긴 오류인 듯 했다. 해당 부분에 관련한 해결방법은 아래 링크로 남기겠다.

https://to-mypage.tistory.com/52

 

 

5. 하단 상태바에서 진행중인 임포트를 확인 후, 끝날 때까지 기다린다.

 

 

 

6. 임포트가 끝나면 src/main/java를 펼치고, 미리 생성된 패키지에 우클릭 ➡️ 새 패키지를 만든다.

  • 이름은 "me.jinsoyeong.springbootdeveloper"로 설정했다. <그룹_이름>.<프로젝트_이름>형식으로 입력하면 된다.

 

 

7. 생성한 패키지(나의 경우 :me.jinsoyeong.springbootdeveloper)에 다시 우클릭  ➡️ 새로운 클래스 생성

  • 이름은 "SpringBootDeveloperApplication"으로 설정했다.
  • 이 클래스는 스프링 부트를 실행할 용도의 클래스이다. 모든 프로젝트에는 메인 클래스가 있어야 한다. 따라서 이 클래스를 메인 클래스로 사용할 예정이다.

 

 

8. 앞에 만든 메인 클래스에 코드 입력

package me.jinsoyeong.springbootdeveloper;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

// 스프링 부트를 실행할 용도의 클래스
// 메인 클래스
@SpringBootApplication
public class SpringBootDeveloperApplication {
    public static void main(String[] args){
        SpringApplication.run(SpringBootDeveloperApplication.class, args);
    }
}

 

책에서는 여기서 import 에러가 날 경우 에러가 발생한 위치에 커서를 대고 Import class를 해주라고 했는데, 나는 에러가 안나서 넘어갔다.

 

이 코드들의 의미가 궁금하다면 아래 링크로!
https://to-mypage.tistory.com/57

 

9. 클래스에 마우스 우클릭 ➡️ [Run 'SpringBoot ... main()] 클릭하여 메인 클래스 실행

 

  • 실행하면 이렇게 spring 모양이 콘솔창에 뜨면서, 'Started SpringBoot...in ~ seconds'로 메세지를 확인 가능하다. 스프링 애플리케이션이 시작되었음을 의미한다.

 

 

 

10. 크롬에 localhost:8080 입력 후 접속

 

  • 이렇게 뜨면 제대로 실행된 것이다. 오류페이지 마지막에 type= Not Found, status=404 에러가 떴음을 확인 가능한데, 이는 요청이 잘 수행되었으나 요청에 해당하는 페이지가 없어서 나오는 것이다.
더보기

localhost:8080을 요청하면 먼저 index.html파일을 찾도록 설정되어 있는데, 이 파일을 프로젝트에 아직 추가하지 않았기 때문에 발생하는 것

 

11. index.html 파일 만들기 -> [resources] 폴더 우클릭 ➡️ 새로운 파일 생성 버튼 클릭 ➡️ static/index.html 을 입력해준다.

  • 이렇게 입력하면 static 폴더 밑에 index.html 파일을 동시에 생성해준다.

 

 

12. index.html 파일에 코드 입력

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <p>index.html</p>
</body>
</html>

 

  • 이후 인텔리제이 우측 상단에 있는 다시 시작 버튼을 눌러서 서버를 다시 시작해준다.

  • localhost:8080에 접속하면 인덱스 페이지가 제대로 뜨는 것을 확인 가능!

 

인텔리제이 단축키

 

 

IntelliJ IDEA keyboard shortcuts | IntelliJ IDEA

 

www.jetbrains.com

 

  • 내가 원하는 단축기로 변경하거나 단축기를 검색해보고 싶은 경우 -> 왼측 상단 IntelliJ IDEA에서 settings...클릭, keymap에서 설정 가능