오늘 부트캠프에서 빌드와 컴파일에 대한 이야기가 나왔다.
느낌적으론 알 거 같은데 말로 표현하려니 어려워 따로 정리를 해보려고 한다.
빌드와 컴파일은 프로그래밍에서 중요한 단계이다. Java를 주언어로 쓰고 있으니 Java 기준으로 용어를 설명해 보자.
컴파일(Complie)
컴파일을 설명하기전 우리는 프로그래밍 언어가 인간의 언어인지 컴퓨터의 언어인지를 파악할 필요가 있다. 우린 우리가 짠 코드를 해석할 수 있으니 인간의 언어이다. 우린 궁극적으로 프로그래밍을 통해 컴퓨터 프로그램이 되어 동작시키는 것이기 때문에 인간의 언어인 프로그래밍 언어를 컴퓨터가 해석할 수 있게 번역을 시켜주는 역할이 필요하다.
우린 그것을 "컴파일한다" 라고 표현한다. 그럼 컴파일을 해주는 역할을 하는 것은 "컴파일러"라고 지칭한다.
이것은 Java의 관점에서 설명하면 이와 같다. 컴파일은 Java로 작성된 프로그래밍 언어를 중간코드(Java의 경우 바이트코드)로 변환하는 과정을 의미한다. Java에서는 'javac'라는 컴파일러를 사용하여 java 파일을 bytecode로 컴파일하며 컴파일된 파일은 '.class' 파일로 저장된다.
그럼 컴파일된 파일은 혼자서 실행이 가능할까? 그렇지 않다. 컴파일된 파일들은 리소스형태로 크고 작은 파일들로 되어있다. 이러한 리소스들을 도와주기 위한 조력자들이 필요하다. 이러한 조력자들은 적절한 위치에 배치하여 리소스들이 실행될 수 있게 해준다.
이러한 컴파일부터 조력자들을 적절한 자리 배치하여 살행을 준비하는 과정을 빌드라고 한다.
빌드(Build)
빌드는 프로그램을 실행 가능한 상태로 만드는 모든 과정을 의미한다. 즉, 컴파일된 코드를 실제 실행할 수 있는 상태로 만드는 것이다.
이 과정에서 컴파일, 링킹, 패키징, 테스트 등 여러 단계가 포함될 수 있다. (조력자들을 적절한 위치에 배치하는 것 = 단계)
Java에서는 Maven, Gradle 등의 빌드 도구를 사용하여 빌드 프로세스를 관리하고 자동화할 수 있다.
빌드의 결과로 실행 가능한 JAR 또는 WAR 같은 파일이나, 배포 가능한 아티팩트 등이 생성될 수 있다.
빌드의 과정
- 소스 코드 작성 : 프로그래머가 특정 프로그래밍 언어로 소스 코드를 작성한다.
- 컴파일 :
- 소스 코드는 사람이 읽을 수 있는 형태로 작성되어 있지만, 컴퓨터는 이를 직접 실행할 수 없다.
- 컴파일러는 소스 코드를 기계어로 변환하여 실행 가능한 형태인 오브젝트 코드로 만든다.
- 일부 언어(예: Java)에서는 중간 형태인 바이트코드로 변환되고, 이후에 다시 해당 플랫폼에 맞게 해석된다.
- 링킹 :
- 여러 개의 오브젝트 파일과 라이브러리를 연결하여 하나의 실행 파일을 만든다.
- 이 과정에서 필요한 라이브러리와 함수들의 주소가 연결된다.
- 리소스 통합 :
- 이미지, 사운드, 폰트 등의 리소스 파일을 실행 파일이나 앱 패키지와 함께 통합한다.
- 테스팅 :
- 빌드된 실행 파일을 테스팅하여 문제가 없는지 확인한다.
- 배포 :
- 테스트가 완료된 후, 사용자에게 제공하기 위해 배포한다. 이것은 웹 서버, 앱 스토어, CD/DVD, 클라우드 등 다양한 방법으로 진행될 수 있다.
차이점
빌드와 컴파일은 비슷한 기능을 수행하지만 다른 의미를 갖고 있다.
빌드는 소스 코드 파일을 실행 가능한 소프트웨어 산출물로 변환하는 과정으로, 컴파일 포함 전체적인 과정을 의미한다. 반면, 컴파일은 소스 코드를 바이너리 코드로 변환하는 특정 단계만을 의미한다.
'Knowledge > 개발지식' 카테고리의 다른 글
[네트워크] PDU(protocol data unit) (0) | 2024.05.16 |
---|---|
[개발지식] 라이브러리와 프레임워크 (0) | 2024.05.01 |
[개발지식] 객체와 관계형 데이터베이스와의 차이 with JPA (0) | 2024.03.11 |
[스진초 5기/개발지식] DDD 설계와 SQL 중심 설계 (1) | 2023.11.10 |
[개발지식] 빌드관리도구와 Maven과 Gradle (0) | 2023.10.13 |