ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Build System] IntellJ / Maven / Gradel 비교
    SCM & Preferences/Build & Deploy & Etc .. 2023. 3. 7. 16:04

    평상시에 일할 때 셋팅이 되어있는 프로젝트를 받거나,

    받더라도 정상적으로 실행이 안됐을 때

    뭐가 문제인가 열심히 구글링하면서 pom.xml 같은 파일들을 뒤적이곤 했던 것 같다.

    그런데 매번 드는 생각이었지만.. 이게 어떤 역할을 하는지 어떻게 작동하는지 의문이었지..

    정확히 그런 파일들에 대해서 정리를 하기..전에!

    일단 Build 란 것에 대해서, 그리고 Build System 들에 대해서 한 번 정리해보려한다.

     

    📌 Build

    소스 코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정과 그 결화를 말한다.

    예를 들어 Java Project 를 진행한다면 개발자가 작성한 A.java 와 여러가지 정적 파일등에 해당하는 resource 가 존재한다.

    Build 를 한다면 소스코드를 Compile 해서 .class로 변환하고 resource 를 .class 에서 참조할 수 있는 적절한 위치로 옮기고

    META-INF/MANIFEST.MF 들을 하나로 압축하는 과정을 의미한다.

    Compile 은 Build 의 한 부분이라고 생각하면 된다. 또한, 이 빌드 과정을 도와주는 도구를 Build Tool 이라고 한다.

    즉, 컴파일 된 코드를 실제 실행할 수 있는 상태로 만드는 일을 Build 라는 개념으로 생각하면 된다.

     

    [ + Compile / Compiler ]

    Compile : 쉽게 말해 사람이 작성한 언어를 컴퓨터가 이해할 수 있는 언어로 바꾸어 주는 과정이다.

    Compiler : 개발자가 작성한 Source ( 고급 프로그래밍 언어 )를 실행 프로그램으로 만들기 위해 저급 프로그래밍 언어로 바꾸는 것이다.

     

    개발자가 작성한 소스는 A.java 의 파일 형태를 띄며,

    이것을 컴파일 할 경우 A.class 파일로 바뀌어 컴퓨터가 이해할 수 있는 파일이 된다.

     

    [ + Manifest,  META-INF/MANIFEST.MF ]

    ✔ Manifest 란 ?

    응용프로그램은 구성 요소를 시작하기 전에 Manifest 를 읽어서 존재한다는 사실을 알아야 한다.

    Manifest 에는 이러한 각종 구성요소의 정보들 및 선언들이 담겨 있다.

     

    즉, 확장자가 사용할수 있는 기능과 확장 앱에 대한 정보를 제공한다.

     

    ✔ META-INF/MANIFEST.MF

    Manifest 파일은 패키지 된 jar 파일에 대한 정보를 포함하고 있는 특별한 파일이다.

    이러한 메타 정보를 가진 Manifest 파일은 다양한 목적으로 사용된다.

     

     

    [Java 기초 #4] JAR Manifest file 기본

    JAR의 Manifest file 활용 Manifest 파일 활용 : 기초 JAR 파일은 내부의 manifest 파일을 활용하여 다양한 기능을 지원 (ex. 전자서명, 버전관리, 패키징 등) manifest 파일은 JAR 파일에 패키징된 파일들에 대한

    tlo-developer.tistory.com

     

    📌 Build Tool

    Build 에서는 Compile, Test, Deploy 등 과정이 포함될 수 있고, Build 과정을 도와주는 도구를 Build Tool 이라고 한다.

    일반적으로 Build Tool 이 제공해주는 기능으로는 Preprocessing, Compile, Packaging, Testing, Distribution 이 있다.

    대표적인 Build Tool 로는 Ant, Maven, Gradle 등이 있다.

     

    📌 Maven

    전통적인 빌드 툴이다. 시작은 Apache ANT 의 대안으로시작되었으며, Java Project 의 전체적인 관리를 가능하게 함과 동시에 많은 편리함과 이점을 제공해 줘 널리 사용되었다.

    Project Object Model 을 관리하는 pom.xml 파일을 사용하며 개발자가 해당 파일에 사용할 라이브러리를 정의해두면 정의된 라이브러리뿐 아니라 그 라이브러리를 사용하는데 필요한 종속된 다른 라이브러리까지 관리해 자동으로 다운로드하여 사용할 수 있게 해준다.

    빌드 동작 방식이 미리 정해져 있으며 라이프사이클에 의해 순서에 맞게 동작한다.

     

    [ + Pom.xml ]

     정의

    Maven 의 빌드 정보를 담고 있는 파일로이다.

    POM(Project Object model) 을 설정하는 부분으로 프로젝트 내 빌드 옵션을 설정하는 부분이다.

    범용성이 좋고, 협업 및 공유 등 버전을 통일하기에 편리하다.

     

      태그

    < project > Maven 의 Xml Namespace 를 지정
    < modelVersion > Maven 의 model Version
    < groupId > Group ID 태그
    < artifactId > Artifact ID 태그
    < version > Version명 태그
    < packaging > Packaging 형식을 지정하는 태그
    < name > Project 의 이름
    < url > Maven 의 URL
    < properties > Project 의 관련속성
    < parent > pom.xml 의 상속에 관련된 태그
    < dependencies > Project 가 의존하는 Library 들의 정보
    < dependency > Project 의 Library 를 정의하는 태그
    - < groupId > Library 의 Group ID
    - < artifactId > Library 의 Artifact ID
    - < version > Library 의 Version
    - < scope > Library 가 Project 내에서 사용되는 범위

    📌 Gradle

     

    Gradle 역시 Build Tool 이다. Maven 보다 늦게 나왔으며, Gradle 은 기존 ANT 와 Groovy 기반으로 구축되어 기존의 ANT 역할과 배포 기능 모두 지원한다.

    Gradle 은 늦게 만들어진 만큼 Maven 에 비해 더 나은 사용성과 성능을 제공한다.

    안드로이드 앱의 공식 빌드 시스템이기도 하며 Java, C/C++, Python 등 다양한 언어에 대한 빌드를 지원하고 있다.

    Maven 과 달리 build.gradle 파일을사용하며 Maven 과 동일하게 개발자가 사용할 라이브러리를 정의할 수 있다.

    Gradle 역시 정의된 라이브러리 뿐 아니라 그에 종속된 다른 라이브러리들 또한 관리해준다.

     

    [ + ANT (Apache Ant) ]

    자바 기반의 Build Tool 로 빌드 파일은 xml 문서의 구조이며 Ant 가 작업을 수행할 프로젝트에 대한 정보를 담고 있다.

     

     

    [ + Groovy ]

    Apache 재단에서 개발된 동적 객체 지향 프로그래밍 언어이다.

    JVM 에서 실행되는 스크립트 언어이며 문법이 Java 와 가깝다.

    Java 와 호환이 되며 Java 클래스 파일을 그대로 Groovy 클래스로 사용할 수 있다.

     

    😐 " .xml 파일과 같은 역할을 Java 언어로 한다고 생각했음.."

     

    [ + Maven vs Gradle ]

    사실 두 빌드 시스템은 자주 비교되고는 한다. 성능과 편의성면에서는 당연히 나중에 나온 Gradle 이 앞선다.

     

    당장 라이브러리를 관리하는 것으로만 따져도 Maven 은 xml, Gradle 은 Groovy를 사용하여

    라이브러리가 많아질수록 관리적 측면과 가독성이 차이나게 된다.

    심지어 Groovy 를 사용해 개발자가 직접 스크립트를 작성하고 빌드를 커스텀할 수 있으며, 플러그인을 호출할 수도 있다.

     

    성능 면에서도 클린 상태는 두배 가량, 캐싱된 상태에서는 최대 100배까지 차이가 발생한다.

     

    그러나 아이러니하게도 Maven 의 사용량이 훨씬 많다.

    😮 " 둘 다 배워보고 싶은 호기심이 뿜뿜한다'

     

    📌 IntelliJ

    IntelliJ 에서 제공하는 독자적인 빌드 방식이다.

     

    IntelliJ 빌드 시스템은 자체 빌드 메커니즘으로 단순하게 프로젝트의 모든 수정 내용과 종속 파일을 컴파일하는 기능이다.

    여기서 문제는 수정 내용과 종속된 파일만 빌드한다는데 있다. 안타깝게도 Maven, Gradle 과 달리 순수하게 빌드를 수행한다. 그로 인해 Artifact 생성, Repository 배포, CodeGen 과 같은다른 작업은 수행하지 않는다.


    Reference.

    Build 란?

    https://choseongho93.tistory.com/296

    Build System 비교

    https://smoh.tistory.com/467

    https://cheershennah.tistory.com/192

     

    댓글

Designed by IT's H.H.