1. Maven이란?
개발 프로젝트를 진행하면 많은 라이브러리를 사용하게 되는데, 이를 일일이 관리하는 것은 매우 어려운 일이다. Maven은 이러한 문제를 해결해주는 도구라고 생각하면 된다. 라이브러리도 해당 라이브러리 기능을 수행하기 위해 또 다른 라이브러리를 필요로 하기도 하는데, 이런것 까지 모두 고려하여 관리해주고, 네트워크를 통해 자동으로 다운받아주는 역할을 한다.
실행을 위해 여러가지 단계를 거치는데 이를 Lifecycle이라고한다.
아마 많이 본 용어일 것이다. 빌드 단계라고 보면 된다.
- Clean: 이전 빌드에서 생성된 파일들을 삭제하는 단계
- Validate: 프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는지 확인하는 단계
- Compile: 프로젝트의 소스코드를 컴파일하는 단계
- Test: 유닛 테스트를 수행하는 단계
- Package: 실제 컴파일된 소스 코드와 리소스들을 jar등의 배포를 위한 패키지로 만드는 단계
- verify: 통합테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인하는 단계
- Install: 패키지를 로컬 저장소에 설치하는 단계
- Site: 프로젝트 문서를 생성하는 단계
- Deploy: 만들어진 Package를 원격 저장소에 release하는 단계
1-1 ) POM (pom.xml) 이란?
pom은 Project Object Model의 약자로 프로젝트의 정보를 담고있는 파일이다. 이 파일에서 주요하게 다루는 기능들이다.
- 프로젝트 정보: 프로젝트의이름, 개발자 목록, 라이센스 등
- 빌드 설정: 소스, 리소스, 라이프 사이클 별 실행한 플러그인 등
- 빌드 환경: 사용자 환경 별로 달라질 수 있는 프로파일 정보
- POM 연관 정보: 의존 프로젝트, 상위 프로젝트 등
ex.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.blidkaga.group</groupId>
<artifactId>group-test</artifactId>
<name>test</name>
<packaging>war</packaging>
<version>1.0.0-SNAPSHOT</version>
</project>
<properties>
<java-version>1.6</java-version>
<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${org.springframework-version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
참고) https://wikidocs.net/18340
2. Gradle이란?
Gradle이란 기본적으로 빌드 배포 도구이며, 안드로이드 앱의 공식 빌드 시스템이다. JAVA, C/C++, Python 등을 지원하고 있다.
메이븐은 XML로 라이브러리를 정의하고 활용하도록 되어 있으나, Gradle의 경우 별도의 빌드 스크립트를 통하여 사용할 어플리케이션의 버전, 라이브러리 등의 항목을 설정할 수 있다.
2-1 ) POM (pom.xml) 이란?
ex.
plugins {
id 'org.springframework.boot' version '2.7.5'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
id 'java'
id 'war'
}
war {
baseName("elasticsearch-api")
}
group = 'com.tree'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
}
tasks.named('test') {
useJUnitPlatform()
}
bootWar.enabled = false
war.enabled = true
jar.enabled = false
2-2 ) 장점
- 빌드 속도가 Maven에 비해서 10 ~ 100배 빠르다.
- Groovy 스크립트 언어로 구성되어 있기에 XML과 달리 변수 선언, if, else, for 등이 로직이 구현 가능하고 훨씬 간결하다.
- maven의 경우 멀티 프로젝트에서 특정 설정을 다른 모듈에서 사용하려면 상속을 받아야하지만, gradle은 설정 주입 방식을 사용하기 때문에 멀티 프로젝트에 매우 적합하다.
'Backend Study > Server' 카테고리의 다른 글
가상 네트워크의 종류 (NAT, Host-only, Bridged) (1) | 2023.11.22 |
---|---|
도커란 무엇일까? (0) | 2023.11.17 |
[Git] 로컬 혹은 fork한 레포 upstream과 동기화하기 (0) | 2023.02.14 |
[리눅스] 용량부족 해결 (0) | 2023.02.05 |
다른 계정의 RDS 스냅샷으로 마이그레이션하기 (0) | 2023.01.15 |