포스트

6. 빌드와 빌드 도구

빌드의 의마와 빌드 도구를 사용해 빌드해보자.

6. 빌드와 빌드 도구

Build (빌드)

Build(빌드)란? : 소스 파일 → 애플리케이션으로 만드는 제작 과정
제작 과정(= 빌드 과정)의 단계

  1. 컴파일
    • API 문서 생성 - 빌드를 관리하는 도구 = 빌드 도구(ex. Ant, Maven, Gradle)
  2. 링크(C에서만 진행)
  3. 테스팅
  4. 패키징
  5. 배포

빌드 도구와 JDK

빌드를 진행 할 때 빌드 도구를 통해 섬세한 빌드 관리를 할 수 있는데

  1. [소스 파일]
    ⇒(컴파일)⇒ → (빌드 도구 : javac, javadoc)
  2. [클래스 파일, API 문서]
    ⇒(단위테스트)⇒ → (빌드 도구 : java, jar)
  3. [테스트 결과문서, 패키징 파일]
    ⇒(배포)⇒ → (빌드 도구 : 배포 도구)
  4. [서버]

    위와 같은 절차를 거칠 때,
    개발자가 빌드 스크립트 파일로 빌드 도구를 이용, 빌드를 편리하게 설정, 관리할 수 있다.
    개발자 ⇒(작성)⇒ 빌드 명령(= 빌드 스크립트 파일) ⇒ 빌드 도구

빌드 도구에는 크게 3가지가 있는데 점점 부족한 부분을 보완하면서 발전해왔다.

  1. Ant : build.xml → 가장 초창기 빌드 도구
  2. Maven : pom.xmlAnt + 의존 라이브러리 관리(.jar 다운로드 해서 빌드할 때 사용)
    → jar = (Java Archive = 자바 실행과 관련된 파일을 한 파일로 묶은 것) (ex. .war, .ear, .tar)
    현재 대부분의 빌드 도구는 Maven을 사용하고 있다 대략 70%
  3. Gradle : build.gradleMaven + 프로그래밍 언어를 사용하여 빌드스크립트 파일 작성 가능.
    1. Maven때 까지 사용되었던 xml은 배치만 할 수 있는 언어였다.
    2. 세월이 지나면서 배치가 복잡해지며 이를 통제할 방법이 필요했다.
    3. 그래서 빌드 과정을 정교하게 제어할 수 있도록 빌드 스크립트 파일을 작성 할 수 있는 Gradle이 만들어짐
      • 빌드 스크립트 언어로는 groovy, kotlin이 있다.

maven 표준 프로젝트 디렉토리로 구성하기

gradle을 이용해 maven 표준 프로젝트 디렉토리를 구성하려고 한다.
→ gradle은 maven에 빌드 스크립트 파일 작성 기능 추가된 것, 표준 프로젝트 디렉토리는 maven과 동일하다

1
gradle init

초기화하려는 폴더에 가서 해당 명령문을 입력하면 자동 초기화 및 기본 구조를 만들어준다.

gradle 초기화 시 질문 과정
  1. 빌드 타입 선택
  2. 빌드하려는 프로젝트의 언어 선택
  3. 빌드하려는 프로젝트의 자바 버전 선택 미 입력 시 default 버전으로 생성
  4. 프로젝트 이름 입력 미 입력 시 상위 폴더 이름 = 프로젝트 이름으로 생성
  5. 프로젝트 디렉토리 구조 설정 1. 하나의 프로젝트인 구조
    2. 하나의 메인 프로젝트와 사이드 프로젝트의 구조
  6. 빌드 스크립트 언어 설정 미 선택 시 Kotlin 설정 > 하지만 현재 프로젝트에서는 Groovy로 설정함 (가장 많이 사용하는 언어임)
  7. 테스트 프레임워크 설정 미 선택 시 JUnit Jupiter 설정 됨
  8. 새로운 기능을 활용하여 빌드 할 것인지에 대한 설정 해당 부분은 새로운 기능을 이용해 빌드를 할 것인지.
    즉, LTS가 아닌 버전으로 빌드를 할 것인지 물어보는 것이다.
    yes일 경우 새로운 기능을 테스트 할 수 있다.(다음 마이너 버전에서 사라질 수 도 있는 위험성 존재)
    no일 결우 안정적인 빌드 운영이 가능하다.
짤 지식
  • build script file ← 명령문 언어(DSL = Domain-Specific Language) : Groovy, Kotlin
  • Archive = 문서 보관소
  • Jar = 항아리, 단지


Gradle Project 디렉토리 구조

gradle 초기화를 완료 할 경우 아래와 같은 구조가 자동 구성된다.

  • myapp/ ← root project 디렉토리
    • app/ ← main 프로젝트
      • src/
      • build.gradle ← main 프로젝트의 빌드 명세서
    • gradle/ ← gradle이 설치 안된 경우 자동으로 설치해주는 도구 폴더
      • wrapper/ ← 자동으로 설치해주는 도구
    • libs.versions.toml ← 의존 라이브러리 버전 정보
    • gradlew ← gradle이 로컬 컴퓨터에 설치 안된 경우 사용할 수 있는 도구 (자동으로 설치하여 실행 함)
    • gradlew.bat ← gradlew 와 동일한 기능 (but, gradlew = Linux, Unix용 / ~.bat = window용)
    • settings.gradle ← Gradle 메인 설정
    • .gitignore ← Git ignore 정보
    • .gitattributes ← Git 보조 설정 파일
짤지식
  • 파일이 없는 디렉토리는 git에 올라가지 않음
  • 회색 파일 : 일시적으로 만든 임시파일, git에 올라가지 않음

Gradle 빌드 및 실행

이제 초기화 된 폴더를 가지고 Gradle을 통해서 빌드를 해보려고 한다.

1
gradle build

app 폴더에 build 폴더가 만들어지면서 빌드가 완료된 모습이다.

추가로 test 폴더는 제외하고 소스 코드만 빌드하고 싶다면 해당 명령어를 사용하면된다.

1
gradle compileJava

위와 다르게 test 폴더 없이 main/org/example 폴더에 빌드된 모습이다.

이제 빌드 된 프로젝트를 실행을 해보자

1
gradle run

실행되어 Hello World!가 출력되는 것을 확인 할 수 있다.

그럼 어떻게 Gradle은 빌드시킬 이 앱의 경로를 찾아가는 것 인가에 대해 build.gradle 파일을 보게된다면…

해당 부분에 메인클래스의 경로를 지정하여 org.example.App를 찾을 수 있는 것이다. 만약 이부분을 삭제하게 된다면 당연하게도 빌드 시킬 메인클래스를 찾지 못해 빌드에 실패하게된다.

만약 이걸 Gradle 도움없이 자발적으로 컴파일 및 실행을 하려면…

  • 약간의 폴더 수정을 거치고 java로 직접 컴파일을 시도해보았다 (main/org/example 폴더 삭제) 상당히 긴 명령어를 거쳐서 컴파일을 해야한다…
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.