빌드 도구는 소스코드에서 어플리케이션 생성을 자동화 하기 위한 프로그램이다. 빌드 과정을 자동화하여 관리하는 기능을 하기 때문에 빌드 관리 도구 또는 빌드 자동화 도구로 불린다.
빌드란 컴파일 및 패키징 과정을 통해 배포 및 실행 가능한 형태로 변환하는 것을 뜻한다. 빌드 도구는 말그대로 앞서 설명한 빌드 기능을 자동화해주는 도구다. target, 순서, 각 의존성 등 프로젝트의 속성 값을 일관되게 유지하고 빌딩하기 위해서 무조건 필요하다.
앱 개발이 발전하면서 필요한 라이브러리들도 많아지게 되었다. 그 많은 라이브러리를 직접 다운받아서 추가하여 사용하는 방법도 있지만 많은 번거로움이 따르게 된다. 이 때문에 빌드 도구를 사용한다.
난 병아리 개발자 시절, 빌드와 컴파일이 거의 동일한 개념이라고 생각했다. 빌드가 컴파일보다 조금 큰 개념이라는 정도로 이해했다. 이 글에서 이 둘의 개념을 정확히 짚고 넘어가야될 것 같다.
컴파일
컴파일이란 개발자가 작성한 소스코드를 바이너리 코드로 변환하는 과정을 말한다. (목적파일이 생성됨)
즉, 컴퓨터가 이해할 수 있는 기계어로 변환하는 작업으로 자바의 경우, 자바가상머신(JVM)에서 실행가능한 바이트코드 형태의 클래스파일이 생성이 된다.
링크
프로젝트를 진행하다 보면 소스파일이 여러 개가 생성이되고 A라는 소스파일에서 B라는 소스파일에 존재하는 함수를 호출하는 경우가 있다. 이때 A와 B를 연결해주는 작업이 필요한데 이 작업을 링크라고 한다.
여러개로 분리된 소스파일들을 컴파일한 결과물들에서 최종 실행가능한 파일을 만들기 위해 필요한 부분을 찾아서 연결해주는 작업이다. 링크는 정적링크(static link)와 동적링크(dynamic link)가 있는데
정적링크란 컴파일된 소스파일을 연결해서 실행가능한 파일을 만드는 것이고, 동적링크란 프로그램 실행 도중 프로그램 외부에 존재하는 코드를 찾아서 연결하는 작업을 말한다. 자바의 경우, JVM이 프로그램 실행 도중 필요한 클래스를 찾아서 클래스패스에 로드해주는데 이는 동적링크의 예다.
빌드
소스코드 파일을 실행가능한 소프트웨어 산출물로 만드는 일련의 과정을 말한다.
빌드의 단계 중 컴파일이 포함이 되어 있는데 컴파일은 빌드의 부분집합이라 할 수 있다.
빌드 과정을 도와주는 도구를 빌드 툴이라 한다.
즉 컴파일이란 빌드 과정 중 하나다.
빌드 도구도 많은 변화가 있었다. 초기에 Ant 빌더부터 시작해서 maven, 이후 gradle이 출시되었다. 각 단점들을 보완해서 나왔지만 내눈엔 그놈이 그놈이다. 다불편하노!
아파치 앤트는 자바 프로그래밍 언어에서 사용하는 자동화된 소프트웨어 빌드 도구이다. 유닉스나 리눅스에서 사용되는 make와 비슷하나 자바언어로 구현되어 있어 자바 실행환경이 필요하며 자바 프로젝트들을 빌드하는데 표준으로 사용된다.
Ant 빌더로 불리는 개미색기다. 상당히 징그럽지만 빌드 도구로써의 목적 만을 두고 출시된 만큼 상당히 널리 사용됬었다. 많이 사용된 만큼 웬만한 IDE에는 기본적으로 탑재되어 있다.
아파치 메이븐은 자바 프로젝트들을 위한 빌드 자동화 도구이다. 메이븐은 C 샤프, 루비, 스칼라 등의 언어로 개발된 프로젝트들을 빌드하고 관리하기 위해 사용할 수도 있다.
우리 국비지원충들의 영원한 친구 maven이다. maven 이전에 사용되었던 빌드 도구인 Ant는 빌드 도구로만 이용이 되었는데, 빌드 + 자동 라이브러리 관리 기능이 추가된 maven이 등장하게 된다.
Gradle은 그루비를 이용한 빌드 자동화 시스템이다. Groovy와 유사한 도메인 언어를 채용하였으며, 현재 안드로이드 앱을 만드는데 필요한 안드로이드 스튜디오의 공식 빌드 시스템이기도 하다. Java, C/C++, 파이썬 등과 같은 여러 가지 언어를 지원한다.
드디어 킹갓제너럴 gradle이다. Groovy 기반 DSL(Domain-Specific Language)로 작성된 빌드 도구이며 가장 마지막에 출시된 만큼 Ant와 Maven의 장점들만 뽑아 만들었다.
그루비(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