개린이 탈출기

[JAVA] Gradle 구동 과정 간단 정리 본문

에러 해결 목록

[JAVA] Gradle 구동 과정 간단 정리

yooverd 2024. 11. 5. 14:36
728x90
반응형
SMALL

개요

학원에서 자바 프로그램을 만들 때는 그냥 학원에서 정해준 빌드도구를 가지고 수업시간에 사용한 build 파일들을 생각없이 복사해서 프로젝트를 만들었었다.

그리고 회사에 와보니 하나의 프로젝트에 여러 개의 모듈이 존재했고, 각 모듈이 빌드 파일을 갖고 있었는데, 그 당시에는 주어진 업무를 처리하는데 급급하여 프로젝트의 구조나 Gradle 이 자바 프로젝트를 빌드하고 실행하는 과정에 대해서는 큰 관심을 줄 수 없었다.

지금 약간의 시간이 남게 되어 Gradle 이 어떻게 자바 프로젝트를 읽고 빌드하고 실행하는지 그 과정을 가볍게 정리하며 공부해보고자 한다.

 

따로 기입하지 않은 출처는 모두 Chat GPT 에게 질문한 결과 혹은 업무를 하며 회사 선임님들이 알려주신 정보에서 나온 것이다.

 


 

가정. 모듈이 존재하는 프로젝트

우선 하나의 프로젝트에 여러 개의 모듈이 존재할 수 있다!

본 글에서는 자바 프로젝트가 3개의 모듈 (boot, feature, shared)로 이루어져있고 boot 모듈이 feature 모듈에 의존성을 갖고 있으며, boot 모듈에서 프로젝트를 실행시킬 것으로 가정한다.

 

 

1. 프로젝트 구조

따라서 프로젝트의 구조는 다음과 같이 이루어져 있을 것이다.

target-project/
├── settings.gradle
├── build.gradle
├── boot/
│   └── build.gradle
├── feature/
│   └── build.gradle
└── shared/
    └── build.gradle

 

2. settings.gradle 스캔

settings.gradle 파일은 프로젝트 내 단 하나만 존재한다.

Gradle 은 초기화 단계에서 settings.gradle 파일을 통해 프로젝트의 구조와 설정을 읽어내기 때문에 최상위 루트에 하나의 파일만 존재하야 한다.

 settings.gradle 애 들어가는 내용은 상황에 따라 다르겠지만, 기본적으로 루트 프로젝트의 이름과 모듈이 있다면 어떤 모듈이 포함되는지 정의되어 있을 것이다.

rootProject.name = 'target-project'
include 'boot', 'feature', 'shared'

 

3. 루트 build.gradle 을 읽고 공통 의존성과 설정 정의

build.gradle 에는 의존성 혹은 플러그인을 설정해놓는 파일이다.

루트의 build.gradel 이니 모든 모듈이 공통적으로 사용하는 의존성이나 설정을 이곳에 정리해놓는 것이 추후 관리에 용이하다.

allprojects {
    apply plugin: 'java'
    version = '1.0.0'
    
    repositories {
        mavenCentral()
    }
}

subprojects {
    dependencies {
        // 공통 의존성 (예: 로깅 라이브러리)
    }
}

 

4. 각 모듈의 build.gradle 을 필요에 따라 스캔

위의 가정에 따라 boot 모듈에서 프로젝트가 실행될 것이다.

따라서 Gradle 은 boot 모듈의 build.gradle 을 우선 스캔할 것이다.

dependencies {
    api project(':feature')
	implementation("org.springframework.boot:spring-boot-starter-web:${springBootVersion}")
}

apply plugin: 'application'
mainClassName = 'com.example.boot.MainApplication' // boot 모듈의 메인 클래스 지정

 

 

이 때, boot 모듈의 build.gradle 을 살펴보면, feature 모듈에 의존성이 있으므로 그 다음 순서로 feature 모듈의 build.gradle 을 읽게 될 것이다.

 

5. 프로젝트 실행

gradle boot:run

Gradle 명령어를 통해 boot 모듈이 실행된다.
이 단계에서 이 전까지 읽은 설정들을 토대로 컴파일 및 실행이 모두 수행된다고 생각하면 될 것 같다.

 


 

마치며

과정 중간중간이 굉장히 많이 생략된 상태에서 아주 러프한 과정만 정리한 느낌이다.

중간중간 자세하게 찾아보기도 하였으나, 깔끔하게 정리하기에는 아직 지식에 구멍이 너무 많고 혼자서 하나의 프로젝트를 온전하게 구성해본 경험이 없어서인지 머릿속에 그림이 잘 그려지지 않았다.

그래도 최소한 어렴풋이 상상했던 흐름을 간결히 정리해내서 이 흐름이 조금이나마 명확해진 듯한 느낌이 든다.

다음 번에는 각 모듈들이 어떻게 유기적으로 엮여있는지 구체적인 코드를 살펴보고 싶어진다.

728x90
반응형
LIST