빌드용어정리

yonii·2021년 7월 19일
1

테코톡

목록 보기
2/2
(해당 글은 우아한Tech 채널의 영상을 기반으로 작성하였으며 여러 참고자료의 내용을 덧붙인 글입니다.)

프로그래밍을 하다보면 컴파일과 빌드라는 용어에 대해서 많이 듣고 보게 된다. 비록 학교에서 배웠지만...인간은 망각의 동물이므로... 사실 그냥 Run버튼 누르면 알아서 다 해주니...어떤 과정인지에 대해서 깊게 생각해 본적이 없다. 테코톡 영상에서 빌드와 컴파일의 차이를 아시냐고 묻는데 ..보면서 입 꾹 다물었다.

무지함을 개선하기 위해 velog쓰는거니.. 이야기는 그만하고 빌드용어에 대해서 정리해보겠다👩🏻‍⚕️!

컴파일이란?


우리가 작성하는 소스코드 형태로 만들어진 원시파일을 컴퓨터가 알아들을 수 있게끔 이진코드 형태의 오브젝트 파일로 만들어주는 과정을 말한다.
오브젝트 파일을 컴퓨터가 바로 프로그램처럼 실행할 수 있는게 아니라 오브젝트파일에 라이브러리같은 외부 리소스를 연결시키는 과정이 필요하다. 이 과정을 통해 실행파일이라는 실제 실행시킬 수 있는 파일이 만들어지는데 이 과정을 링크라고 한다.

그럼 빌드는 뭐야?

빌드는 위에서 설명한 일련의 과정을 의미한다. 즉 사람이 알아들을 수 있는 원시파일을 실제 컴퓨터에서 프로그램으로 돌릴 수 있게 만드는 과정을 빌드라고 한다.
빌드는 우리가 직접하지 않는다. 빌드는 Gradle과 같은 빌드 도구를 이용해서 빌드한다.
여기서 빌드도구란 소스코드로부터 실행 가능한 어플리케이션을 생성화하는 것을 자동화하는 프로그램을 말한다.

빌드도구 종류

Java : Apache Ant, Maven, Gradle
C# : MSBuild
등등..

JAVA의 빌드도구

  1. Apache Ant
  • xml(수직계층의 구조를 갖고있는 마크업 언어)
  • 절차적
  • 유연성 -> 빌드 스크립트를 짤때 모든 것들을 직접 명시해줘야함
  1. Maven
  • pom.xml
  • 의존성 다운로드 가능 -> 네트워크 상에 있는 라이브러리를 다운받을 수 있음
  • 컨벤션 -> 컨벤션이 있어서 간편하다는 장점이 있지만 사용자 의도에 맞는 로직 개발이 어렵다는 단점이 있음.
  1. Gradle : 위의 두개의 단점 보완을 위해 나온 것!
  • Groovy,Kotlin을 이용해서 작성됨
  • 유연성
  • 스크립트 규모가 작음(간결) -> 간편

빌드는 컴파일보다 훨씬 많은 것을 하는데 테스트를 포함한 소스코드 컴파일 작업, zip 파일이나 자바의 jar 파일 혹은 윈도우의 exe 파일 같은 배포할 수 있는 컴포넌트를 묶는 패키징 작업, 파일과 디렉토리를 만들고 복사하고 지우느 작업, 자동화된 테스트 작업 버전관리 도구사용 등 많은 작업을 수행할 수 있다.
소프트웨어 빌드 프로세스는 크게 개인 빌드 작업과 통합 빌드 작업으로 나눌 수 있다.

개발 빌드 작업

  1. 개발자가 소프트웨어 소스코드를 작성한다.
  2. 개인 빌드를 통해 실행 가능한 바이너리 코드를 생성한다.
  3. 정상 코드 여부를 판별 후 형상 관리 서버로 작성한 코드를 커밋한다.

통합 빌드 작업

  1. 개발 서버는 항상 관리 서버로부터 최신의 소스코드를 체크아웃한다.
  2. 주기적으로 빌드 프로세스를 통해 코드 빌드 후 동작 가능한 소프트웨어 패키지를 생성한다.
  3. 운영 서버로 패키징한 소프트웨어를 배포한다.

이런 작업들은 자동화된 절차에 따라 수행할 수 있어야 한다.

빌드 자동화

빌드를 자동화 -> 빌드자동화
배포 자동화 -> 배포자동화
테스트 자동화 -> 테스트자동화

Q. 빌드 자동화는 무엇을 할까?🤔

  • 의존성 다운로드
  • 소스코드를 이진코드로 컴파일
  • 이진코드 패키징
  • 자동화된 테스트 실행
  • 프로덕션 시스템 배포

즉 컴파일(Compile), 테스팅(Test), 검사(Inspection), 배포(Deploy) 의 일을 한다!

빌드 자동화 도구를 사용하는 이유??

옛날에는 Java를 빌드할때 Javac라는 커맨드를 직접 사용했지만 지금은 IDEA를 이용하면 main()을 실행했을때 Javac를 하고 Jacva가 실행된다. 이렇게 반복되는 과정을 버튼 하나 또는 단축키로 자동화시킬 필요가 있다. 수정하고 빌드하고 dev에 올리는 과정이 수많게 반복된다면 굉장히 많은 시간이 걸릴 것이기 때문이다.
따라서 걸리는 시간소요를 줄이기 위해 빌드 자동화를 사용한다.
작은 프로젝트의 경우에는 직접 빌드 스크립트를 짜도 무관하다. 규모가 작기때문에 전체적인 형상을 파악하기 쉽기 때문이다. 하지만 프로젝트의 규모가 커지면 내가 어디에 있는 소스코드를 빌드하고싶은건지 파악하기 어려울 수 있다. 따라서 빌드 프로세스를 일관성있게 유지시키기위해서도 빌드 자동화를 사용한다.

빌드 자동화도구 Jenkins

  • Jenkins

    Jenkins는 JAVA 기반 오픈 소스 형태로, 가장 많이 사용되는 빌드 자동화 도구이다. 대표적인 기능은 여러가지 배포 작업의 상황을 모니터링 할 수 있는 대쉬보드 제공과 배포스크립트를 실행해줍니다.

참고

빌드용어
빌드, 젠킨스
빌드 자동화 도구 메이븐

profile
공부하려고 노력ing....

0개의 댓글