컴파일 보다 훨씬 더 많은 것을 의미하며 Compile(컴파일), Testing(테스트), Inspection(분석), Deploy(배포)등의 과정이 포함됩니다.
즉, 빌드란 소프트웨어를 생성하고, 테스트하고, 검사하여, 배포하기 위해 수행하는 행위의 집합이라고 볼 수 있습니다. (소프트웨어가 응집력 있는 하나의 단위로써 작동하는지 확인하는 과정)
빌드 : 사용할 준비가 된 시스템으로 만드는 일련의 프로세스
컴파일 : 한 파일 또는 그룹 대상으로 행해짐
배포 : 빌드가 완료된 실행 파일을 실제 사용자가 접근할 수 있는 환경으로 배치시키는 것
빌드는 Compile(컴파일) 과 Link(링크)를 합쳐서 부르는 용어입니다.
빌드 = 컴파일 + 링크
말 그대로 Build된 실행파일을 실행까지 진행한다.
실행 과정 전에 있는 빌드 과정에서 코드상 에러가 있으면 Compile Error(컴파일 에러)를 발생시키는데, 정확한 에러를 잡기 위해 Debug(디버그)라는 별도의 개념이 존재합니다.
개발자가 작성한 소스코드를 컴퓨터가 이해할 수 있는 기계어로 변환하는 작업입니다.
컴파일로 생성된 소스파일만으로는 프로그램을 실행할 수 없습니다.
위 소스코드를 실행파일로 만드는 것을 링크라고 합니다.
여러 개의 소스파일들을 컴파일한 결과물로 최종 실행가능한 파일을 만들 때, 필요한 부분(예를 들어 다른 소스파일의 함수를 호출하는 등)들을 찾아서 연결해주는 작업입니다.
소프트웨어 개발에 있어서 소스 코드를 실행 가능한 애플리케이션으로 만들어주는 도구를 말합니다.
빌드 과정을 자동화하여 관리하는 기능을 하기 때문에 빌드 관리 도구(Build Management Tool) 또는 빌드 자동화 도구(Build Automation Tool)라고 불리기도 합니다.
빌드 도구는 개발자가 빌드 과정을 보다 쉽게 관리하고, 효율적으로 수행할 수 있도록 도와주는 도구라고 생각하시면 될 것 같습니다.
개발자가 스크립트를 작성하여 다양한 작업을 수행할 수 있게 합니다.
예를 들어 소스코드를 컴파일하거나 패키징할 수 있으며, 테스트를 자동으로 수행하거나 의존성 주입 및 배포 작업을 할 수 있습니다.
또 빌드 도구에 따라 스크립트 작성시 사용하는 문법이 다른데요. 일반적으로 XML 이나 특정 도메인(Ex. Groovy) 언어를 사용합니다.
빌드 도구를 사용하지 않으면 개발자가 직접 라이브러리를 임포트하고 의존성 주입하고 각 작업들을 수동으로 진행을 해야 합니다.
위와 같이 개발자들은 빌드도구를 사용안할 이유가 없겠죠?
Ant
자바 프로젝트 빌드 도구로 가장 널리 사용되던 빌드도구
이클립스 IDE에 기본적으로 탑재되었으며, XML 스크립트를 기반으로 합니다.
최근에 나온 빌드 도구들과 달리 자동으로 라이브러리를 업데이트하는 기능이 없기 때문에 현재는 주로 레거시 시스템에서만 사용되고 있습니다.
Maven
Ant 이후에 나온 자바 빌드 도구로 자동으로 라이브러리와 Dependency(의존성)을 관리하는 기능이 있습니다.
Ant와 마찬가지로 XML 스크립트를 기바능로 하며, pom.xml 파일로 의존성을 관리합니다.
Maven에서는 Life Cycle(라이프 사이클)개념이 도입되어 빌드 순서 등을 정의할 수 있습니다.
Gradle
가장 최근에 나온 자바 빌드 도구로 Groovy문법을 사용합니다.
build.gradle 파일에 스크립트를 작성하며, 대규모 프로젝트에서 복잡해지는 경향이 있는 XML 기반 스크립트에 비해 관리가 편하는 장점이 있습니다.
Gradle은 현재 안드로이드 프로젝트의 표준 빌드 시스템으로 채택되어 있기도 합니다.
https://yozm.wishket.com/magazine/detail/1700/
https://datalibrary.tistory.com/23
https://velog.io/@yoondgu/%EB%B9%8C%EB%93%9CBuild%EB%9E%80
https://m.blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=thnam91&logNo=220988533360&proxyReferer=
사람마다, 회사마다 컴파일, 빌드, 배포 간 개념이 혼용되어 사용되고 있는데 정확한 의미를 알게된 계기가되어 좋은 경험이었습니다.
이런 유용한 정보를 나눠주셔서 감사합니다.