스프링 부트를 이용해 웹 애플리케이션을 개발하려면 먼저 프로젝트의 구조와 이를 관리하는 빌드 도구에 대한 이해가 필요합니다. 특히 Java 생태계에서 널리 사용되는 Gradle과 Maven은 프로젝트의 의존성 관리, 빌드 자동화, 배포에 이르기까지 핵심적인 역할을 수행하죠.
이 글에서는 스프링 부트 웹 애플리케이션의 폴더 구조를 기본부터 단계별로 분석하고, Maven과 Gradle이라는 두 가지 주요 빌드 도구를 비교해 보겠습니다. 프로젝트를 처음 시작하시는 분들이라도 쉽고 체계적으로 이해할 수 있도록 정리했습니다.
목차
- 스프링 부트 폴더 구조 완전 분석
- 빌드 도구란 무엇인가?
- Gradle의 구조와 특징
- Maven의 구조와 특징
- Gradle vs Maven : 어떤 것을 선택해야 할까?
- 마무리 및 실전 팁
1. 스프링 부트 폴더 구조 완전 분석
스프링 부트 프로젝트는 크게 main과 test라는 두 가지 핵심 디렉터리를 중심으로 구성됩니다. 이 폴더들은 실제 코드와 테스트 코드를 명확히 구분하며, 각 역할에 맞게 구조화되어 있습니다.
📁 src/main
main은 실제 애플리케이션이 동작하는 데 필요한 모든 코드와 설정 파일이 위치하는 공간입니다.
1.1 java/
Java 소스코드를 작성하는 폴더로, 실제 비즈니스 로직이 이곳에 위치합니다. 패키지 구조에 따라 클래스를 나누어 관리할 수 있으며, @SpringBootApplication이 선언된 메인 클래스도 이곳에 포함됩니다.
예시:
src/
└── main/
└── java/
└── com/
└── example/
└── demo/
├── DemoApplication.java
└── controller/
└── HomeController.java
1.2 resources/
정적 리소스, 설정 파일, 템플릿 등 Java 코드 외부에 위치한 리소스를 담는 폴더입니다.
- application.properties 또는 application.yml: 애플리케이션 전반의 설정을 관리
- static/: 정적 파일 (CSS, JS, 이미지 등)
- templates/: 서버 사이드 렌더링 템플릿 (Thymeleaf, Freemarker 등)
- banner.txt: 앱 실행 시 표시될 배너
예시:
src/
└── main/
└── resources/
├── static/
├── templates/
├── application.yml
└── banner.txt
📁 src/test
테스트 코드를 관리하는 영역입니다. 구조는 main/java와 동일하지만 목적은 다릅니다. JUnit, Mockito 등을 활용해 서비스의 유효성과 안정성을 검증합니다.
예시:
src/
└── test/
└── java/
└── com/
└── example/
└── demo/
└── HomeControllerTest.java
2. 빌드 도구란 무엇인가?
스프링 부트 애플리케이션은 단순히 Java 파일을 모아놓는 것으로는 동작하지 않습니다. 프로젝트를 실행 가능한 상태로 빌드하고, 외부 라이브러리를 관리하며, 배포 가능한 형태로 포장하기 위한 빌드 도구가 필요합니다.
빌드 도구가 하는 일:
- 의존성(Dependencies) 자동 다운로드
- 소스 컴파일 및 패키징
- 테스트 실행 및 결과 확인
- JAR 또는 WAR 파일 생성
- 멀티모듈 구성 및 관리
Java 진영에서는 대표적으로 두 가지 빌드 도구가 널리 사용됩니다.
- Gradle (현대적 & 선언적 DSL 기반)
- Maven (전통적 & XML 기반)
3. Gradle의 구조와 특징
Gradle은 Google과 JetBrains 등 현대 개발자들에게 선호받는 빌드 도구입니다. Kotlin DSL 또는 Groovy 문법으로 선언적이고 유연한 빌드 구성이 가능합니다.
🔧 주요 파일 구성
build.gradle
- 프로젝트 의존성, 플러그인, 태스크(Task)를 정의하는 핵심 설정 파일입니다.
- 선언적인 코드 스타일로 구성되어 있어 가독성이 뛰어납니다.
예시:
plugins {
id 'org.springframework.boot' version '3.2.0'
id 'io.spring.dependency-management' version '1.1.3'
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
settings.gradle
- 프로젝트 이름 및 하위 모듈을 포함시키는 설정 파일입니다.
예시:
rootProject.name = 'demo'
4. Maven의 구조와 특징
Maven은 Java 빌드 도구의 표준처럼 널리 사용되어 왔으며, XML 기반 설정 방식으로 정형화된 빌드 구조를 지향합니다.
🔧 주요 파일 구성
pom.xml
- 프로젝트의 모든 설정(의존성, 플러그인, 빌드 설정 등)을 담는 XML 파일입니다.
예시:
4.0.0
com.example
demo
0.0.1-SNAPSHOT
jar
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
5. Gradle vs Maven : 어떤 것을 선택해야 할까?
항목 Gradle Maven
빌드 속도 | 빠름 (Incremental Build) | 느림 |
설정 파일 | Groovy/Kotlin DSL | XML |
사용자 경험 | 유연하고 확장성 있음 | 일관되고 표준적 |
커뮤니티 지원 | 활발히 성장 중 | 성숙하고 안정적 |
멀티 모듈 관리 | 우수 | 비교적 복잡 |
✅ 선택 팁:
- 초보자 → Maven 추천 (구조가 명확하고 설정이 단순)
- 커스터마이징이 많은 프로젝트 → Gradle 추천 (스크립트 유연성 최고)
- Android 개발 → 무조건 Gradle (기본 빌드 도구)
6. 마무리 및 실전 팁
스프링 부트 프로젝트를 구성하고 실행하는 데 있어, 폴더 구조와 빌드 도구의 이해는 기본 중의 기본입니다. 특히, build.gradle이나 pom.xml을 직접 다뤄보며 라이브러리를 추가하고 태스크를 실행해보는 경험이 매우 중요합니다.
실전 팁 💡
- main/java와 test/java는 동일한 패키지 구조로 유지하여 테스트 작성이 쉬워집니다.
- application.yml 또는 application.properties는 환경별로 분리하여 관리하세요.
- Gradle 사용자는 ./gradlew build, Maven 사용자는 mvn clean install을 통해 로컬 빌드를 자주 실행해 보세요.
- 여러 모듈로 구성된 프로젝트라면 Gradle의 멀티모듈 구성을 고려해보는 것이 좋습니다.
✅ 관련 태그
#스프링부트 #웹애플리케이션 #폴더구조 #Gradle #Maven #Java빌드도구 #SpringBoot초보 #개발자기초 #빌드자동화
'IT' 카테고리의 다른 글
샤오미 레드미 워치 5 vs 라이트 vs 액티브 차이점 비교: 어떤 모델을 선택해야 할까? (1) | 2025.05.08 |
---|---|
문화누리카드로 유튜브 프리미엄 결제하는 가장 현실적인 방법 (1) | 2025.05.08 |
이클립스(Eclipse) 완벽 기초 가이드 – UI 이해부터 프로젝트 실행, 퍼스펙티브 활용까지! (0) | 2025.05.08 |
이클립스 다운로드 및 스프링부트 개발 환경 설정 완벽 가이드 (2025년 최신판) (0) | 2025.05.08 |
자바 개발의 시작, 인텔리제이(IntelliJ IDEA) 설치 및 기본 사용법 완전 정복 (2) | 2025.05.08 |