Build & Compile

Sixhustle·2020년 10월 16일
1

Computer Science

목록 보기
2/5

BuildCompile의 명확한 차이점을 몰라 Java기준으로 찾아봤습니다.


Compile

개발자가 작성한 Source code(*.java)를 Byte code(*.class)로 변환하는 과정입니다.

이러한 컴퓨터가 이해할 수 있는 언어(0과 1로만 이루어진 언어)로 변환하는 과정을 담당한 프로그램이 Compiler입니다.

Java의 경우, JVM에서 실행가능한 Byte code파일이 생성됩니다.

Byte code

CPU가 아닌, JVM과 같은 가상 머신이 이해할 수 있는 코드를 의미합니다.

Byte code는 플랫폼에 종속적이지 않은 가상 머신용 기계어 코드입니다.
이렇게 변환된 Byte code는 실시간 번역기(Interpreter) 또는 JIT Compiler(Just In Time)에 의해 Binary code로 변환됩니다.

  • JIT : 실행 중인 런타임에 실제 기계어로 변환해 주는 컴파일러를 의미합니다.

Binary code

컴퓨터가 인식할 수 있는 0과 1로만 이뤄진 코드를 의미합니다.

C언어의 경우, Compiler에 의해 (*.c)파일이 목적파일(*.obj)로 변환되지만, 컴퓨터가 아직 실행할 수 있는 환경이 아닙니다.

Linker에 의해 함수나 헤더 파일의 실제 메모리 주소를 코드에 반영해야 컴퓨터가 실행할 수 있는 기계어로 변환된 것입니다.

기계어

컴퓨터가 읽을 수 있는 언어로 CPU가 사용하는 명령어 집합을 의미합니다.

따라서, CPU가 변경되면 기계어가 변경될 수 있고, 같은 동작을 하는 명령어지만 제조사/버전에 따라 완전히 다른 0과 1의 나열이 될 수도 있습니다.


Build

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의 일부인 것을 확인할 수 있습니다.


References

0개의 댓글