기술 면접(Maven & Gradle)

유요한·2024년 3월 14일
0

기술면접

목록 보기
22/27
post-thumbnail

Maven이란?

메이븐은 자바 프로젝트의 빌드(build)를 자동화 해주는 빌드 툴(build tool)이다. 즉, 자바 소스를 compile하고 package해서 deploy하는 일을 자동화해주는 것이다.

Maven이 참조하는 설정 파일

하나의 자바 프로젝트에 빌드 툴로 maven을 설정했다면, 프로젝트 최상위 디렉토리에 "pom.xml"이라는 파일이 생성되었을 것이다. pom.xml은 POM(Project Object Model)을 설정하는 부분으로 프로젝트 내 빌드 옵션을 설정하는 부분이다. 꼭 pom.xml이라는 이름을 가진 파일이 아니라 다른 파일로 지정할 수도 있다.


Gradle이란?

  • groovy 언어를 사용한 Domain-specific-language를 사용한다. (설정파일을 xml파일을 사용하는 Maven보다 코드가 훨씬 간결)

  • multi-project 빌드를 도울 수 있도록 디자인

  • Gradle은 프로젝트의 어느 task가 업데이트되었는지 체크하기 때문에, 빌드에 점진적으로 추가할 수 있다.

    업데이트가 이미 반영된 빌드의 부분은 더이상 재 실행되지 않는다. (따라서 빌드 시간이 훨씬 단축될 수 있다!)

  • 작업 의존성 그래프 기반이다.

  • Ant와 Maven과 같은 이전 세대 빌드 도구의 단점을 보완하고 장점을 취합하여 만든 오픈소스로 공개된 빌드 도구이며 Gradle은 CI/CD 위한 아래 Task들을 자동화시켜주는 Build Tool이다.

특징

  • 매우 유연한 범용 빌드 도구

  • Maven과 같은 구조화 된 build 프레임워크

  • 멀티 프로젝트 빌드 지원

  • 의존성 관리의 다양한 방법 제공

  • Build Script를 xml이 아닌 Groovy 기반의 DSL(Domain Specific Language)을 사용

  • 기존 Build를 구성하기 위한 풍부한 도메인 모델 제공

  • Gradle 설치 없이 Gradle Wrapper를 이용하여 빌드 지원

장점

  • 직관적인 코드와 자동완성

    Gradle은 Maven이나 Ant 등의 다른 빌드 툴들에 비해 매우 직관적입니다. 특히 Maven 같은 경우는 모든 파일들이 XML로 이루어져 있어서 알아보기 힘듭니다. Gradle은 가독성이 뛰어납니다.

  • 다양한 Repository 사용 가능
  • 각 작업에 필요한 라이브러리들만 가져오는 작업

  • 빌드 속도가 빠름


💡성능

  • Gradle은 작업 의존성 그래프를 기반으로하는 반면 Maven은 고정적이고 선형적인 단계의 모델을 기반

  • 성능 측면에서는 둘 다 다중 모듈 빌드를 병렬로 실행할 수 있지만, Gradle은 어떤 task가 업데이트되었고 안되었는지를 체크하기 때문에 incremental build를 허용

    • 이미 업데이트된 테스크에 대해서는 작업이 실행되지 않으므로 빌드 시간이 훨씬 단축된다.
    • 빌드 설정 규모가 점점 커지면 커질수록, 빌드시간의 차이도 Maven과 비교하여 꽤 격차가 벌어진다.
  • 멀티 프로젝트에서 maven의 경우 특정 설정을 다른 모듈에서 사용하려면 상속을 받아야 하지만 gradle 은 설정 주입 방식을 제공한다.

  • Gradle은 concurrent에 안전한 캐시를 허용

    2개 이상의 프로젝트에서 동일한 캐시를 사용할 경우, 서로 overwrite되지 않도록 checksum 기반의 캐시를 사용하고, 캐시를 repository와 동기화시킬 수 있다

profile
발전하기 위한 공부

0개의 댓글