Gradle

박준수·2022년 10월 21일
0

Gradle이란

2012년에 출시된 Groovy를 기반으로 한 오픈소스 빌드 도구로, 거의 모든 타입의 소프트웨어를 빌드할 수 있는 빌드 자동화 시스템

빌드 : 소스 코드를 컴파일, 테스트, 정적분석등을실행하여 실행 가능한 애플리케이션으로 만들어주는 과정

다양한 라이브러리(스프링 부트 라이브러리, 테스트 라이브러리 등등)의 등장으로 문제점 발생

  • 라이브러리를 다운로드 및 추가하는 번거로움
  • 개발자들 간의 버전관리 어려움
  • 다운받은 jar 파일의 보안 위험

이런 문제점을 해결할 도구가 없을까? => 빌드도구

  • 계속해서 늘어나는 라이브러리를 자동 추가 및 관리
  • 프로젝트를 진행하며 라이브러리의 버전을 쉽게 동기화

Groovy : JVM 상에서 실행되는 스크립트 언어, java와 유사한 문법 구조를 가지며, 호환성이 아주 좋다.

Gradle의 장점

  • 프로젝트를 설정주입 방식으로 정의
    • Maven의 상속 구조보다 재사용에 용이
    • 프로젝트의 조건을 체크할 수 있어서 프로젝트별로 주입되는 설정을 다르게 할 수 있다.
  • 멀티 프로젝트 빌드
    • 하나의 repository내에 여러개의 하위 프로젝트를 구성할 수 있다.
      ex) 관리자(코치) 서버와 사용자(크루) 서버를 분리해서 진행해야 될 경우
      • 하나의 모둘로 하면 많은 코드를 복붙해서 구현해야 하지만, gradle을 사용하면 중복을 피할수 있다.
  • 빠른 빌드 속도

Gradle이 빌드 속도가 빠른 이유

  • 점진적 빌드
    • Gradle은 빌드 실행 중 마지막 빌드 호출 이후에 task의 입력, 출력 혹은 구현이 변경됐는지 확인한다.
    • 최신 상태로 간주하지 않는다면 빌드는 실행되지 않는다.
  • 빌드 캐시
    • 두개 이상의 빌드가 돌아가고, 하나의 빌드에서 사용되는 파일들이 다른 빌드들에 사용된다면 Gradle은 빌드 캐시를 이용해 이전 빌드의 결과물을 다른 빌드에서 사용할 수 있다.
    • 다시 빌드하지 않아도 되므로 빌드 시간이 줄어들게 된다.
  • 데몬 프로세스
    • 데몬 프로세스 : 서비스의 요청에 응답하기 위해 오래 동안 살아있는 프로세스
    • Gradle의 데몬 프로세스는 메모리의 상에 빌드 결과물을 보관
    • 이로 인해 한 번 빌드된 프로젝트는 다음 빌드에서 매우 적은 시간만 소요된다.
    • Gradle을 빌드할때마다 초기화하는 시간에 영향을 주고 빌드 캐시를 더 효율적으로 허용

Gradle 활용

  • plugins
  • repositories : 의존 라이브러리들이 저장되어 잇는 저장소 설정
  • dependencies : 의존성

dependencies

  • api : 내부 의존성을 컴파일과 런타임 모두에 보이는 API 의존성
  • implementation : 내부 의존성을 런타임에서만 보이는 구현 의존성
  • compileOnly : 컴파일에만 사용되는 의존성 정의
  • runtimeOnly : 런타임에만 사용되는 의존성 정의
  • test + implementation, CompileOnly, RuntimeOnly : 해당 의존성을 테스트 시에만 사용하도록 정의

Spring 관련 의존성은 컴파일과 런타임 모두에 사용된다. => implementation
Lombok은 컴파일시에만 사용된다. => compileOnly
h2database는 런타임시에만 사용된다. => runtimeOnly
spring-boot-starter-text는 테스트에서만 사용한다. => testImplementation

참고
Gradle

profile
방구석개발자

0개의 댓글