Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Gradle에 대해 알아보자(김종민) #176

Open
rlajm1203 opened this issue Jun 26, 2024 · 0 comments
Open

Gradle에 대해 알아보자(김종민) #176

rlajm1203 opened this issue Jun 26, 2024 · 0 comments

Comments

@rlajm1203
Copy link
Collaborator

rlajm1203 commented Jun 26, 2024

문제가 무엇인가?

Gradle에 대해 알아보자.

왜 이런 문제를 선정하였는가?

에코노베이션에서 프로젝트를 하면서, Gradle이라는 빌드 도구를 사용하고 있지만 정확히 어떤 일을 하는지 등을 모르고 사용하는 것 같다는 생각이 들었다.

자신이 생각한 답변은 무엇인가?

Gradle 이란?

image
  • 오픈소스 빌드 자동화 도구이다.

Gradle의 기능

  1. 빌드 스크립트 언어
  2. 의존성 관리
  3. 빌드 성능
  4. 멀티 프로젝트 지원
  • 스크립트 언어
    Gradle의 빌드 스크립트는 Groovy 또는 Kotlin 기반의 DSL (Domain Specific Language)를 사용한다.
    • Groovy 는 Java와 호환되는 동적 언어이다.

    • id 'java' : Java 플러그인을 적용한다. Java 프로젝트를 빌드하는 데 필요한 기본적인 태스크와 설정을 제공, 컴파일, 테스트, JAR 파일 생성 등의 기능 사용 가능

    • dependencies : 프로젝트의 의존성 정의, 컴파일 타임과 런타임에 필요한 의존성을 지정한다.

plugins {
    id 'java'
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
}
  • 의존성 관리

    • 저장소 지원 : Maven Repository 지원, 사용자 정의 저장소 추가 가능
    • 의존성 선언 : implementation 'group:name:version'
    • 의존성 보고서 : ./gradlew dependencies 명령을 통해 프로젝트 전체의 의존성 트리를 볼 수 있다.
    • 의존성 캐싱 : 한 번 다운로드한 의존성은 로컬에 캐시 -> 다운 속도 증가
  • 빌드 성능

    • 증분 빌드 : 변경된 부분만 다시 빌드, 소스 파일, 리소스, 의존성 등의 변경만 감지하여 필요한 태스크만 실행
    • 빌드 캐시 : 이전 빌드의 결과물을 캐시하여 재사용
    • 병렬 실행 : 멀티코어 프로세서를 활용하여 독립적인 태스크를 병렬로 실행 (--parallel 옵션으로 활성화 가능```)
    • 데몬 프로세스 : Gradle 데몬을 사용하여 JAVA 시작 시간을 줄이고, 빌드 정보를 메모리에 유지.
  • 멀티 프로젝트 지원

    • 계층적 프로젝트 구조 : 루트 프로젝트 아래에 여러 하위 프로젝트 구성 가능, 각 하위 프로젝트는 독립적인 빌드 스크립트를 가질 수 있다.
    • 설정 공유 : 루트 프로젝트의 setting.gradle 파일에서 하위 프로젝트를 정의할 수 있다. 공통 설정을 루트 프로젝트에 정의하여 하위 프로젝트에서 재사용할 수 있다.
    • 모듈화 : 큰 프로젝트를 논리적인 단위로 나눠서 관리할 수 있다. 코드 재사용성 및 유지보수성 향상
    • 태스크 실행 제어 : 특정 프로젝트나 모든 프로젝트에 대해 태스크 실행 가능, ./gradlew :subproject:task 명령 사용

Maven vs Gradle

image

속도가 빠르다

Build라는 동적인 요소를 XML로 정의하기에는 어려운 부분이 많다

  • 설정 내용이 길어지고 가독성 떨어짐
  • 의존관계가 복잡한 프로젝트 설정하기에 부적절
  • 상속구조를 이용한 멀티 모듈 구현
  • 특정 설정을 소수의 모듈에서 공유하기 위해서는 부모 프로젝트를 생성하여 상속하게 해야 함

Gradle은 Groovy를 사용하기 때문에, 동적인 빌드는 Groovy 스크립트로 플러그인을 호출하거나 직접 코드를 짜면 된다

  • Configuration Injection 방식을 사용해서 공통 모듈을 상속해서 사용하는 단점을 커버함
  • 설정 주입 시 프로젝트의 조건을 체크할 수 있어서 프로젝트별로 주입되는 설정을 다르게 할 수 있음
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant