소스코드 파일(
.java
)을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정 및 결과 (코드 → 컴파일 → 링킹 → 빌드)
컴파일 (Compile) : 코드를 컴퓨터가 이해할 수 있는 기계어로 변환하는 과정
링킹 (Linking) : 여러 소스파일을 실행 가능한 파일(.exe
)로 만들기 위해 연결하는 작업
디버깅 (Debugging) : 프로그램 내부에 존재하는 논리적 오류를 찾아내는 작업
빌드 과정을 자동화하여 관리하는 도구
⭐ 애플리케이션에 필요한 외부 라이브러리를 자동으로 관리
라이브러리를 개발자가 직접 다운받을 필요 없이, 설정 파일에 필요한 라이브러리의 종류, 버전, 종속성 등의 정보를 명시하면 자동으로 다운로드 + 관리를 수행한다!
스프링 부트 프로젝트를 생성할 때 Gradle과 Maven 중 하나를 선택할 수 있는데, 이 두 옵션이 대표적인 빌드 관리 도구라고 할 수 있다!
Java용 프로젝트 관리 도구 (Apache Ant의 대안)
clean
: 이전 빌드에서 생성된 파일 삭제
validate
: 프로젝트가 올바른지 확인하고, 필요한 모든 정보를 사용할 수 있는지 확인
compile
: 소스코드 컴파일
test
: 단위 테스트 수행 → 테스트 실패 시 빌드 실패 (생략 가능)
package
: 컴파일 된 소스코드와 리소스들으로 jar
, war
등의 배포를 위한 패키지 생성
verify
: 통합 테스트 결과가 품질 기준을 충족하는지 확인
site
: 프로젝트 문서 생성
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>
Java, C/C++, Python 등을 지원하는 범용 빌드 관리 도구
JVM에서 동작하는 스크립트 언어
initialization
(초기화) : 빌드 대상 프로젝트를 결정하고, 각 프로젝트의 객체 생성 (멀티 프로젝트 지원)
configuration
(구성) : 빌드 대상이 되는 모든 빌드 스크립트 실행
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'
✅ 가독성 : Gradle
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>
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