[Spring] 빌드 관리 도구 : Maven과 Gradle

진예·2024년 1월 23일
0

Backend : Spring

목록 보기
2/7
post-thumbnail

💡 빌드 (Build)

소스코드 파일(.java)컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정 및 결과 (코드 → 컴파일 → 링킹 → 빌드)

  • 컴파일 (Compile) : 코드를 컴퓨터가 이해할 수 있는 기계어로 변환하는 과정

  • 링킹 (Linking) : 여러 소스파일실행 가능한 파일(.exe)로 만들기 위해 연결하는 작업

  • 디버깅 (Debugging) : 프로그램 내부에 존재하는 논리적 오류를 찾아내는 작업


🛠️ 빌드 관리 도구 (Build Tool)

빌드 과정자동화하여 관리하는 도구

⭐ 애플리케이션에 필요한 외부 라이브러리자동으로 관리

라이브러리를 개발자가 직접 다운받을 필요 없이, 설정 파일에 필요한 라이브러리의 종류, 버전, 종속성 등의 정보를 명시하면 자동으로 다운로드 + 관리를 수행한다!

스프링 부트 프로젝트를 생성할 때 Gradle Maven 중 하나를 선택할 수 있는데, 이 두 옵션이 대표적인 빌드 관리 도구라고 할 수 있다!


🔨 Maven

Java프로젝트 관리 도구 (Apache Ant의 대안)

✔️ LifeCycle

  1. clean : 이전 빌드에서 생성된 파일 삭제

  2. validate : 프로젝트가 올바른지 확인하고, 필요한 모든 정보를 사용할 수 있는지 확인

  3. compile : 소스코드 컴파일

  4. test : 단위 테스트 수행 → 테스트 실패 시 빌드 실패 (생략 가능)

  5. package : 컴파일 된 소스코드와 리소스들으로 jar, war 등의 배포를 위한 패키지 생성

  6. verify : 통합 테스트 결과가 품질 기준을 충족하는지 확인

  7. site : 프로젝트 문서 생성

  8. deploy : 생성된 패키지를 원격 저장소에 배포

✔️ 설정 파일 : pom.xml

Project Object Model : 프로젝트 정보, 빌드 설정, 빌드 환경, pom 연관 정보 등을 담고 있음

Maven Repository 사이트를 통해서 필요한 라이브러리를 검색하면 관련 정보를 버전 별로 가져올 수 있다!

ex) H2 데이터베이스 2.2.224 버전
: 위 사이트에 접속해서 H2를 검색한 후, 원하는 버전을 선택하여 Maven 탭의 코드를 복사해온 후 pom.xml에 붙여넣으면 끝! (Gradle 코드도 제공한다!)

<!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>2.2.224</version>
    <scope>test</scope>
</dependency>

🔨 Gradle

Java, C/C++, Python 등을 지원하는 범용 빌드 관리 도구

✔️ Groovy

JVM에서 동작하는 스크립트 언어

✔️ LifeCycle

  1. initialization (초기화) : 빌드 대상 프로젝트를 결정하고, 각 프로젝트의 객체 생성 (멀티 프로젝트 지원)

  2. configuration (구성) : 빌드 대상이 되는 모든 빌드 스크립트 실행

  3. Execute (실행) : 구성 단계에서 생성하고 설정된 프로젝트 태스크 중 실행 대상 결정

✔️ 설정 파일 : build.gradle

ex) H2 데이터베이스 2.2.224 버전

// https://mvnrepository.com/artifact/com.h2database/h2
testImplementation group: 'com.h2database', name: 'h2', version: '2.2.224'

❓ Maven vs Gradle

가독성 : Gradle

  • Maven : pom.xml
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-checkstyle-plugin</artifactId>
    <version>2.12.1</version>
    <executions>
        <execution>
            <configuration>
                <configLocation>config/checkstyle/checkstyle.xml</configLocation>
                <consoleOutput>true</consoleOutput>
                <failsOnError>true</failsOnError>
            </configuration>
            <goals>
                <goal>check</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>findbugs-maven-plugin</artifactId>
    <version>2.5.4</version>
    <executions>
        <execution>
            <goals>
                <goal>check</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-pmd-plugin</artifactId>
    <version>3.1</version>
    <executions>
        <execution>
            <goals>
                <goal>check</goal>
            </goals>
        </execution>
    </executions>
</plugin>
  • Gradle : build.gradle
apply plugin:'java'
apply plugin:'checkstyle'
apply plugin:'findbugs'
apply plugin:'pmd'
version ='1.0'
repositories {
    mavenCentral()
}
dependencies {
    testCompile group:'junit', name:'junit', version:'4.11'
}

실행 속도 : Gradle

Gradle은 캐시를 사용하므로, 반복 실행 시 실행 속도가 훨씬 빨라진다!

스크립트 품질 : Gradle

의존성이 늘어날수록 스크립트 품질의 차이가 커진다. Maven은 특정 설정을 다른 모듈에서 사용하려면 상속받아야 하지만, Gradle은 설정 주입 방식을 사용하므로 멀티 프로젝트에 적합하다.


🙇🏻‍♀️ 참고 1 : [Etc]Compile(컴파일) vs Linking(링킹) vs Debugging(디버깅) vs Build(빌드)
🙇🏻‍♀️ 참고 2 : Maven VS Gradle
🙇🏻‍♀️ 참고 3 : Maven과 Gradle의 차이점
🙇🏻‍♀️ 참고 4 : 메이븐(Maven)과 그래들(Gradle)의 개념 및 비교
출처: https://dev-coco.tistory.com/65

profile
백엔드 개발자👩🏻‍💻가 되고 싶다

0개의 댓글