Gradle이란? with 멀티 모듈

yookyungmin·2023년 6월 7일
0

maven

장점

  • 정해진 라이프 사이클에 따라 빌드 진행
  • pom.xml 파일 사용
  • 라이브러 의존성 자동 관리기능 추가

단점

  • xml 파일 기반으로 가독성이 좋지 않음
  • 상속 구조를 이용한 멀티 모듈 구현
  • 의존 관계가 복잡한 프로젝트에는 부적절

Gradle이란

  • 공식 문서에 따르면 거의 모든 유형의 소프트웨어를 빌드할 수 있을 만큼 유연한 빌드 자동화 도구입니다.

  • Groovy 기반의 스크립트 언어로서 유연성을 갖는다

  • 성능 측면에서 유리한 빌드 도구

  • Configuration Injection 방식을 통해 편리한 멀티 프로젝트 빌드를 지원한다.

  • 빌드란? 소스 코드를 실행 가능한 파일로 변환 해주어야 하는데 이것을 빌드라고 합니다.

  • 빌드 도구는 코드를 실행가능한 파일로 만들어주는 과정 및 라이브러리 관리, 테스팅 등을 자동화여 수행

빌드 도구 사용하지 않을떄의 문제점

  • 반복적인 작업을 수작업으로 진행해야 해서 비효율적
  • 라이브러리를 직접 다운로드 및 버전 업데이트 해야한다
  • 프로젝트의 의존성을 파악하기 어렵다.

빌드 스크립트

  • Plugin 이란 특정 작업을 위해 모아놓은 TASK들의 묶음
  • Dependencies(의존성관리)
  • 프로젝트에서 사용하는 라이브러리나 패키지를 의존성이라고 한다.
  • 프로젝트별로 어떤 의존성을 갖는지 명시해주어야 한다.

Dependencies Configurations

  • 라이브러리를 추가하는 시점을 설정 가능
  • 특정 시점에 불필요한 특정 라이브러리를 추가한다면 리소스낭비
  • Implementation : 런타임+ 컴파일 시점 모두 사용
  • compileOnly : 컴파일 할때만 사용되고 런타임때는 미사용
  • runtimeOnly : 런타임 때에만 사용
  • TestImplimentaion 테스트 할 떄에만 사용

Gradle 특징 및 주요 기능

성능

빌드 캐시:

  • 빌드 결과물을 캐싱하여 재사용, 라이브러리 의존성을 캐시로 이전에 다운로드한 라이브러리 사용

점진적 빌드 :

  • 마지막 빌드 호출 이후 변경된 부분만 빌드
  • 변경되지 않은 부분은 캐시 결과를 검색해 재사용
  • 테스트의 입력, 출력 혹은 변경되지 않은 부분을 빌드하지 않음

데몬 프로세스 사용 :

  • 다음 빌드 작업을 위해 백그라운드에서 대기하는 프로세스
  • 초기 빌드 이후 빌드 실행시 초기화 작업을 거치지 않음
  • 이로 인해 한번 빌드된 프로젝트는 다음 빌드에서 매우적은시간 소요

멀티 프로젝트 지원의 필요성

  • 관리자 프로젝트, 일반 회원 프로젝트 모두 멤버 클래스를 추가하는 방식이 있지만, 관리가 어렵다는 단점이 있다.

멀티 프로젝트(멀티 모듈)이란?

  • 공통되는 도메인을 사용하는 프로젝트를 하나의 프로젝트로 묶어서 관리하는 것이다.
    Gradle은 각 프로젝트가 공통으로 사용하는 클래스를 모듈로 만들어 독립적인 각 프로젝트에서 사용할 수 있도록 한다.
  • root 프로젝트 : 공통 모듈 멤버를 사용하는 관리자, 일반 회원 프로젝트를 묶는 프로젝트
  • 공몽 모듈 : 각 프로젝트에서 사용되는 클래스를 하나의 모듈로 저장한다.
    gradle은 독립적인 두 프로젝트에서 멤버 모듈을 사용할 수 있도록 도와준다.
    다음 사진들은 현재 진행중인 프로젝트 사진이다.

    하위 프로젝트 설정



    프로젝트 별로 의존성 추가 가능하다

    공통적인 의존성 관해서는 서브 프로젝트에서 관리 가능하다
    지금과 같은 방식이 가능한 이유는
  • Configuration injection 설정 주입 방식으로
  • 필요한 정보를 직접 프로젝트에 주입하는 방식
  • 공통되는 정보는 묶어서 주입 가능
  • 프로젝트 별로 설정을 다르게 주입가능
  • Maven의 상속구조와 비교했을 때 가독성 측면에서 우월

    라이브러리의 역할을 하는 모듈에는 실행하지 않는다는것을 명시하기 위해 위와 같은 코드를 명시해준다.
    common, integration

레퍼런스
https://www.youtube.com/watch?v=V4knLFDG-ZM

0개의 댓글