Gradle, 처음엔 복잡해 보이지만 한 번 익히면 너무나도 편리한 Build 도구예요. 작은 개인 Project부터 회사에서 쓰는 대형 시스템까지, Gradle이 있다면 Build 과정과 Dependency 관리를 효율적으로 할 수 있습니다.
이 글에서는 gradle clean build
를 어떻게 실행하는지, 여러 개의 Project를 다룰 때 Dependency을 어떻게 설정하는 게 좋은지, 그리고 Gradle을 최대한 활용하는 방법을 쉽게 설명해 드릴게요. 너무 기술적으로만 설명하는 게 아니라, 실무에서 바로 적용할 수 있도록 실전 예제와 함께 풀어볼 예정이니 편하게 따라와 주세요!
자, 이제 Gradle이 실제로 어떻게 동작하는지 하나씩 살펴볼까요?
Gradle Clean Build 이해하기
Gradle을 다루다 보면 가장 기본적으로 사용하게 되는 gradle clean build
명령어가 있습니다. 이게 정확히 무슨 일을 하는 걸까요?
gradle clean build
란?
이 명령어를 실행하면 다음과 같은 작업들이 진행돼요:
- Build 폴더 정리 –
clean
태스크가 실행되면서 기존 Build된 파일들이 싹 지워져요. - Source Code Compile 및 Packaging –
build
태스크가 실행되면서 코드를 Compile하고, Test를 돌리고, Executable File을 만들어줍니다. - 하위 Project까지 자동 Build – 만약 여러 개의 Project가 연결되어 있다면, Gradle이 알아서 필요한 것들까지 Build해 줍니다.
터미널을 열고 다음 명령어를 실행해보세요:
./gradlew clean build
이렇게 하면 Project가 깨끗하게 정리된 후 Build가 시작됩니다. 만약 여러 개의 Module을 포함하는 Project라면, 모든 하위 Project들도 함께 Build될 거예요.
특정 Project만 Build하기
모든 Project를 Build하는 게 아니라, 특정 Module만 Build하고 싶다면 이렇게 하면 돼요:
./gradlew :web:clean :web:build
이 명령어를 실행하면 web
Project만 정리(clean)하고 Build하게 됩니다.
Gradle Dependency 설정하기
Gradle에서 Project가 커지면 자연스럽게 여러 개의 Module이 필요해집니다. 각각의 Module이 독립적으로 존재하면서도 서로 연결될 필요가 있죠. 이럴 때 Dependency을 어떻게 설정해야 할까요?
Build 결과 확인하기
위에서 ./gradlew :web:clean :web:build
명령어를 실행했다면, 이제 결과를 살펴봅시다.
/web/build/libs
이 폴더로 가보면 .war
파일이 생성되어 있을 거예요. 압축을 풀어서 WEB-INF/lib
폴더를 열어보면 Jackson Core 라이브러리만 포함되어 있을 거예요. 그런데 우리가 원했던 services
, integration
, data
관련 JAR 파일은 보이지 않네요.
이유는 간단합니다. web
Project에 이 Dependency들을 추가하지 않았기 때문이죠. 그럼 이제 추가해볼까요?
Gradle에서 Dependency 추가하기
Dependency을 올바르게 설정하면, Gradle이 Build 순서를 자동으로 조정해 필요한 Module을 먼저 Build하도록 설정할 수 있어요.
루트 레벨에서 Dependency 추가하기
루트 build.gradle
파일에 다음과 같이 작성해 보세요:
dependencies {
implementation project(':services')
}
이렇게 하면 web
Project가 services
Project를 의존하게 됩니다. 즉, web
을 Build할 때 services
도 자동으로 Build되도록 설정하는 거죠.
계층적 Dependency 추가하기
실제 애플리케이션에서는 services
Project가 data
Project를, 그리고 data
Project가 integration
Project를 필요로 하는 경우가 많아요. 이렇게 계층적으로 Dependency을 추가하려면 이렇게 하면 됩니다:
services/build.gradle
파일:
dependencies {
implementation project(':data')
}
data/build.gradle
파일:
dependencies {
implementation project(':integration')
}
이제 Gradle이 자동으로 Build를 진행할 때 다음과 같은 순서로 동작할 거예요:
web
→services
services
→data
data
→integration
여기서 다시 다음 명령어를 실행해보세요:
./gradlew clean :web:build
이번에는 integration
, data
, services
, 그리고 마지막으로 web
Project까지 차례로 Build될 겁니다.
Build 결과 확인하기
위 과정이 완료되면 다시 web/build/libs
폴더로 가보세요. 이제 .war
파일을 열어보면 services.jar
, data.jar
, integration.jar
파일이 제대로 포함되어 있을 거예요!
다른 방식으로 Dependency 선언하기
이렇게 Project 간의 Dependency을 설정하는 것도 좋지만, 경우에 따라서는 project
메서드를 사용하지 않고 직접 선언하는 것도 가능합니다.
예를 들면 이렇게:
dependencies {
implementation 'com.companyname:services:1.0.0'
}
이 방법은 내부 Module이 아니라 외부에서 제공하는 라이브러리를 사용할 때 유용해요.
마무리하며
Gradle을 다룰 때 가장 중요한 건 Dependency을 어떻게 구성하느냐예요. 잘 설정하면:
- Build 순서를 신경 쓰지 않아도 됩니다.
- 불필요한 Build를 줄이고 속도를 최적화할 수 있어요.
- 유지보수가 편해져요.
핵심 정리
✔ gradle clean build
를 활용해 깔끔한 Build를 유지하세요.
✔ project
메서드를 사용해 내부 Module 간 Dependency을 관리하세요.
✔ .war
및 .jar
파일을 열어 Build 결과를 검증하세요.
✔ 다양한 Dependency 선언 방식을 시도하며 가장 효율적인 방법을 찾아보세요.
Gradle을 활용하면 Build가 훨씬 더 편리해질 거예요. 어렵게 생각하지 말고 한 단계씩 따라 해보세요!
'SW > Gradle' 카테고리의 다른 글
Gradle: Java 웹 애플리케이션 테스트, JUnit, Mockito, JaCoCo, SonarQube, Jenkins 활용법, 방법, 예제 (0) | 2025.02.22 |
---|---|
Gradle: Dependency Analysis, 쉽게 이해하기: Subproject와 Transitive Dependency 방법, 예제 (0) | 2025.02.21 |
Gradle: Properties 쉽게 정리하기 | Subproject 설정과 빌드 최적화 (0) | 2025.02.19 |
Gradle: subproject 빌드 로직 한 번에 정리, 예제, 방법 (0) | 2025.02.18 |
Gradle: Multi-Module Project에서 Task 활용 방법, 예제 (0) | 2025.02.17 |