열심히 끝까지

[10분 테코톡] 에헴의 빌드용어 영상정리 본문

디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(과제)

[10분 테코톡] 에헴의 빌드용어 영상정리

노유림 2022. 6. 12. 01:01

빌드 용어 정리(동영상 시청)
영상 : https://www.youtube.com/watch?v=JgRCaVwkPE8

      원시파일   --컴파일러(컴파일)--> 오브젝트 파일
     (소스코드)                                   (이진코드)
      ex) .java                                       ex) .class

 오브젝트 파일    ----링커(링크)----> 실행파일
   (이진코드)                 +                   ex) .jar
    ex) .class         외부 라이브러리
                                     및
                              외부 리소스

컴파일 : 사람이 알아볼 수 있는 소스코드(사람의 언어)(ex. java)를 
              기계가 알아볼 수 있는 이진코드(기계언어)(ex.class)로 만들어 주는 작업
컴파일러 : 사람의 언어를 기계어로 바꾸어주는 장치

링크 : 만들어진 오브젝트 파일에 외부 라이브러리 및 리소스를 연결하여
         실행파일로 만드는 작업
링커 : 오브젝트 파일과 필요한 외부 라이브러리 및 리소스를 연결하는 장치

빌드 : 사람이 알아들을 수 있는 원시파일을 
         실제 컴퓨터에서 프로그램으로 돌릴 수 있게끔 만드는 일련의 과정
         컴파일 + 링크 하는 과정을 빌드라고 함(컴파일은 빌드 안의 부분집합으로 속해 있음)

빌드는 우리가 하는가? - 아니다!!
빌드를 하는 도구들이 존재
Java - ANT, gradle, Maven
 : 시간순으로 ANT -> Maven -> gradle
 : ANT 
          - 현대적인 빌드 도구(최초출시)
          - xml 사용하여 빌드스크립트 작성(수직계층 구조)
          - 절차적으로 작성
          - 유연성이 좋다.
          - 스크립트를 직접 명시 

  ==> xml과 절차적이라는 특징이 모순적 
            : 수직계층 구조로 빌드하는 xml을 절차적으로 
             작성한다는 것은 모순
            : ..쉬운말로 모자라다...;;
            : 유연성이 좋지만 스크립트를 직접 명시해야하는 부분이
              장점이자 단점(직접 짜면서 사용자 의도에 맞게 가능, 하지만 다 직접 명시)

 : Maven  
             - pom.xml 사용(그냥 xml이 아닌 pom.xml파일 사용하여 
                                       빌드 사용 명시)
             - 의존성 다운로드 가능(네트워크 상의 라이브러리를 직접 
                                                   클립 몇번으로 다운 가능)
             - 컨벤션(몇번의 코드 작성으로 나머지 다 Maven 처리, 간편함)
             - 사용자 의도에 맞는 로직개발이 어려움
 : gradle
             - Groovy/kotlin 언어 사용하여 작성
             - 유연성
             - 스크립트의 규모가 작음
               (Maven과 gradle 의존성을 추가할 때,
                Maven은 5~6줄 쓸 것을 gradle은 한 줄로 추가 가능)

.Net framework - Dnnat, ..
C# - MSBuild, ..

빌드 도구란?
소스코드로부터 실행 가능한 어플리케이션을 생성하는 것(빌드)을 자동화하는 프로그램

자동화란?
매번 반복해야 하는 일

ex ) 서비스 중인 프로그램의 코드를 수정하는 경우...
1. 코드 수정
2. Git에 올림
3. 컴파일
4. 빌드
5. 배포
6. 테스트 코드 작성
7. 테스트 수행
8. 검증

.. 이 일련의 과정들을 계속 수동으로 처리해야 하지만
이 과정 중에서 굳이 사람이 하지 않아도 될법한 절차들 존재..
이 존재들을 프로그램이 알아서 자동으로 하게끔 하는 것 
==> 그것이 "자동화"

빌드를 자동화 => 빌드 자동화
- 빌드 자동화가 하는 일
 : 의존성 다운로드
 : 소스 코드를 이진 코드로 컴파일
 : 이진 코드 패키징
 : 자동화된 테스트 실행
 : 프로덕션 시스템 배포

배포를 자동화 => 배포 자동화
테스트를 자동화 => 테스트 자동화

빌드 도구나 빌드 자동화는 왜 사용할까?(꼭 사용해야 할까?)
작은 규모의 프로젝트일 경우 개인적으로 빌드 스크립트를 짜면 됨
   : 규모가 작기 때문에 본인이 뭘 하는지 알 수 있고 파악하기 쉽기 때문
   ex ) 사람 하나
큰 규모의 프로젝트일 경우, 뭘 하는지 알 수가 없음
   : 규모가 너무 크기 때문에 어디있는 소스코드를 빌드하고 싶은지
     파악이 잘 되지 않음
   ex ) 넓은 광장에 가득 찬 사람

-- 그렇기 때문에 이 빌드 프로세스를 일관성있게 유지시키기 위해서
    "빌드 자동화"사용