본문 바로가기
IT

스프링 부트 웹 애플리케이션 구조 완전 정복 & 빌드 도구 비교 (Maven vs Gradle)

by 굿센스굿 2025. 5. 8.
반응형

 

스프링 부트를 이용해 웹 애플리케이션을 개발하려면 먼저 프로젝트의 구조와 이를 관리하는 빌드 도구에 대한 이해가 필요합니다. 특히 Java 생태계에서 널리 사용되는 Gradle과 Maven은 프로젝트의 의존성 관리, 빌드 자동화, 배포에 이르기까지 핵심적인 역할을 수행하죠.

이 글에서는 스프링 부트 웹 애플리케이션의 폴더 구조를 기본부터 단계별로 분석하고, Maven과 Gradle이라는 두 가지 주요 빌드 도구를 비교해 보겠습니다. 프로젝트를 처음 시작하시는 분들이라도 쉽고 체계적으로 이해할 수 있도록 정리했습니다.


목차

  1. 스프링 부트 폴더 구조 완전 분석
  2. 빌드 도구란 무엇인가?
  3. Gradle의 구조와 특징
  4. Maven의 구조와 특징
  5. Gradle vs Maven : 어떤 것을 선택해야 할까?
  6. 마무리 및 실전 팁

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을 직접 다뤄보며 라이브러리를 추가하고 태스크를 실행해보는 경험이 매우 중요합니다.

실전 팁 💡

  1. main/java와 test/java는 동일한 패키지 구조로 유지하여 테스트 작성이 쉬워집니다.
  2. application.yml 또는 application.properties는 환경별로 분리하여 관리하세요.
  3. Gradle 사용자는 ./gradlew build, Maven 사용자는 mvn clean install을 통해 로컬 빌드를 자주 실행해 보세요.
  4. 여러 모듈로 구성된 프로젝트라면 Gradle의 멀티모듈 구성을 고려해보는 것이 좋습니다.

✅ 관련 태그

#스프링부트 #웹애플리케이션 #폴더구조 #Gradle #Maven #Java빌드도구 #SpringBoot초보 #개발자기초 #빌드자동화

 

반응형