Gradle 이란

알파로그·2023년 3월 18일
0

Spring Boot

목록 보기
16/57
post-custom-banner

Groovy 를 기반으로 한 오픈소스 빌드 도구

거의 모든 타입의 소프트웨어를 빌드할 수 있는 빌드 자동화 시스템

✏️ Build

소스코드를 컴파일, 테스트, 정적분석 등을 수행해 실행 가능한 Application 으로 만들어주는 과정

Source code --> Build --> Executable File

📍 Build 의 문제점

  • 시간이 흐르면서 다양한 Library 들이 등장하고 이것들을 다운로드 및 추가할 때 마다 번거로움이 발생했다.
  • 같은 Library 라도 버전 때문에 개발자들 간의 버전관리 어려움이 발생했다.
  • 다운받은 jar 파일의 자체를 전부 신뢰할 수 없기 때문에 보안상의 문제가 있다.

✏️ Groovy 로 문제 해결

  • Build 도구중 하나로
    JVM 상에서 실행되는 Script 언어 이다.
  • Java 와 유사한 문법 구조를 가지며, 호환성이 아주 좋다.
  • Gradle 은 Groovy 를 기반으로 되어있기 때문에 java 개발자들이 사용하기 매우 좋다.

📍 Build 도구

  • 계속해서 늘어나는 Library 를 자동 추가 및 관리해준다.
  • Library 의 버전을 쉽게 동기화 해준다.

✏️ Gradle 의 장점

  1. 프로젝트를 Configuration Injection 방식으로 정의한다
    • 설정 주입 방식을 뜻함
  2. 멀티 프로젝트가 빠르다.
  3. Build 속도가 빠르다.
    • Maven 보다 최소 두배 이상, 최대 100 배 빠르다.

📍 1. 프로젝트를 Configuration Injection 방식으로 정의

필요한 정보가 있다면 그것을 프로젝트에 주입한다는 의미이다.

  • Maven 의 상속 구조보다 재사용에 용의하다.
    • Maven 은 XML 형태로 되어있다.
    • Gradle 은 Groovy 형태로 되어있고 가독성이 더 좋다.
  • Projet 의 조건을 체크할 수 있어서 프로젝트 별로 주입되는 설정을 다르게 할 수 있다.

📍 2. 멀티 프로젝트 Build

  • 하나의 Repository 내에 여러개의 하위 프로젝트를 구성할 수 있다.
    • 관리자 서버와 클라이언트 서버를 분리해야 될 경우
    • 하나의 모듈로 구현을 할 경우 코드를 복사 붙여넣기 해야하지만,
      Gradle 을 사용하면 중복을 피할 수 있다.

📍 Build 속도가 빠른 이유

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

✏️ Gradle 의 Dependencies

의존하고있는 Library 들의 설정을 담당하는 부분이다.

⚠️ repositoryies : 의존 Library 들이 저장되어있는 장소를 설정하는 부분

📍 Dependencies - 의존성의 종류

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

profile
잘못된 내용 PR 환영
post-custom-banner

0개의 댓글