콘텐츠로 이동

2021 11 23

2021-11-23

Gradle 멀티 모듈 미션

  • 예시 - gradle-multi-modules - module-api: 서비스 (MemberService, @SpringBootApplication) - module-web: 엔드포인트 (MemberController, @SpringBootApplication) - module-common: 공통 클래스 (Member, MemberRepository)

    - gradle-multi-modules의 settings.gradle... - rootProject.name 정해주고 - include 할 서브모듈 정의해주기

    - gradle-multi-modules의 build.gradle... - subprojects - projects()

    - module-common에 참조용 클래스만 있는 경우... - gradle에 bootJar { enabled = false }, jar { enabled = true } 를 넣어주자!

  • 그래들 멀티 프로젝트 - 최상위 프로젝트의 settings.gradle - include "하위-프로젝트1", "하위-프로젝트2" - 최상위 프로젝트의 build.gradle
    subprojects {
        apply plugin: 'java'
        apply plugin: 'eclipse-wtp'
    
        repositories {
            mavenCentral()
        }
    
        dependencies {
            testCompile 'junit:junit:4.8.2'
        }
    
        version = '1.0'
    
        jar {
            manifest.attributes provider: 'gradle'
        }
    }
    

    - 서브 프로젝트의 build.gradle - 서브 프로젝트간 의존성이 있다면...

    dependencies {
        compile project(':shared')
    }
    

  • Gradle 알아보기 - APIs - project() : 프로젝트의 경로를 인자로 받아 해당 Project 객체를 리턴 - allprojects() : 현재 + 모든 서브 프로젝트 리턴 - subprojects() : 모든 서브 프로젝트 리턴 - Groovy 문법을 통해 해당 프로젝트의 행위를 정의할 수 있음 - settings.gradle에 명시적으로 정의하지 않으면, Gradle은 알파벳 순서에 따라 태스크 실행
  • 멀티 프로젝트 빌드 실행 규칙 - Gradle 태스크 실행 - 계층 구조 탐색... 탐색해서 태스크 이름이 일치한다면 고거 실행 - Gradle은 항상 모든 project를 평가하고, 존재하는 모든 task의 객체 생성 - 프로젝트와 태스크 경로 - ":" 로 시작 (최상위 프로젝트를 뜻함)
  • 멀티 프로젝트 빌드와 테스트 - 자바 플러그인 build 태스크를 통해 컴파일/테스트/코드퀄리티 검사 가능 - buildNeededbuildDependents 태스크 사용하여 여러 범위의 프로젝트에 대해 빌드
  • 멀티 모듈 - [단일 모듈 멀티 프로젝트] - 개별 프로젝트로 되어있는 경우 - 사람이 관리해줘야하는 의존성 - 공용 클래스들은 복붙으로 구성 - [단일 모듈 멀티 프로젝트 + 메이븐 저장소] - 개별 프로젝트 중 공용 클래스는 내부 메이븐 저장소에 라이브러리 형태로 올려둠 - 시스템으로 보장되는 일관성 - 번거로운 개발 사이클 - 하나만 수정해도 다음의 사이클 필요 - [멀티 모듈 단일 프로젝트] - 시스템으로 보장되는 일관성 - 빠른 개발 사이클
  • MSA vs 멀티모듈 - 둘이 다른거야! - 멀티 모듈로 이뤄진 마이크로 서비스가 있고, 서비스들 간에 구성되어 있는 형태가 MSA - 멀티 모듈은 모놀리식 <-> MSA 전환 수월하게 하는 도움 준다!
  • 실패한 멀티 모듈 프로젝트 - common 모듈에 과하게 의존 - common 모듈 만들어서 다 조금만 중복되어도 때려넣는 구조 - common 모듈이 비대해짐 - 모듈도 객체지향과 마찬가지로 "역할"과 "책임"으로!
  • 테코블 포스팅 - 멀티모듈: 관련 패키지와 리소스들의 재사용 - 장점 1. 코드 중복 줄임 2. 각 모듈 기능 파악 쉬움 3. 빌드를 쉽게 진행 가능 - 프로젝트 내부에 여러 프로젝트 생성하기 - Root Project setting.gradle - 하위 프로젝트 설정을 작성 - 하위 모듈 build.gradle - 기본적으로 gradle build 하면 executable jar 파일 만들기 때문에, 아래 설정 추가해줄 것
    // 설정 부분
    bootJar {
        enabled = false
    }
    
    jar {
        enabled = true
    }
    //
    
          - 의존성 추가해주기 dependencies { `project(:projectPath)` }