반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 소프트웨어공학
- 프로그래밍
- 네트워크
- 데이터베이스
- 네트워크보안
- 버전관리
- 자바스크립트
- 컴퓨터비전
- 컴퓨터공학
- 프로그래밍언어
- 딥러닝
- 알고리즘
- 사이버보안
- Yes
- 컴퓨터과학
- 데이터구조
- 데이터과학
- 파이썬
- 디자인패턴
- 웹개발
- 데이터분석
- 인공지능
- springboot
- 클라우드컴퓨팅
- 자료구조
- 소프트웨어
- I'm Sorry
- 머신러닝
- 보안
- 빅데이터
Archives
- Today
- Total
스택큐힙리스트
자바 스프링 개발 시작하기 - 6일차 빌드 & 의존성 마스터하기 본문
반응형
왜 ‘빌드 & 의존성 관리’가 중요한가?
스프링 프로젝트가 커질수록 라이브러리 충돌과 느린 빌드가 개발 흐름을 끊어놓습니다.
오늘은 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️⃣ 스프링 프로젝트를 ‘멀티모듈’로 쪼개기
- 루트 디렉터리
settings.gradle.kts 에서
include("core", "api", "batch", "common-util")
- 공통 빌드 로직 통합
루트 build.gradle.kts에 subprojects { ... } 블록으로 java, kotlin, spring-boot 플러그인·버전을 한 방에 지정. - 도메인별 모듈 – 예)
- core : JPA 엔티티·서비스
- api : REST 컨트롤러
- batch : Spring Batch 잡
- common-util : 메시지·유틸 공유
- 의존성 연결
dependencies { implementation(project(":core")) implementation(project(":common-util")) }
- 테스트 격리
각 모듈에 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가지 규칙
- 폴더 체계는 ‘레이어’보다 ‘기능’ 기준 — 도메인(상품·회원)별 패키지로 나누면 규모가 커도 의존성이 명확.
- buildSrc or 전용 Gradle Plugin에 커스텀 태스크를 모아 “build.gradle”을 가볍게.
- 버전 카탈로그 한 곳에서 spring-boot, lombok, logback 등 공통 버전 고정 → 릴리스 관리 부담 0.
✨ 마무리
Maven과 Gradle의 철학을 이해하고, Gradle 멀티모듈과 자동화 스크립트를 손에 익히면 빌드 속도 UP, 의존성 충돌 ZERO, 배포 사이클 단축이라는 세 토끼를 동시에 잡을 수 있습니다.
내일은 멀티모듈 환경에서 테스트 코드 분리 전략을 다뤄 보겠습니다!
반응형
'개발' 카테고리의 다른 글
멀티모듈 핵심 개념 이해하기 (0) | 2025.07.12 |
---|---|
멀티모듈 테스트 격리 & Fixture 전략 (0) | 2025.07.12 |
Index Skip Scan 완전 정복: 선두 칼럼이 없어도 인덱스를 타는 마법 (2) | 2025.07.11 |
Index Skip Scan과 Covering Index를 활용한 초고속 페이징 쿼리 패턴 (0) | 2025.07.11 |
실전 튜닝 Q&A: 요청 지연 파악부터 CDN-비용, 인덱스 설계까지 한 방에! (0) | 2025.07.11 |
Comments