Infra

컴파일(Compile), 빌드(Build), 배포(Deploy) 용어 관련 정리

ysk(0soo) 2022. 9. 14. 11:28

컴파일 (Compile) 이란?

  • 개발자(사용자)가 작성한 소스 코드를 컴퓨터가 이해할 수 있는 언어로 번역하는일.
    • Java, C, Kotlin와 같은 고급 언어로 작성된 코드를, 컴퓨터가 이해할 수 있게 기계어로 변환하는 과정
    • 컴파일을 해주는 프로그램을 컴파일러라고 한다.
  • 예) Java 파일 컴파일 과정
    • Java 파일 생성시 .java 확장명을 가진 파일이 생성.
    • 해당 .java파일을 컴파일 시 .class 파일이 생성
    • 해당 클래스명을 확장자를 제거하고 입력시 해당 파일이 실행된다.
    • IDE를 사용하여 실행(run)시 해당 .java 파일은 컴파일되어 .class 파일을 생성하고 해당 파일을 실행시킨다.

 

빌드 (Build) 란?

  • 컴파일된 코드와 파일들을 컴퓨터가 실행할 수 있는 상태로 변환하는것
  • 소스 코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정과 그 결과
  • 빌드에서는 컴파일, 테스트, 배포등 과정이 포함될 수 있고, 빌드 과정을 도와주는 도구를 빌드 툴이라 한다.
  • 빌드 툴로는 Ant, Maven, Gradle 등이 있다.
  • 예) Java 빌드
    • IDE에서 java 파일 빌드를 진행할 경우 build package 설정값에 따라 war, tar등 java 압축파일이 생성되어 나온 결과물

ANT - XML 기반 빌드 스크립트를 개발

  • 규칙이 없고 절차적이여서 명확한 빌드 절차 정의가 필요하다.
  • 생명주기를 갖지 않아 각각의 Target에 대한 의존관계와 작업을 정의해 주어야 한다.
  • 단점 - 유연성이 높으나 프로젝트가 복잡해지는 경우 Build 과정의 이해가 어렵다.
  • XML, Remote Repository 를 가져올 수 없다. - 스크립트 재사용이 어렵다.

Maven - 자동 관리

  • 프로젝트에 필요한 모든 종속성을 리스트 형태로 Maven에게 알려주어서 종속성을 관리한다.
  • XML, Repository를 가져올 수 있다.
  • POM.xml이라는 Maven 파일에, 필요한 Jar, Class Path를 선언만 하면 직접 다운로드 할 필요가 없어 Repository에서 자동으로 필요한 라이브러리 파일을 불러와준다.
  • 단점 - 라이브러리가 서로 종속할 경우 XML 이 복잡해진다.
  • 계층적인 데이터를 표현하기에는 좋지만, 플로우나 조건부 상황을 표현하기 어렵다.
  • 편리하나 맞춤화된 로직 실행이 어렵다.

Gradle - JVM 기반의 빌드 도구

  • ANT와 Maven의 단점을 보완한 오픈소스 기반의 Build 자동화 도구
  • Groovy(JVM 위에서 작동하는 스크립트 코드) 기반 DSL로 작성한다.
  • Build-by-convention을 바탕으로 한다.
  • 스크립트 규모가 작고 읽기 쉽다.
  • 설정 주입 방식(configuration injection)
    • 종속성을 주입시키면 알아서 관리를 해준다
    • 버전이 바뀌더라도 코드 한줄만 수정해주면 된다

성능

  • Gradle이 Maven 보다 빌드에 소요되는 시간, 유연성, 종속성 관리 등 다양한 측면에서 뛰어나다는 평가가 잦다.

얼마나 간편하게 설정할 수 있는가?

  • 라이브러리가 종속될 경우, 특정 조건을 표현할 경우에 Maven이 처리하기 복잡하다고 한다.
  • Gradle은 스크립트가 더 짧고 읽기 쉽게 되어있다.
  • Gradle이 Mavne 보다 더 효율적이고 강력한 기능을 제공하고 있다.
  • Gradle은 버전 충돌 도 관리할 수 있다.

배포 (Deploy) 란?

  • 빌드된 결과물을 사용자가 접근 또는 사용 할 수 있는 환경(서버 등)에다가 배치(배포) 하는 것
    • jar파일, war파일, 또는 도커 컨테이너 등이 될 수 있다.
  • 예)
    • 홈페이지를 제작한 소스코드가 컴파일, 빌드 과정을 거쳐 빌드된 결과물이 나옴
    • 사용자들이 홈페이지를 이용할 수 있게, 빌드된 결과물을 서버에 올리고 실행.
  1. git에 코드 배치.
  2. 테스트 코드를 실행
  3. 이를 수행 및 검증하는 작업까지라고 나눌 수 있다.

예제 - 영문책을 한글로 번역하여 출판하여 판매하는 과정

  1. 영문으로된 책을 한글로 번역한다 - 컴파일
  2. 번역한 글들을 책으로 엮어서 읽을 수 있게 완성된 책을 만든다 - 빌드
  3. 완성된 책을 소비자들이 구매해서 읽을 수 있게 서점에 진열한다 - 배포

1~2번 과정인 컴파일과 빌드하는 것을 하나로 묶어 빌드과정 이라고 말하기도 한다.

  • 컴파일 - 빌드 - 배포 순서이지만, 보통 컴파일을 포함한 배포하기 직전까지의 모든 과정을 ‘빌드 한다’ 라고 표현하기도 한다.
  • 코드가 완성된 후, 컴파일부터 배포를 포함하는 모든 과정을 ‘빌드 과정’이라고 표현하는 경우도 있다.

 

순서는 컴파일 -> 빌드 -> 배포 순으로 이루어지며 해당 단어들의 범위가 회사마다 다를 수 있으므로 해당 과정의 전체적인 흐름을 정확히 파악하여 각 회사에 적용하면 될듯하다

1. 컴파일: 개발자(사용자)가 작성한 소스 코드를 컴퓨터가 이해할 수 있는 언어로 번역하는일.
​
2. 빌드: 컴파일된 코드와 파일들을 컴퓨터가 실행할 수 있는 상태로 변환
​
3. 배포: 빌드된 결과물을 사용자가 접근 또는 사용 할 수 있는 환경(서버 등)에다가 배치(배포) 하는 것
​
* 또는 컴파일을 포함해 war, jar 등의 실행 가능한 파일을 뽑아내기까지의 과정을 빌드한다고도 함.
1. java로 인텔리제이에서 코드 작성
2. 작성한 코드의 메인을 Run을 함(실행) - 컴파일 + 실행
3. 웹 프로젝트의 경우 jar나 war 파일로 묶어 패키징 한 후 서버에 올려서 실행 - 배포

참조

https://itholic.github.io/qa-compile-build-deploy/