
C언어의 컴파일 방식: C언어와 같은 기존의 언어들은 각 OS마다 서로 다른 컴파일러가 필요하다. 즉, Linux를 위한 컴파일러, Mac을 위한 컴파일러 등 종류별로 컴파일러가 존재하는 식이다.

자바의 컴파일 방식: 자바는 하나의 컴파일러만이 존재하고, 컴파일 된 결과 바이너리 파일을 각 OS에 맞게 번역해주는 일종의 통역사 역할을 하는 JVM(Java Virtual Machine)이 존재한다.


JRE : 자바 실행 환경 (Java Runtime Environment)의 약자이다. 자바 프로그램의 실행에 필요한 여러 라이브러리 파일을 가지고 있으며, 자연히 JVM도 포함한다.
JDK : 자바 개발 도구 (Java Development Kit)의 약자로, 컴파일, 디버깅 등을 위한 도구들이 들어있음.
자바의 버전은 곧 JDK의 버전이다. 다양한 버전 중 LTS는 Long Time Support의 약자로, 안정적으로 오랫동안 지원하는 버전이라는 의미이다. (해당 강의에서는 자바 11을 선택함)
JDK에는 Oracle JDK와 Open JDK등 다양한 종류가 있음
빌드는 소스코드 파일을 컴퓨터에서 실행할 수 있는 artifact(독립 소프트웨어 가공물)로 가공시키는 과정이다. 이렇게만 설명하면 기존에 언급한 컴파일이라는 개념과 혼동될 수도 있으나, 빌드는 크게 보면 컴파일을 포함하는 좀 더 복잡하고 큰 개념이다.
빌드 과정은 소스코드 컴파일, 테스트 코드 컴파일, 테스트 코드 실행, 테스트 코드 리포트 작성, 기타 추가 설정 작업 실행, 패키징 (우리가 직접 작성한 코드와 여기저기에서 가져다가 사용한 오픈소스 코드들을 하나의 결과물로 묶는 과정) 수행, 최종 결과물 도출 등의 순서로 이루어진다.
실행은 개발자가 작성한 코드나 테스트코드를 컴파일 과정을 거쳐서 실행해보는 것을 말한다. 이 경우에는 독립 소프트웨어 가공물이 나올 수도 있고, 나오지 않을 수도 있다.
그런데, 여기에서 생각해봐야 할 점은 빌드 과정이 생각보다 무척 길고 복잡해서 수동으로 하나하나 병합하고 컴파일시키기에는 실수도 많이 나오고 자원도 많이 든다는 점이다.
이런 문제를 해결하기 위해 자바는 빌드 도구를 사용한다.
빌드 도구는 소스코드의 빌드 과정을 자동으로 처리하고, 외부 소스 코드 (외부 라이브러리)를 관리한다. (버전 관리 등)
자바의 빌드 도구의 종류는 다음과 같다. 현재는 기능적 측면과 안정성의 측면에서 대부분의 개발자가 Gradle을 사용하고, 또 이를 권장하는 추세이다.

Gradle은 설정을 위해 groovy 언어를 사용하고, 외부 라이브러리를 관리할 수 있으며 유연하게 빌드 스크립트를 작성할 수 있는 등 성능이 뛰어나다.