Gradle

Gradle의 의존성 충돌(Dependency Conflict) 관리 전략

0. 문제 애플리케이션의 규모가 커질수록 많은 의존성을 정의하게 되고, 의존성들이 많아질수록 보이지 않는 의존성의 충돌이 잦아지기 마련입니다. 예를 들어, 아래 두 개의 의존성을 살펴보겠습니다. implementation("com.google.guava:guava:20.0") // [1] implementation("org.apache.hadoop:hadoop-common:2.7.4") // [2] [1] guava는 구글에서 제공하는 Java 라이브러리 집합으로, 컬렉션이나 해시, 문자열 처리 등을 위한 다양한 기능을 제공합니다. 여기서는 버전 20.0으로 선언했습니다. [2] 다음으로 hadoop-common 2.7.4 버전 의존성을 정의했습니다. hadoop-common 라이브러리는 Hadoop 공..

2023.07.06 게시됨

Gradle

Maven 기반 멀티 모듈 프로젝트, Gradle로 전환하기

최근 꽤 큰 리소스를 들여 팀의 빌드 툴을 Maven에서 Gradle로 전환하는 작업을 했습니다. Maven을 기반으로 운영하고 있던 멀티 모듈 프로젝트는 빌드 시간도 오래 걸렸고, XML 방식의 의존성 설정이나 플러그인 등은 프로젝트를 운영하는 데 복잡성을 증대시킨다고 생각했기 때문인데요. 이번 글에서는 빌드 툴을 Gradle로 전환했던 전반적인 과정과 Gradle을 더 제대로 사용하기 위해 알아야 할 몇 가지 내용을 소개하려고 합니다. 1. Why gradle? 왜 Maven에서 Gradle로 빌드 툴을 전환해야 하는가? 에 대한 답은 "가독성 + 빠른 빌드 + 다양한 기능 제공"에 있다고 생각합니다. 실제로 저희 프로젝트 중 하나의 프로젝트를 Gradle로 전환했을 때 결과입니다. ... [INFO..

2023.05.21 게시됨

Gradle

Gradle에서src/main/java에 위치한 XML 파일 빌드하기

0. 문제 Mybatis를 사용하면 Mapper 인터페이스와 Mapper.xml 파일을 생성해야 합니다. 그리고 일반적으로 Mapper.xml 파일은 XML 설정 파일 분류이기 때문에 resources 하위에 위치시키는데요. 하지만 그렇게 되면 아래 사진과 같이 메서드를 정의한 Mapper 인터페이스의 패키지와 실제 쿼리가 정의된 XML 파일의 패키지가 멀리 떨어져(?) 있게 되어 도메인 개발에서 불편함을 겪게 됩니다. 이러한 불편함을 해소하기 위해 저희 팀에서는 src > main > ... > repository 하위에 Mybatis 인터페이스와 XML 파일을 같이 정의해두고 있습니다. 그런데, 여기서도 문제가 하나 있습니다. Gradle CompileJava 작업에서 기본적으로 'src > main..

2023.05.13 게시됨

Gradle

Gradle 기반 멀티 모듈 프로젝트를 관리하는 방법

0. Gradle 멀티 모듈 프로젝트 이번 글에서는 Gradle 기반 멀티 모듈 프로젝트 관리에 대해 소개하려고 합니다. 많은 회사들에서는 아래와 같은 구조의 멀티 모듈 프로젝트를 사용합니다. 멀티 모듈로 프로젝트를 구성하지 않으면 여러 가지 기능이 한 데 묶인 거대한 프로젝트 하나를 관리하는 데 너무 많은 리소스가 들어가기 때문입니다. - root - core - ... - api - ... - async - ... - batch - ... - admin - ... ... 특히 core 모듈 안에는 api, async, batch, admin 등에서 끌어다쓰는 공용 클래스가 다수 존재하도록 설계되는 경우가 많습니다. 한편, Gradle은 이런 상황에서 개별 모듈에 대한 의존성을 관리하는 동시에 모듈 ..

2023.04.29 게시됨