프로젝트를 처음 시작할 때, 저는 두 가지 선택지 사이에서 고민을 했습니다.

  1. Spring Initializr를 통해 기본적인 Spring Boot 프로젝트 구조를 바로 생성하는 방법
  2. gradle init을 통해 생성된 템플릿을 바탕으로 직접 build.gradle 파일을 작성하고, 디렉터리 및 파일 구조를 커스터마이징하는 방법

결국, 저는 직접 build.gradle을 작성해보며, 프로젝트의 이름 변경, 파일 이름 수정(예: app.java → Application.java) 등 세세한 부분까지 컨트롤하는 방식으로 진행하기로 했습니다.

 


 

프로젝트 폴더 및 파일 커스터마이징

디렉터리 구조 재구성

gradle init으로 생성된 기본 템플릿은 보통 아래와 같은 구조를 가지고 있었습니다:

my-project-001/
 ├── app/                  ← 기본 템플릿의 서브 디렉터리
 ├── build.gradle
 └── settings.gradle
 

하지만 Spring Boot 표준 구조는 다음과 같아야 합니다:

 

my-project-001/
 ├── src/
 │    ├── main/
 │    │    ├── java/       ← 실제 소스 코드 (패키지 구조: io/github/devkb)
 │    │    └── resources/  ← 설정 파일 (application.properties 등)
 │    └── test/
 │         └── java/       ← 테스트 코드
 ├── build.gradle
 └── settings.gradle

기존의 app 디렉터리는 삭제(또는 백업)하고, 위와 같은 디렉터리 구조로 직접 생성 및 재구성했습니다.

build.gradle 파일 직접 작성 및 의존성 추가

저는 기존 템플릿에서 제공되는 내용을 참고하여, 필요한 의존성을 추가하고, 플러그인 버전도 업데이트하는 방식으로 build.gradle 파일을 직접 작성했습니다. 예를 들어:

plugins {
    id 'org.springframework.boot' version '2.7.10'   // Spring Boot 버전을 최신 안정 버전으로 업그레이드
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'io.github.devkb'
version = '0.0.1'
sourceCompatibility = '11'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
    implementation 'org.springframework.boot:spring-boot-starter-mustache'

    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'

    implementation('com.h2database:h2:1.4.196')
    runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'

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

    implementation "io.springfox:springfox-boot-starter:3.0.0"
    implementation "io.springfox:springfox-swagger-ui:3.0.0"

}

test {
    useJUnitPlatform()
}

파일 및 패키지명 수정

  • 프로젝트 이름 변경:
    settings.gradle 파일에서 rootProject.name = 'first-prj'와 같이 지정했던 것을 확인하고, 실제 폴더명과 일치하도록 변경했습니다.
  • 파일명 수정:
    기본 템플릿에서 생성된 app.java 파일의 이름을 오타 없이 Application.java로 변경하여, Spring Boot 애플리케이션의 진입점이 올바르게 작동하도록 했습니다.

3. 빌드 및 오류 대응

커스터마이징 과정 중 여러 오류가 발생했습니다.
예를 들어,

  • 버전 카탈로그 관련 오류:
    libs 프로퍼티가 정의되지 않아 생기는 문제는 직접 의존성을 명시하는 방식으로 해결했습니다.
  • 플러그인 호환성 문제:
    Gradle 8.12.1 환경에서 발생한 내부 API 오류는 Spring Boot 플러그인을 최신 안정 버전으로 올림으로써 해결했습니다.

  • 프로젝트 디렉터리 불일치 문제:
    settings.gradle 파일과 실제 소스 위치가 다를 때 발생하는 오류는, 디렉터리 구조를 재정리하여 모두 같은 루트 디렉터리 내에 위치하도록 수정했습니다.

 


4. 최종 정리 및 연동

모든 수정 작업 후, 다음과 같은 절차로 프로젝트를 정리했습니다.

 

./gradlew clean build
./gradlew bootRun

+ Recent posts