2015년 2월 1일 일요일

컴파일과 빌드의 개념

보통 초보들.. 특히 최근에 시작한 초보들은
컴파일과 빌드의 차이를 모르는 경우가 많다
왜냐면 툴들이 워낙 좋아져서
그 둘을 동시에 Run 하나로 퉁치기 때문이다

당연히 본인도 Compile, Build 에 대해서 잘 몰랐고
그닥 알고 싶지도 않았지만 안드로이드 스튜디오라는 툴을 쓰면서
강제로 알아야만 하게 되었다 ..;ㅁ;

컴파일(compile) : 소스의 문법을 분석해 기계어로 번역
빌드(build) : 번역된 것과 그외 잡다한걸 모아서 실행 가능한 파일로 만듦

보통 IDE(통합 개발 환경.. 걍.. 이클립스나 visual studio 같은 거..) 에서
프로그램을 짠 후 실행 시켜서 확인을 할때

주로 Run 이라는 메뉴를 쓸 것이다
그 Run 이란 명령어는 사실 [Build + 실행] 을 수행한다
그런데 여기서 또 사실 [Build = Compile + 잡다] 이다
고로 결국 컴파일과 빌드 모두 수행한다

그때 만약 문법에 오류가 있으면 컴파일 에러가 나고
문법은 괜찮은데 있어야할 파일이 없으면 빌드 에러가 나지만
이것도 Error!! 로 끝난다

결국
초보인 우리는 IDE의 편리한 메크로 기능때문에
‘Run 했더니 에러가 났엉’
정도밖에 인식을 못했고 그렇기에 컴파일과 빌드의 차이를 모르는 것이다

하지만 알고보면 그렇게 어려운 것도 아니다. 앞서 말한듯이 하나는 번역전문이고
하나는 그것을 포함한 실행파일을 만들어주는 모든 작업을 말한다

추상적인 예를들면
영어로 된 대본이 3장이 있다.
이것을 한국어로 해서 봉투에 넣어 배우한테 주면 임무 완료라고 하자
그런데
이것을 번역하는데 왠 인도어가 들어 있거나
철자가 틀리거나 하면 번역이 막혀버린다.. 이것이 번역불가.. 즉 컴파일 에러가 된다
한편 그런게 없어서 대본 3장을 완벽히 번역 했다
그래서 이제 3장을 봉투에 넣을려고 하는데 봉투가 없다!
혹은 봉투에 넣어 가져갔는데 배우가 튀었다!!
이것이 빌드에러이다

좀더 직접적인 예를들면
컴파일은 현재 내가 짠 프로그래밍 언어를 진정한 기계들이 알아듣는 기계어로
번역해주는 과정이다. 그렇게 번역된 기계어로 컴터는 명령을 수행할 수 있게된다
그런데 그 명령중에 ‘빤스를 가져와라’ 이런게 있으면
컴터는 이렇게 빌드에러를 낸다
빤스라는 리소스를 찾을 수가 없습니다. 먹는건가요?’
그럴때를 대비해서 빤스를 손에 쥐어주고
This is Pantsuuuuuuuuuuuuuuuuu!!!
라고 정확하게 알려줘야한다. 그렇게 명령을 수행할때 필요한 것들을
바리바리 싸주는 것이 빌드이다

즉, 컴터가 빵셔틀인건 맞는데 ‘야채빵 사와라’ 이러면 강력한 인공지능이
발휘되어 진짜 야채빵 사오는 현실의 빵셔틀과 달리
‘그게 모죠? 에러입니다’ 이러는 애가 바로 컴터다..
그러므로 ‘야채빵을 사와라’ 라고 할려면 야채빵을 손에 쥐어주던가
아니면 야채빵이 있는 장소를 말해주고
그 장소에 손수 야채빵을 준비해주는 빌드작업을 해줘야한다

또한 빌드 라는 것은
더욱 큰 개념, 즉 ‘완성과정’ 이라는 개념으로 확장해서 의미하는 경우도 많다
실행파일을 내놓는다는 것을 넘어 버그잡고 피드백 나누고 작업 주고받고 마케팅에 출시까지
포함해서 빌드시스템이라고 하는 경우다.

여하튼
프로그램이라는 것에서 컴파일은 번역 하나이지만
빌드는 소스와 그림, 아이콘 같은 것도 연결해줘야하고
다른 사람이 만든 라이브러리도 가져와서 관리하는 둥 훨씬 복잡하므로 따로
Gradle 같은 빌드자동화 툴이 나오기도 한다

Written with StackEdit.

댓글 9개 :

  1. 작성자가 댓글을 삭제했습니다.

    답글삭제
  2. 빌드와 컴파일에 관하여 좋은 예시와 친절한 설명 감사드립니다!

    답글삭제
  3. 재밌는 예제들 들어주셔서 이해가 되었어요~ 역시 글보다는 말이 초심자에게는 이해하기 좋네요~ 감사합니다!

    답글삭제
  4. 빵터졌어요~ 이해하기 쉽게 써주셔서 감사합니다 ^^

    답글삭제
  5. 명쾌하고 재밌는 설명이었어요. 감사합니다

    답글삭제
  6. 예시가 찰지게 와닿네요!! ㅋㅋㅋ 이해에 많은 도움이 되었습니다. 감사합니다.

    답글삭제
  7. 예시가 너무 재미있어요 좀 더 이해하기가 쉬운거 같아서 금방 읽었습니다! 감사합니당

    답글삭제
  8. 예제가 쉽고 재미있네요ㅎㅎ두번째 들어와서 읽어보고 갑니다ㅎㅎㅎ

    답글삭제