Back-end/Build (Gradle, Maven)

Gradle 다시 보기 (정리중)

philo0407 2023. 9. 10. 23:56

 

 

최근에 회사에 n단계 depth에 걸친 gradle이 있어서 여러 고민에 있다

 

아래에 예시로 둔 프로젝트가 있다

 

이 상황을 가정해서 한 번 진행하고자 한다

 

https://github.com/progress0407/multi-module-gradle-project

 

GitHub - progress0407/multi-module-gradle-project: 멀티 모듈 프로젝트 연구 및 연습용 리포지토리

멀티 모듈 프로젝트 연구 및 연습용 리포지토리. Contribute to progress0407/multi-module-gradle-project development by creating an account on GitHub.

github.com

 

task: 하나의 빌드 작업

 

plugin: task들이 묶여서 사용자가 편히 쓸수 있도록 한것

 

subprojects: 하위 모듈들 전부

 

allprojects: subprojects + root proejct

 

gradle이 maven보다 빠른 이유?

- 점진적으로 빌드함 (이전 내용을 캐싱)

  - 이미 빌드한게 있으면 하지 않음

- 데몬 프로세스가 돌아가면서 캐싱

거의 모든 시나리오에서 최소 2 ~최대 100 maven보다 빠르다

 

implementaion: 자신을 의존하는 모듈에게만 영향

api: 자신을 의존하는 모듈과 그 모듈을 의존하는 모듈들에게도 영향

 

java-library plugin: 위 api 기능을 사용하려면 해당 plugin을 사용해야 한다

 

Gradle Daemon

Gradle 명령어를 사용하기 위한 JVM이 백그라운드 프로세스로 항상 떠 있는 것

이 덕분에 항상 빠르게 gradle 을 실행할 수 있다 (또 메모리 캐시 등으로 task 등을 캐싱한다고 한다)

 

Build Tool 선택: intelliJ vs Gradle

속도 상은 intelliJ가 빠른데.. 몇몇 기능이 안될수있다

프로젝트가 조금만 복잡해져도 Gradle로 가는게 좋다고 생각한다

 

QueryDsl 동작 이해

@Entity 혹은 @QueryProjections이 부착된 클래스 대상으로

Q Class File을 미리 컴파일하고 특정 패키지로 몰아 넣는다

그리고 해당 패키지를 참조할 수 있는 설정이 gradle script에 있다면, 해당 File들을 import할 수 있다

이런 방식으로 동작한다

 

Lombok 동작 이해

사실 이 부분은 잘 이해되지 않았다

class 파일로 빌드하기 전에, 미리 compile한 것처럼 보여주는 것 같다

annotation processor 부분을 이해하면 될텐데... 쉽게 이해되지 않았다

compile build 위치가 아닌, 특정 메모리 영역에 기억을 시키고 실시간으로 load하는 것처럼 보이긴 했다...

 

tool-chain

이 기능을 이용하면 dev-ops할때 유용하다고 바로 생각했다

프로젝트마다 다른 Java파일을 미리 설치하지 않고 그때그때 마다 실행할 수 있게 도와준다

예를 들면 프로젝트 a는 jdk 8, c는 17이면 두 jdk가 필요하지만 tool-chain 설정을 하면

미리 위 두 jdk 가 없어도 즉시 다운로드 + 세팅되어서 java 명령어를 실행할 수 있다

 

 

 

 

참고한 글들

https://techblog.woowahan.com/2637/

 

멀티모듈 설계 이야기 with Spring, Gradle | 우아한형제들 기술블로그

{{item.name}} 멀티 모듈 설계 이야기 안녕하세요. 배달의민족 프론트 서버를 개발하고 있는 권용근입니다. 멀티 모듈의 개념을 처음알게 되었을 때부터 현재까지 겪었던 문제점들과 그것을 어떻게

techblog.woowahan.com

https://mangkyu.tistory.com/296

 

[Gradle] Gradle Java 플러그인과 implementation와 api의 차이

이번에는 Gradle(그레이들)이 제공하는 Java 플러그인과 implementation와 api의 차이에 대해 알아보도록 하겠습니다. 1. Gradle Java 플러그인, Java-Library 플러그인 [ Java 플러그인이란? ] Gradle(그레이들)에서

mangkyu.tistory.com

 

https://mangkyu.tistory.com/304

 

[Server] 멀티 모듈을 설계하는 관점과 고려사항 with Spring & Gradle

이번에는 유지보수하기 좋은 멀티 모듈 구조를 설계하는 기준과 그에 따른 고려사항에 대해 알아보도록 하겠습니다. 아래의 내용은 절대적인 기준이 아니며, 상황에 따라 달라질 수 있음을 참

mangkyu.tistory.com