리눅스/Window10 Arch Linux

Window 10 ArchLinux Maven과 Gadle

차세대 IT 리더 비공자 2024. 8. 15. 00:41



목록

1. Java 기반의 빌드 자동화 도구

2. Maven프로젝트  POM( Project Object Model )

3. Maven 프로젝트 POM XML 기반 구조

4. Maven 프로젝트 POM 프로파일( Profile )

5. 의존성 관리 

6. 빌드 라이프사이클과 플러그인

7. 다중 모듈 프로젝트

8. CI/CD 통합

 

 

1. Java 기반의 빌드 자동화 도구

Maven과 Gadle은 빌드 자동화 도구로 Java 개발자에게 필수적인 툴입니다.

둘 다 목적은 비슷하지만, 접근 방식, 성능, 확장성 등에서 차이가 있습니다.

여기서는 각 도구의 기술적 세부 사항과 고급 사용 사례에 초점 맞췄습니다.

 

 

2. Maven프로젝트  POM( Project Object Model )

Maven의 핵심은 pom.xml 파일 입니다. 이 파일은 프로젝트의

모든 정보를 담고 있으며, 의존성, 플러그인, 프로젝트 구조 등을 정의 합니다.

POM 파일은 XML형식으로 작성되며 계층 구조를 통해 의존성과 설정을

상속받을 수 있습니다.

 

 

3. Maven 프로젝트 POM XML 기반 구조

Maven의 "pom.xml" 파일은 프로젝트의 근간을 이루며, 모든 빌드 설정과

의존성 관리를 담고 있습니다. POM 파일은 계층 구조로 되어 있어,

상위 프로젝트(POM)가 하위 모듈을 설정을 상속할 수 있습니다.

이를 통해 모듈화된 프로젝트의 관리가 용이해집니다.

 

 

4. Maven 프로젝트 POM 프로파일( Profile )

Maven은 프로파일 기능을 통해 동일한 POM 파일 내에서 다양한 빌드 환경

( 예 : 개발, 테스트, 프로덕션 )을 정의할 수 있습니다. 이는 여러 환경에서

동일한 프로젝트를 다르게 빌드하거나 실행해야 할 때 유용 합니다.

 

 

POM.XML파일 예제

pom.xml파일은 XML 파일 형식으로 이루어져 있습니다.

groupId, Artifact ID, Version ( GAV )

Maven은 프로젝트를 식별하기 위해 GAV를 사용합니다.

Group ID는 조직 또는 그룹을 Artifact ID는 프로젝트 이름을

Version은 프로젝트의 버전을 나타냅니다.

 

 

5. 의존성 관리 

트랜스티브 의존성 

Maven의 핵심 기능 중 하나는 트랜스티브 의존성 관리입니다.

프로젝트에서 직접 명시하지 않은 의존성 

( 예 : 의존성 A가 의존하는 B, C )도 자동으로 처리 됩니다.

이를 통해 의존성 충돌을 방지하고,

필요한 모든 라이브러리가 적절히 포함되도록 합니다.

 

스코프( 범위 )

Maven은 의존성의 스코프( 범위 )를 정의할 수 있습니다.

예를 들어, "compile", "test", "provided", "runtime" 등의

스코프를 사용하여 각 의존성의 사용 시점을 명확히

구분할 수 있습니다.

scope : test

테스트 단계에서만 사용된다는 의미

 

 

6. 빌드 라이프사이클과 플러그인

표준 빌드 라이프사이클

Maven은 "clean", "default", "site"라는 세 가지 주요

빌드 라이프사이클을 제공 합니다.

각 라이프사이클은 여러 단계로 구성되며, 단계별로 실행되는

플러그인을 설정할 수 있습니다. 이 구조는

프로젝트의 일관성을 유지하는 데 중요한 역할을 합니다.

 

 

빌드 설정

build 섹션에서는 Maven 플러그인을 사용하여

빌드 프로세스를 정의 합니다. 여기서는,

"maven-compiler-plugin"을 사용하여

Java 17로 코드를 컴파일 하도록 설정 

( 현재 외부에서 ArchLinux 서버의 OpenJDK-17 사용 )

ArchLinux에 있는 OpenJDK-17을 사용하고 있어서 

Element target is not allowed here 오류가 발생

해결 : 주석 처리 ( 로컬이 아닌 원격 JDK를 사용 )

 

 

고급 사용 사례

프로파일 ( Profile )

환경별로 다른 빌드 설정을 적용하고 싶을 때, 프로파일을 사용할 수 있습니다.

예를 들어, 개발 환경과 프로덕션 환경에 다른 데이터베이스 설정을 사용하려는

경우 입니다.

 

 

7. 다중 모듈 프로젝트

Maven은 대규모 다중 모듈 프로젝트에 적합합니다.

하나의 부모 POM 파일에서 여러 자식 모듈을 정의하고 공통 설정을

상속받아 관리할 수 있습니다.

 

 

8. CI/CD 통합

Maven은 Jenkins, Bamboo 등과 같은 CI/CD 시스템과 잘 통합니다.

"pom.xml"파일에서 빌드 프로세스를 명확히 정의할 수 있기 때문에,

빌드 자동화와 배포 파이프라인을 쉽게 구축할 수 있습니다.

 

 

트랜스티브 의존성 관리

Maven은 A라이브러리가 B라이브러리에 의존하고, B가 C에

의존하는 경우, A만 포함해도 B와 C를 자동으로 관리합니다.

하지만, 이로 인해 의존성 충돌이 발생할 수 있으며,

이를 해결하기 위해 "denpendencyManagement" 섹션을

활용 합니다.