컴파일, 빌드, 배포의 개념 및 차이
위 개념들의 차이를 정확히 알아보고자 검색하던 중 좋은 비유로 설명 및 비교를 해준 글이 있어서 해당 글을 인용하여 설명을 시작하려 한다. (아래 '참고 및 출처' 의 1번)
본인이 번역가라고 생각해보자.
이번에 출판사로부터 일을 하나 받았는데, 영문으로된 글을 한글로 번역하는 일이다.
번역된 글은 출판사에서 적절히 페이지를 나누어 책으로 엮을 것이며, 완성된 책은 출판이 되어 서점에 진열될 것이다.
우리는 방금 컴파일, 빌드, 배포의 모든 과정을 훑어보았다.
1. 영문으로된 글을 한글로 번역하는 것은 '컴파일'이다.
2. 번역한 글을 책으로 엮는 것은 '빌드'이다.
3. 완성된 책을 고객들이 읽을 수 있도록 서점에 진열하는 것은 '배포'이다.
4. 1~2번 과정을 하나로 묶어 '빌드 한다'고 하기도 한다.
즉 순서대로 보자면 컴파일 > 빌드 > 배포의 순서이지만 보통 컴파일을 포함한 배포하기 직전까지의 모든 과정을 ‘빌드 한다’ 라고 표현하기도 한다.
사실 용어를 정확하게 정의해두고 사용하는게 좋겠지만,
실제로 회사나 프로젝트 팀마다 용어를 조금씩 다르게 사용하는 경우가 있으니 참고해두자.
심지어는 코드가 완성된 직후, 컴파일부터 배포하는 모든 과정을 ‘빌드 한다’고 표현하는 경우도 봤다.
어쨌든 이를 좀 더 프로그래밍적 관점에서 보자면,
1. 컴파일: 사용자가 작성한 코드를 컴퓨터가 이해할 수 있는 언어로 번역하는 일
java의 경우 컴파일의 결과로 JVM에서 실행가능한 ".class"파일이 생긴다.
컴파일과 빌드가 같다고 생각할 수 있지만 컴파일은 빌드의 부분집합(빌드의 과정 중 하나)
2. 빌드: 컴파일된 코드를 실제 실행할 수 있는 상태(.war, .jar 등)로 만드는 일
예를 들어 IDE에서 java 파일을 빌드할 경우 build package 설정값에 따라 war, tar등
java 압축파일이 생성되어 나오는데 이것이 빌드의 결과물이다.
예를 들어 Java프로젝트를 진행한다면 개발자가 작성한 A.java와 여러가지 정적 파일등에 해당하는 resource가 존재한다.
빌드를 한다면 소스코드를 컴파일해서 .class로 변환하고 resource를 .class에서 참조할 수 있는 적절한 위치로 옮기고 META-INF와 MANIFEST.MF 들을 하나로 압축하는 과정을 의미.
3. 배포: 빌드가 완성된 실행 가능한 파일을 사용자가 접근할 수 있는 환경에 배치시키는 일
4. 혹은 컴파일을 포함해 war, jar 등의 실행 가능한 파일을 뽑아내기까지의 과정을 빌드한다고도 함.
이클립스에서 JAVA로 코딩을 한다고 생각해보자.
코드를 짜고나서 Run 버튼을 눌러 코드를 실행시킨다 (컴파일 + 실행)
정상적으로 실행되면 이것을 war 파일로 뽑아서(빌드) 웹서버에 올리면 된다.(배포)
HelloWorld.java 파일을 컴파일하여 생성된 .class 파일을 특정 디렉토리에 위치시켜달라고 요청받은 경우,
개발자가 그 위치에 파일을 가져다 놓으면 HelloWorld 라는 프로그램을 배포한 셈이 된다.
war 파일이나 exe파일은 아니지만 실행가능한 파일을 최종 사용자가 가용한 위치에 옮겨둔다는 개념에서 보면 그렇게 볼 수도 있다는 것이다.
(보통 배포를 검색하면 war파일로 배포하는 경우를 많이 찾아볼 수 있었는데, 이렇게도 설명이 되어있어서 war파일이 아닌 배포의 경우도 이해하기 쉬웠다.)
* 참고 및 출처
1. 컴파일, 빌드, 배포 개념 차이 설명 : https://itholic.github.io/qa-compile-build-deploy/
2. 빌드 : https://choseongho93.tistory.com/296 [TROLL:티스토리]
3. 컴파일, 빌드, 배포 개념 : https://jun0126.tistory.com/66
'Java > 정리' 카테고리의 다른 글
[Java] enum의 정의와 활용 (0) | 2023.08.04 |
---|---|
ServletOutputStream (0) | 2022.06.24 |
[java] tomcat 버전 오류 (0) | 2022.04.05 |
[Java] jsp에서 다운로드 로직 구현 시 주의할 점 (0) | 2022.03.29 |
[Java] 파일 다운로드할 때 파일명 지정하는 방법 (0) | 2022.03.29 |