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