컴파일 (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파일, 또는 도커 컨테이너 등이 될 수 있다.
- 예)
- 홈페이지를 제작한 소스코드가 컴파일, 빌드 과정을 거쳐 빌드된 결과물이 나옴
- 사용자들이 홈페이지를 이용할 수 있게, 빌드된 결과물을 서버에 올리고 실행.
- git에 코드 배치.
- 테스트 코드를 실행
- 이를 수행 및 검증하는 작업까지라고 나눌 수 있다.
예제 - 영문책을 한글로 번역하여 출판하여 판매하는 과정
- 영문으로된 책을 한글로 번역한다 - 컴파일
- 번역한 글들을 책으로 엮어서 읽을 수 있게 완성된 책을 만든다 - 빌드
- 완성된 책을 소비자들이 구매해서 읽을 수 있게 서점에 진열한다 - 배포
1~2번 과정인 컴파일과 빌드하는 것을 하나로 묶어 빌드과정 이라고 말하기도 한다.
- 컴파일 - 빌드 - 배포 순서이지만, 보통 컴파일을 포함한 배포하기 직전까지의 모든 과정을 ‘빌드 한다’ 라고 표현하기도 한다.
- 코드가 완성된 후, 컴파일부터 배포를 포함하는 모든 과정을 ‘빌드 과정’이라고 표현하는 경우도 있다.
순서는 컴파일 -> 빌드 -> 배포 순으로 이루어지며 해당 단어들의 범위가 회사마다 다를 수 있으므로 해당 과정의 전체적인 흐름을 정확히 파악하여 각 회사에 적용하면 될듯하다
1. 컴파일: 개발자(사용자)가 작성한 소스 코드를 컴퓨터가 이해할 수 있는 언어로 번역하는일.
2. 빌드: 컴파일된 코드와 파일들을 컴퓨터가 실행할 수 있는 상태로 변환
3. 배포: 빌드된 결과물을 사용자가 접근 또는 사용 할 수 있는 환경(서버 등)에다가 배치(배포) 하는 것
* 또는 컴파일을 포함해 war, jar 등의 실행 가능한 파일을 뽑아내기까지의 과정을 빌드한다고도 함.
1. java로 인텔리제이에서 코드 작성
2. 작성한 코드의 메인을 Run을 함(실행) - 컴파일 + 실행
3. 웹 프로젝트의 경우 jar나 war 파일로 묶어 패키징 한 후 서버에 올려서 실행 - 배포
참조
'Infra' 카테고리의 다른 글
nginx를 이용한 Node exporter basic auth (feat.prometheus) (0) | 2024.03.30 |
---|---|
CI / CD란 ? (1) | 2022.09.15 |