스택큐힙리스트

자바 스프링 개발 시작하기 - 6일차 빌드 & 의존성 마스터하기 본문

개발

자바 스프링 개발 시작하기 - 6일차 빌드 & 의존성 마스터하기

스택큐힙리스트 2025. 7. 12. 00:09
반응형

왜 ‘빌드 & 의존성 관리’가 중요한가?

스프링 프로젝트가 커질수록 라이브러리 충돌느린 빌드가 개발 흐름을 끊어놓습니다.
오늘은 Maven · Gradle을 비교해 보고, Gradle 멀티모듈 구조로 프로젝트를 쪼개 성능과 유지보수성을 모두 챙기는 실전 방법을 정리합니다.


1️⃣ Maven vs Gradle — 누구를 택할까?

Maven

  • XML 기반, Life-cycle(Phase) 중심의 선언적 빌드
  • 중앙 리포지터리와 POM BOM(Bill of Materials)으로 의존성 버전 관리 편리
  • 플러그인이 풍부하지만 확장 로직이 무겁고 느린 편

Gradle

  • Groovy/Kotlin DSL, 태스크(Task) 지향 지능형 빌드 엔진
  • 빌드 캐시·병렬 실행·인크리멘털 컴파일로 대형 프로젝트도 빠르게 처리
  • Version Catalog, Platform(BOM) Plugin으로 의존성 정합성 확보

Tips — Gradle 8.x부터 Kotlin DSL 기본, 버전 카탈로그로 “libs.versions.toml” 한 곳에서 라이브러리 버전을 통제!

결론적으로 “복잡·대규모 스프링 프로젝트 + CI/CD” 환경이라면 Gradle이 빌드 속도와 유연성 모두에서 앞섭니다. Maven 습관이 필요하거나 레거시 시스템이라면 Maven도 여전히 단단한 선택입니다.


2️⃣ 스프링 프로젝트를 ‘멀티모듈’로 쪼개기

  1. 루트 디렉터리
    settings.gradle.kts 에서
    include("core", "api", "batch", "common-util")

  2. 공통 빌드 로직 통합
    루트 build.gradle.kts에 subprojects { ... } 블록으로 java, kotlin, spring-boot 플러그인·버전을 한 방에 지정.
  3. 도메인별 모듈 – 예)
    • core : JPA 엔티티·서비스
    • api : REST 컨트롤러
    • batch : Spring Batch 잡
    • common-util : 메시지·유틸 공유
  4. 의존성 연결
    dependencies {
      implementation(project(":core"))
      implementation(project(":common-util"))
    }


  5. 테스트 격리
    각 모듈에 testFixtures 플러그인을 써서 테스트 전용 유틸을 분리.

멀티모듈로 나누면 컴파일 범위가 줄어 빌드 시간이 대폭 감소하고, 각 모듈을 Maven 리포지터리·Docker로 독립 배포하기도 수월합니다.


3️⃣ 자동 빌드 스크립트 작성법

  • Gradle Wrapper( ./gradlew ) 로 JDK 없이도 동일 버전 빌드.
  • 배포용 태스크
tasks.register("releaseAll") {
   dependsOn("clean", "build", "publish")
}
  • CI 파이프라인 예시(GitHub Actions)
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Set up JDK 21
        uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: "21"
      - name: Gradle Build
        run: ./gradlew releaseAll --no-daemon
  • 빌드 캐시·원격 캐시 : gradle.properties에
org.gradle.caching=true
org.gradle.caching.remote.url=https://your-cache-endpoint
  • 실시간 빌드 – ./gradlew build --continuous 로 파일 변경 감지 후 자동 재빌드.

4️⃣ 프로젝트 구조를 깔끔하게 유지하는 3가지 규칙

  1. 폴더 체계는 ‘레이어’보다 ‘기능’ 기준 — 도메인(상품·회원)별 패키지로 나누면 규모가 커도 의존성이 명확.
  2. buildSrc or 전용 Gradle Plugin에 커스텀 태스크를 모아 “build.gradle”을 가볍게.
  3. 버전 카탈로그 한 곳에서 spring-boot, lombok, logback 등 공통 버전 고정 → 릴리스 관리 부담 0.

✨ 마무리

Maven과 Gradle의 철학을 이해하고, Gradle 멀티모듈과 자동화 스크립트를 손에 익히면 빌드 속도 UP, 의존성 충돌 ZERO, 배포 사이클 단축이라는 세 토끼를 동시에 잡을 수 있습니다.
내일은 멀티모듈 환경에서 테스트 코드 분리 전략을 다뤄 보겠습니다!

반응형
Comments