컴파일, 빌드, 배포가 무엇인가


컴파일, 빌드, 배포가 무엇인지, 어떻게 다른 것인지 보자.


보통 프로그램은 컴파일 -> 빌드 -> 배포의 과정을 거친다.

  1. 컴파일 : 개발자가 작성한 코드를 컴퓨터가 이해할 수 있는 언어로 바꾸는 일
  2. 빌드 : 컴파일 된 코드를 실제 실행할 수 있는 상태로 만드는 일
  3. 배포 : 빌드가 된 실행 가능한 파일을 사용자가 접근할 수 있는 환겨에 배치시키는 일.

예를 들어 이클립스에서 Java로 코딩을 할 때는

  1. 코드를 작성하고 run을 눌러 코드를 실행시킨다. (컴파일 + 실행)
  2. 정상적으로 실행되면 이를 war 파일로 뽑아 웹 서버에 올리거나 exe, jar 파일로 뽑아 사용자에게 제공한다. (배포)

웹이 아닌 exe 파일로 배포하는 경우는 보통 deploy가 아닌 distribute한다고 한다.

이클립스에서는 run버튼을 누를 때 컴파일과 실행이 동시에 발생하기 때문에 컴파일 과정을 인식하기 어려운 문제가 있다. 만약 java를 터미널에서 실행시킨다면 얘기가 달라진다. Helloworld.java라는 파일을 터미널에서 아래와 같이 실행하면 에러가 발생한다.

$ java HelloWorld.java
오류: 기본 클래스 HelloWorld.java를 찾거나 로드할 수 없습니다.

이는 코드가 컴파일(번역)되지 않았기 때문에 컴퓨터가 코드를 이해할 수 없기 때문이다. 이클립스에서는 run 버튼을 누르면 컴파일이 자동으로 이루어졌지만, 터미널에서 직접 실행시킬때는 개발자가 직접 컴파일을 해줘야 한다.

$ javac HelloWorld.java
$ ls
HelloWorld.class  HelloWorld.java

javac 명령어를 사용해 컴파일 하니 컴파일된 .class 파일이 생성되었다. 이제 아래와 같이 확장자 명을 제거하고 클래스 이름으로 java 명령어를 실행시키면 잘 실행이 된다.

$ java HelloWorld
Hello, World!

실제 서비스를 운영할 때, 코드를 수정하고 다시 컴파일해서 실행가능한 파일로 추출한 후 이를 배포하는 과정을 하루에 여러 번 반복해야 할 경우가 생긴다. 이런 반복 작업이 매우 귀찮고 실수가 발생할 수 있기 때문에 ‘빌드 자동화’, ‘배포 자동화’라는 개념이 나왔다.

출처

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