Build
와 Compile
의 명확한 차이점을 몰라 Java기준으로 찾아봤습니다.
개발자가 작성한 Source code
(*.java)
를 Byte code(*.class)
로 변환하는 과정입니다.
이러한 컴퓨터가 이해할 수 있는 언어(0과 1로만 이루어진 언어)
로 변환하는 과정을 담당한 프로그램이 Compiler입니다.
Java의 경우, JVM에서 실행가능한 Byte code파일이 생성됩니다.
CPU가 아닌, JVM과 같은 가상 머신이 이해할 수 있는 코드를 의미합니다.
Byte code는 플랫폼에 종속적이지 않은 가상 머신용 기계어 코드입니다.
이렇게 변환된 Byte code는 실시간 번역기(Interpreter)
또는 JIT Compiler(Just In Time)
에 의해 Binary code로 변환됩니다.
컴퓨터가 인식할 수 있는 0과 1로만 이뤄진 코드를 의미합니다.
C언어
의 경우, Compiler에 의해 (*.c)파일이 목적파일(*.obj)로 변환되지만, 컴퓨터가 아직 실행할 수 있는 환경이 아닙니다.
Linker에 의해 함수나 헤더 파일의 실제 메모리 주소를 코드에 반영해야 컴퓨터가 실행할 수 있는 기계어로 변환된 것입니다.
컴퓨터가 읽을 수 있는 언어로 CPU가 사용하는 명령어 집합을 의미합니다.
따라서, CPU가 변경되면 기계어가 변경될 수 있고, 같은 동작을 하는 명령어지만 제조사/버전에 따라 완전히 다른 0과 1의 나열이 될 수도 있습니다.
Source code를 실행가능한 파일로 만드는 과정을 의미합니다.
Gradle
, Maven
, Ant
와 같은 Build Tool을 이용해 아래의 기능을 수행할 수 있고, 아래의 단계를 합쳐 Build
라고도 말할 수 있습니다.
1. Generating sources (sometimes).
2. Compiling sources.
3. Compiling test sources.
4. Executing tests (unit tests, integration tests, etc).
5. Packaging (into jar, war, ejb-jar, ear).
6. Running health checks (static analyzers like Checkstyle, Findbugs, PMD, test coverage, etc).
7. Generating reports.
Compile은 Build의 일부인 것을 확인할 수 있습니다.