서버에 기능을 추가 하려면 개발자가 로컬 PC에서 개발을 하고 테스트까지 진행한 뒤에 문제가 없을 경우 사용자가 사용할 수 있도록 수정된 코드를 실 서버에 반영해야 함.
서버에 반영을 하는 것을 "배포"라고 하고 배포(Deploy) 하기 위한 과정을 "빌드"라고 함.
순서대로 보자면 컴파일 - 빌드 - 배포 의 순서이지만, 보통 컴파일을 포함한 배포하기 직전까지의 모든 과정을 ‘빌드 한다’라고 표현하기도 함.
사실 용어를 정확하게 정의해두고 사용하는게 좋겠지만, 실제로 회사나 프로젝트 팀마다 용어를 조금씩 다르게 사용하는 경우가 있으니 참고해둠.
심지어는 코드가 완성된 직후, 컴파일부터 배포하는 모든 과정을 ‘빌드 한다’고 표현하는 경우도 있음.
소스 코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정과 그 결과를 말함.
컴파일은 빌드의 부분집합이라고 생각. 빌드 단계 중 컴파일이 포함이 되어 있는데 컴파일은 빌드의 부분집합이라 할 수 있음.
즉, 컴파일 된 코드를 실제 실행할 수 있는 상태로 만드는 일을 Build 라는 개념으로 생각하시면 됨.
Build = Complie + 그 외 작업
Run = Build + 실행
= (Complie + 그외작업) + 실행
빌드에서는 컴파일, 테스트, 배포 등 과정이 포함될 수 있고, 빌드 과정을 도와주는 도구를 빌드 툴이라 함.
일반적으로 빌드 툴이 제공해주는 기능으로는 다음과 같은 기능들이 있음.
전처리(preprocessing), 컴파일(Compile), 패키징(packaging), 테스팅(testing), 배포(distribution)
빌드 툴로는 Ant, Maven, Gradle 등이 있음.
컴파일이란 개발자가 작성한 소스코드를 바이너리 코드로 변환하는 과정을 말함. (목적 파일이 생성됨) 즉, 컴퓨터가 이해할 수 있는 기계어로 변환하는 작업. 이러한 작업을 해주는 프로그램을 가르켜 컴파일러(Compiler)라 함.자바의 경우, 자바가상머신(JVM)에서 실행가능한 바이트코드 형태의 클래스파일이 생성됨.
프로젝트를 진행하다 보면 소스파일이 여러개가 생성이되고 A라는 소스파일에서 B라는 소스파일에 존재하는 함수(메서드)를 호출하는 경우가 있음.
이때 A와 B 소스파일 각각을 컴파일만 하면 A가 B에 존재하는 함수를 찾질 못하기 때문에 호출할 수가 없음.
따라서 A와 B를 연결해주는 작업이 필요한데 이 작업을 링크라고 함.
여러개로 분리된 소스파일들을 컴파일한 결과물들에서 최종 실행가능한 파일을 만들기 위해 필요한 부분을 찾아서 연결해주는 작업.
링크는 정적링크(static link)와 동적링크(dynamic link)가 있는데
정적링크란 컴파일된 소스파일을 연결해서 실행가능한 파일을 만드는 것이고,
동적링크란 프로그램 실행 도중 프로그램 외부에 존재하는 코드를 찾아서 연결하는 작업을 말함.
자바의 경우, JVM이 프로그램 실행 도중 필요한 클래스를 찾아서 클래스패스에 로드해주는데 이는 동적링크의 예.
참고
https://choseongho93.tistory.com/296
https://itholic.github.io/qa-compile-build-deploy/