프로젝트를 처음 시작할 때, 저는 두 가지 선택지 사이에서 고민을 했습니다.
- Spring Initializr를 통해 기본적인 Spring Boot 프로젝트 구조를 바로 생성하는 방법
- 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
'Back-End > build Tools' 카테고리의 다른 글
Gradle 빌드 중 발생하는 java.lang.NoSuchFieldError 오류 해결 방법 (0) | 2025.02.15 |
---|---|
Gradle 설치 후 gradle init 프로젝트 초기화 경험 – 기본 템플릿의 한계 (0) | 2025.02.09 |
Windows 환경에서 Gradle 설치 및 설정 가이드 (0) | 2025.02.09 |