Sky Archive

프로그래밍

[프로그래밍] 컴파일(Compile)과 빌드(Build), 링크(Link)란?

Anchovy ʕ-᷅ᴥ-᷄ʔ 2021. 8. 10. 17:55

- 컴파일(Compile)

개발자가 작성한 소스코드를 바이너리 코드로 변환하는 과정.
컴파일러는 컴퓨터가 이해할 수 있는 기계어로 변환하는 작업을 해준다.
자바에서는 컴파일을 할 경우, JVM에서 실행 가능한 바이트코드 형태의 클래스 파일이 생성된다.
 (.java라는 자바 클래스 파일을 바탕으로 .class라는 클래스 파일이 생성)

 

- 빌드(Build)

빌드란 소스코드 파일들을 컴퓨터에서 실행할 수 있는 소프트웨어로 변환하는 일련의 과정
컴파일, 테스팅, 배포 등
소스코드 파일을 실행 가능한 소프트웨어 산출물로 만드는 일련의 과정을 말한다.
빌드 과정을 도와주는 도구를 빌드 툴이라 한다.

 

- 빌드 도구(Build Tool)

빌드 도구는 위의 빌드 과정을 자동으로 수행해주는 도구를 의미
일반적으로 빌드 툴이 제공해주는 기능

 → 전처리(preprocessing), 컴파일(Compile), 패키징(packaging), 테스팅(testing), 배포(distribution)
대표적으로 Ant, Maven, Gradle 등이 있다.

 

Ant는 빌드 도구로만 이용 되었는데, 빌드와 자동 라이브러리 관리 기능이 추가된 Maven이 등장.

Maven 이후에 Gradle이 나왔는데, 요즘은 Gradle로 넘어가는 추세라 한다.
또한 Gradle은 안드로이드 앱의 공식 빌드 시스템이다.
(+ Gradle 공식 문서에 따르면 Gradle이 Maven보다 최대 100배 빠르다고 한다.)

 

※ Maven vs Gradle 차이

https://hyojun123.github.io/2019/04/18/gradleAndMaven/

 

Maven과 Gradle의 차이

Maven vs Gradle 우선 둘의 차이를 알기위해 각각 알아보았다. Maven같은경우는 스프링프로젝트에서 pom.xml이란 이름으로 쓰고, Gradle은 스프링부트, 안드로이드에서 쓰는걸로 알고있다. 처음에 단순히

hyojun123.github.io

 

 

※ 링크(Link)
- 프로젝트 내 여러 개의 소스파일이 생성되고 A라는 소스파일에서 B라는 소스파일에 존재하는 함수(메서드)를 호출하는 경우가 존재하는데 이때 A와 B 소스파일 각각을 컴파일만 하면 A가 B에 존재하는 함수를 찾질 못하기 때문에 호출할 수가 없다.

- 따라서 A와  B를 연결해주는 작업을 링크라고 합니다. 즉, 여러 개로 분리된 소스파일들을 컴파일한 결과물에서 최종 실행 가능한 파일을 만들기 위해 필요한 부분을 찾아서 연결해주는 작업을 링크라고 한다.

- 링크는 정적 링크(static link)와 동적 링크(dynamic link)가 있는데, 정적 링크는 컴파일된 소스파일을 연결해서 실행 가능한 파일을 만드는 것이고 동적 링크란 프로그램 실행 도중 프로그램 외부에 존재하는 코드를 찾아서 연결하는 작업이다.

- 동적 링크의 쉬운 예로는 자바에서 JVM이 프로그램 실행 도중 필요한 클래스를 찾아서 클래스 패스에 로드해주는 것.

 

 

추가적으로 참고할만한 글.

https://st-lab.tistory.com/176

 

프로그래밍 언어와 빌드 과정 [Build Process]

안녕하세요. 제가 이 시리즈를 작성할 때 처음 계획했던 것이 있습니다. 최소한의 프로그래밍언어에 대한 작성 방법은 알고 있다는 전제하에 프로그래밍 전반에 관한 내용을 다뤄본다고 했죠.

st-lab.tistory.com