[ Ant, maven, gradle ]

carrotsman·2023년 1월 22일
1

백엔드

목록 보기
4/6
post-thumbnail

빌드 도구

빌드 도구는 소스코드에서 어플리케이션 생성을 자동화 하기 위한 프로그램이다. 빌드 과정을 자동화하여 관리하는 기능을 하기 때문에 빌드 관리 도구 또는 빌드 자동화 도구로 불린다.

빌드란 컴파일 및 패키징 과정을 통해 배포 및 실행 가능한 형태로 변환하는 것을 뜻한다. 빌드 도구는 말그대로 앞서 설명한 빌드 기능을 자동화해주는 도구다. target, 순서, 각 의존성 등 프로젝트의 속성 값을 일관되게 유지하고 빌딩하기 위해서 무조건 필요하다.


사용하는 이유

앱 개발이 발전하면서 필요한 라이브러리들도 많아지게 되었다. 그 많은 라이브러리를 직접 다운받아서 추가하여 사용하는 방법도 있지만 많은 번거로움이 따르게 된다. 이 때문에 빌드 도구를 사용한다.

  1. 종속성 다운로드 (라이브러리 자동 추가 및 관리)
  2. 소스코드 > 바이너리 코드 컴파일
  3. 테스트 자동화
  4. 프로덕션 환경 배포 자동화

빌드와 컴파일

난 병아리 개발자 시절, 빌드와 컴파일이 거의 동일한 개념이라고 생각했다. 빌드가 컴파일보다 조금 큰 개념이라는 정도로 이해했다. 이 글에서 이 둘의 개념을 정확히 짚고 넘어가야될 것 같다.

  1. 컴파일
    컴파일이란 개발자가 작성한 소스코드를 바이너리 코드로 변환하는 과정을 말한다. (목적파일이 생성됨)
    즉, 컴퓨터가 이해할 수 있는 기계어로 변환하는 작업으로 자바의 경우, 자바가상머신(JVM)에서 실행가능한 바이트코드 형태의 클래스파일이 생성이 된다.

  2. 링크
    프로젝트를 진행하다 보면 소스파일이 여러 개가 생성이되고 A라는 소스파일에서 B라는 소스파일에 존재하는 함수를 호출하는 경우가 있다. 이때 A와 B를 연결해주는 작업이 필요한데 이 작업을 링크라고 한다.
    여러개로 분리된 소스파일들을 컴파일한 결과물들에서 최종 실행가능한 파일을 만들기 위해 필요한 부분을 찾아서 연결해주는 작업이다. 링크는 정적링크(static link)와 동적링크(dynamic link)가 있는데
    정적링크란 컴파일된 소스파일을 연결해서 실행가능한 파일을 만드는 것이고, 동적링크란 프로그램 실행 도중 프로그램 외부에 존재하는 코드를 찾아서 연결하는 작업을 말한다. 자바의 경우, JVM이 프로그램 실행 도중 필요한 클래스를 찾아서 클래스패스에 로드해주는데 이는 동적링크의 예다.

  3. 빌드
    소스코드 파일을 실행가능한 소프트웨어 산출물로 만드는 일련의 과정을 말한다.
    빌드의 단계 중 컴파일이 포함이 되어 있는데 컴파일은 빌드의 부분집합이라 할 수 있다.
    빌드 과정을 도와주는 도구를 빌드 툴이라 한다.

즉 컴파일이란 빌드 과정 중 하나다.


빌드 도구 종류

빌드 도구도 많은 변화가 있었다. 초기에 Ant 빌더부터 시작해서 maven, 이후 gradle이 출시되었다. 각 단점들을 보완해서 나왔지만 내눈엔 그놈이 그놈이다. 다불편하노!

  • make는 써본적도, 존재도 몰랐음 (몰라도 된다는 얘기임 ㅇㅈ?)

Ant (Another Neat Tool)

아파치 앤트는 자바 프로그래밍 언어에서 사용하는 자동화된 소프트웨어 빌드 도구이다. 유닉스나 리눅스에서 사용되는 make와 비슷하나 자바언어로 구현되어 있어 자바 실행환경이 필요하며 자바 프로젝트들을 빌드하는데 표준으로 사용된다.

