JAVA

1. Gradle

ggomjiu 2025. 3. 14. 13:54

Java Build Tool

: 소프트웨어 개발에서 소스 코드를 실행 가능한 애플리케이션으로 만들어주는 도구

- 소스 코드의 빌드 과정을 자동으로 처리해주는 도구

- 외부 소스 코드(외부 라이브러리) 자동 추가, 관리

- EX) APACHE ANT, Maven, Gradle

 

1. ANT(앤트)

- 설정을 위해 XML 스크립트를 사용

- 이클립스 IDE에 기본 탑재되어 있고, 간단하고 사용하기 쉬움

- 복잡한 처리를 하려 하면 빌드 스크립트가 장황햇져 관리가 어려움

- 외부 라이브러리를 관리하는 구조가 없음

- 2000년대 초반에 사용했지만, 최근엔 주로 레거시 시스템에서만 사용

 

2. Maven(메이븐)

- 설정을 위해 XML 스크립트를 기반으로 하며, pom.xml 파일로 의존성을 관리

- 외부 라이브러리를 관리할 수 있음

- 장황한 빌드 스크립트 문제를 해결함

- Life Cycle 개념이 도입되어 빌드 순서를 정의할 수 있음

- XML 자체의 한계가 있음

 

3. Gradle(그래들)

- 설정을 위해 Groovy(그루비) 문법을 사용

- 외부 라이브러리를 관리할 수 있음

- 유연하게 빌드 스크립트를 작성할 수 있음

- 성능이 뛰어남 -> 캐싱이 잘됨

- 가장 최근에 나온 빌드 도구

- 기존 XML 기반 스크립트 작성에 비해 관리가 편해짐

- Build.gradle에 스크립트를 작성하여 사용

 

Gradle을 사용하는 이유

1. 간결한 스크립트 작성

- 기존 pom.xml

<project ... 생략 ...>
<modelVersion>4.0.0</modelVersion>
<groupId>그룹 ID</groupId>
<artifactId>아티팩트 ID</artifactId>
<version>버전</version>
<packaging>jar</packaging>
<name>이름</name>
<properties> ... 속성 정보 ... </properties>
<dependencies> ... 의존 라이브러리 정보 ... </dependencies>
</project>

- Build.gradle

plugins {
id 'java'
id 'org.springframework.boot' version '2.7.11'
id 'io.spring.dependency-management' version '1.0.15.RELEASE' }
group = 'hello'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations { compileOnly { extendsFrom annotationProcessor } }
repositories { mavenCentral() }
dependencies { ... }
tasks.named('test') { useJUnitPlatform() }

 

2. 빠른 빌드 속도

1) 점진적 빌드

- 작업의 입출력을 추적하고, 변경된 파일만 처리하여 작업

- 즉, 이미 빌드된 파일을 모두 빌드하는 것이 아니라 변경된 내용만 빌드함

 

2) 캐싱

- Gradle은 캐싱을 하기 때문에 다른 빌드 도구보다 속도가 빠름

- 거의 모든 시나리오에서 최소 2배 더 빠른 성능을 제공하고, 빌드 캐시를 사용하는 대규모 빌드의 경우 100배 더 빠름

 

3) 데몬 프로세스

- 서비스 요청에 응답하기 위해서 메모리 상에 빌드 결과물을 보관하는 오래 지속되는 프로세스

- 한 번 빌드된 프로젝트는 다음 빌드 시 시간이 단축됨

 

3. 멀티 프로젝트 빌드

- 대규모 프로젝트에서는 멀티 모듈 프로젝트로 구성하게 됨

cf) 모듈
: 패키지의 한 단계 위의 집합체이며, 관련된 패키지와 리소스들을 재사용할 수 있는 그룹
- 각 모듈은 독립적으로 개발, 빌드, 테스트, 배포가 가능함
cf) 멀티 모듈
: 상호 연결된 여러 개의 모듈로 구성된 프로젝트를 의미

 

Gradle 사용

- 기본적으로 생성했을 때 Gradle 프로젝트 구조

├── build.gradle
├── .gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle

 

1) .gradle

: Gradle이 사용하는 폴더로 작업(task)으로 생성된 파일이 저장됨

 

2) gradle

: gradle-wrapper와 관련된 폴더

- gradle-wrapper 실행 명령으로도 task 실행이 가능

- 이걸 사용하면 새로운 환경에서도 gradle을 설치하지 않고 빌드가 가능 -> 각 개발자의 로컬 환경에 영향을 받지 않고 사용할 수 있음

- java나 gradle을 설치할 필요 없이 바로 프로젝트를 실핼할 수 있음

 

3) gradlew, gradlew.bat

: gradle-wrapper 실행 명령

- gradlew는 macOS, Linux용이고 gradle.bat은 윈도우 실행 명령

- gradle을 설치하지 않아도 빌드할 수 있음 -> 환경에 종속되지 않음

 

4) settings.gradle

: 프로젝트에 대한 설정 정보를 작성하는 파일

- 멀티 모듈 프로젝트에서 하위 모듈을 추가한느 경우에 이 파일에 명시해야 함

 

5) build.gradle

: 프로젝트에 필요한 의존성과 빌드 처리 내용을 작성하는 파일

 

6) plugin

- 프로젝트에서 사용하는 Gradle 플러그인을 추가

 

7) 저장소

: 각종 프로그램이 저장되는 위치

- build.gradle은 외부 라이브러리에 대한 기술이 있음

'JAVA' 카테고리의 다른 글

6. Xms & Xmx  (0) 2025.03.28
5. JRE, JDK, JVM  (0) 2025.03.21
4. 다양한 GC  (0) 2025.03.21
3. JVM 메모리 구조  (0) 2025.03.14
2. 객체지향  (0) 2025.03.14