개발 상식

빌드(Build) / 배포(Deploy) / 컴파일(Compile) / 링크(Link) 개념 및 차이점

킹우현 2023. 8. 12. 19:41

서버에 기능을 추가하기 위해서는 개발자가 로컬 PC에서 개발을 하고 테스트까지 진행한 뒤에 문제가 없을 경우 사용자가 사용할 수 있도록 수정된 코드를 실서버에 반영해야 합니다.

 

서버에 반영을 하는 것을 "배포(Deploy)"라고 하고 배포하기 위한 과정을 "빌드(Build)"라고 합니다.

 

컴파일(Compile) 이란 ?

인간이 이해할 수 있는 고급 언어로 작성된 소스 코드를 컴퓨터가 이해할 수 있는 기계어로 변환시키는 과정을 말하며, java의 경우 컴파일의 결과로 자바가상머신(JVM)에서 실행가능한 ".class" 파일이 생깁니다.

 

컴파일과 빌드와 같다고 생각하실 수 있지만, 컴파일은 빌드를 진행하는 과정의 일종의 하나인 Task 입니다.

 

즉, 소스코드를 컴퓨터가 이해할 수 있는 기계어로 변환하는 작업을 말합니다.

 

링크(Link)란 ?

컴파일(Compile)과정을 통해 만들어진 목적 파일(. obj 등)을 실행파일(. exe 등)로 만드는 것을 링크(Link)라고 합니다.

 

대부분의 애플리케이션 로직에는 사용자가 직접 작성한 소스코드 이외에도 내부적으로 상당히 많은 라이브러리(Library)를 포함하고, 사용자가 직접 만든 라이브러리 또한 포함됩니다. 따라서 링크(Link)는 여러 개의 목적 파일(. obj 등)을 하나의 실행파일로 묶어주는 것입니다.

 

빌드(Build)란 ?

빌드 ( Build ) = 컴파일 ( Compile ) + 링크 ( Link ) 

빌드의 목적은 기본적으로 실행파일을 만드는 것입니다. 즉, 소스 코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정과 그 결과를 말합니다.

 

예를 들어 Java프로젝트를 진행한다면 개발자가 작성한 A.java와 여러가지 정적 파일등에 해당하는 resource가 존재합니다.

빌드를 한다면 소스코드를 컴파일해서 .class로 변환하고 resource를 .class에서 참조할 수 있는 적절한 위치로 옮기고 META-INF와 MANIFEST.MF 들을 하나로 압축하는 과정을 의미합니다.

 

컴파일은 빌드의 부분집합이라고 생각하시면 됩니다. 또한, 빌드 과정을 도와주는 도구를 Build Tool이라고 합니다.

 

즉, 컴파일 된 코드를 실제 실행할 수 있는 상태로 만드는 일을 Build 라는 개념으로 생각하시면 됩니다.

 

빌드 툴(Build Tool) 종류

빌드에서는 컴파일, 테스트, 배포 등 과정이 포함될 수 있고, 빌드 과정을 도와주는 도구를 빌드 툴이라 합니다.

 

일반적으로 빌드 툴이 제공해주는 기능으로는 다음과 같은 기능들이 있습니다.

  • 전처리(preprocessing)
  • 컴파일(Compile)
  • 패키징(packaging)
  • 테스팅(testing)
  • 배포(distribution)

빌드 툴로는 Ant, Maven, Gradle 등이 있습니다.

 

실행(Run)이란 ?

실행( Run )은 말 그대로 Build 된 실행파일을 실행까지 진행합니다. 때문에 실행 과정 전에 있는 빌드 과정에서 코드상 에러가 있으면 컴파일 에러 ( Compile Error )를 발생시키는데, 정확한 에러를 잡기 위해 디버그 ( Debug )라는 별도의 개념이 존재합니다.

 

디버그 ( Debug )는 빌드 과정에서 컴파일 에러를 발견할 경우 ( 시스템의 논리적 오류 혹은 비정상적인 연산 등 ), 그 원인을 사용자(developer)에게 알려줍니다. 그 알려진 일련의 에러까지 수정하는 작업을 디버깅 ( Debugging )이라고 합니다.

 

배포(Deploy)란 ?

배포란 빌드 완료된 실행 파일 (.exe 등)을 실제 사용자가 접근할 수 있는 환경으로 배치시키는 것을 의미합니다.

 

흔히 현업에서 1개의 프로젝트에 여러 개발자들이 함께 참여하여 각각의 기능들을 만들고, 버전 관리 (Git, Svn 등) 오픈소스를 통하여 각 기능들을 한 코드로 뭉칩니다.

 

이렇게 뭉쳐진 코드들이 하나의 완성된 프로젝트가 되는데, 개발자들의 로컬환경에서 빌드(Build)되어 여러 가지의 테스트를 거쳐 최종 테스트가 완료되면 실제 사용자가 사용할 수 있는 실제 서버(Release Server)에 배포(Deploy)한다고 말합니다.

 

실 서버의 배포가 잘못되면 서비스 운영에 지장을 초래하기 때문에 현업에서는 보통 아래와 같은 흐름으로 배포를 진행합니다.

 

보통 로컬 -> stage서버(개발 서버) -> release서버(실제 운영 서버)로 배포를 진행하며 각각의 버전 관리나 배포 순서, 서버의 이름 등은 회사마다 각기 다릅니다.

1. 각자의 로컬 환경에서 필요 기능 개발 -> 각자의 로컬 브랜치에 commit -> commit history 정리 후 원격 저장소의 브랜치에 push.
2. stage서버와 연동된 원격 브랜치에 merge -> stage서버에 merge 된 코드 배포(deploy) -> stage 서버 테스트
3. release서버와 연동된 원격 브랜치에 stage의 merge 된 브랜치를 merge -> release 서버에 merge 된 코드 배포
4. 실서버 모니터링

 

정리 ✨

Build : 컴파일 + 그 외 작업

Run : Build(컴파일 + 그 외 작업) + 실행

Deploy : 개발한 코드를 테스트한 뒤 실서버에 반영하는 것

 

출처 : https://min-nine.tistory.com/226

 

컴파일,링크, 빌드, 배포 개념 정리 / what is the Compile,Link,Build,Deploy?

본인은 PHP 웹 개발자 외길 인생을 살아왔다. Frame Work는 Laravel을 사용하여 개발을 진행하였고, 별도의 컴파일 , 빌드 과정 없이 실서버에 deploy(배포)만 진행하여 서비스를 개발해왔다. 최근 회사

min-nine.tistory.com

https://choseongho93.tistory.com/296

 

빌드, 배포, 컴파일의 개념 & 차이점 (Build, Deploy, Complie)

빌드, 배포, 컴파일의 개념 & 차이점 (Build, Deploy, Complie) 서버에 기능을 추가 하려면 개발자가 로컬 PC에서 개발을 하고 테스트까지 진행한 뒤에 문제가 없을 경우 사용자가 사용할 수 있도록 수정

choseongho93.tistory.com