Ant 빌더로 불리는 개미색기다. 상당히 징그럽지만 빌드 도구로써의 목적 만을 두고 출시된 만큼 상당히 널리 사용됬었다. 많이 사용된 만큼 웬만한 IDE에는 기본적으로 탑재되어 있다.

장점

  1. 간단하고 사용하기 쉽다. (XML 기반 스크립트)
  2. 규칙이 없다. (장점 맞냐?)
  3. Ant의 하위 프로젝트인 Apache lvy를 통해 의존성 관리가 가능하다.

단점

  1. Ant를 사용하여 프로젝트를 빌드하는 개발자가 모든 명령을 스스로 작성해야 한다.
  2. 한 눈에 이해하기 어려워 유지 보수 및 재사용이 어렵다.
  3. 기본적으로 라이브러리 의존 관계 관리 구조가 존재하지 않는다.
  4. Remote Repository를 제공하지 않는다.

Maven

아파치 메이븐은 자바 프로젝트들을 위한 빌드 자동화 도구이다. 메이븐은 C 샤프, 루비, 스칼라 등의 언어로 개발된 프로젝트들을 빌드하고 관리하기 위해 사용할 수도 있다.

우리 국비지원충들의 영원한 친구 maven이다. maven 이전에 사용되었던 빌드 도구인 Ant는 빌드 도구로만 이용이 되었는데, 빌드 + 자동 라이브러리 관리 기능이 추가된 maven이 등장하게 된다.

장점

  1. Ant에 빌드 생명 주기(lifecycle)개념을 추가했다.
  2. 네트워크를 통해서 라이브러리들을 자동으로 다운로드 해준다.
  3. 의존관계를 자동으로 관리해준다.
  4. 계층적이며 규칙성을 제공한다. (pom.xml 파일을 통해 관리)

단점

  1. Ant에 비해 엄격한 구조를 갖는다.
  2. 사용자 지정 빌드 스크립트 작성이 어렵다.

Gradle

Gradle은 그루비를 이용한 빌드 자동화 시스템이다. Groovy와 유사한 도메인 언어를 채용하였으며, 현재 안드로이드 앱을 만드는데 필요한 안드로이드 스튜디오의 공식 빌드 시스템이기도 하다. Java, C/C++, 파이썬 등과 같은 여러 가지 언어를 지원한다.

드디어 킹갓제너럴 gradle이다. Groovy 기반 DSL(Domain-Specific Language)로 작성된 빌드 도구이며 가장 마지막에 출시된 만큼 Ant와 Maven의 장점들만 뽑아 만들었다.

장점

  1. 빌드 자동화 구조를 띈다.
  2. Java, C/C++, 파이썬 등과 같은 여러 가지 언어를 지원한다.
  3. Build-by-convention을 바탕으로 한다. (스크립트 규모가 작고 읽기 쉬움)
  4. Maven보다 빌드가 빠르다.

단점

  1. Groovy 문법을 익혀야한다.
  2. 프로그램 자체가 메모리를 많이 차지한다.

Groovy

그루비(Groovy)는 자바에 파이썬, 루비, 스몰토크 등의 특징을 더한 동적 객체 지향 프로그래밍 언어이다.

솔직히 개발자면 대충 보면 뭔 뜻인지 안다.


정리하며

오늘은 빌드의 개념과 자동화 도구들의 종류, 장/단점에 대해 알아봤다. spring에 대해 처음 공부했을때 maven으로 시작했던 입장으로 maven이 익숙하긴 하지만 간지나는 척을 하기 위해 토이프로젝트에선 gradle을 사용 중이다. 보통 대체될 만한 기술이 나온 경우 그 이전 기술은 사장되기 마련이다. 이 업계에서 롱런하기 위해선 gradle은 필수적으로 학습해야 될 것 같다.

오늘 저녁은 떡국이다. 🥕


참고 : https://min-0.tistory.com/entry/%EB%B9%8C%EB%93%9C%EB%8F%84%EA%B5%ACBuild-Tools%EB%9E%80-Maven-Gradle-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EC%9E%A5%EB%8B%A8%EC%A0%90spring-build-tools
https://doing7.tistory.com/56
https://jaeho214.tistory.com/27
https://jasonyoo.tistory.com/146
https://cornswrold.tistory.com/565?category=806549

profile
당근먹고 강력한 개발

0개의 댓글