6. 빌드와 빌드 도구
빌드의 의마와 빌드 도구를 사용해 빌드해보자.
Build (빌드)
Build(빌드)란? : 소스 파일 → 애플리케이션으로 만드는 제작 과정
제작 과정(= 빌드 과정)의 단계
- 컴파일
- API 문서 생성 - 빌드를 관리하는 도구 = 빌드 도구(ex. Ant, Maven, Gradle)
- 링크(C에서만 진행)
- 테스팅
- 패키징
- 배포
빌드 도구와 JDK
빌드를 진행 할 때 빌드 도구를 통해 섬세한 빌드 관리를 할 수 있는데
- [소스 파일]
⇒(컴파일)⇒ → (빌드 도구 : javac, javadoc) - [클래스 파일, API 문서]
⇒(단위테스트)⇒ → (빌드 도구 : java, jar) - [테스트 결과문서, 패키징 파일]
⇒(배포)⇒ → (빌드 도구 : 배포 도구) - [서버]
위와 같은 절차를 거칠 때,
개발자가 빌드 스크립트 파일로 빌드 도구를 이용, 빌드를 편리하게 설정, 관리할 수 있다.
개발자 ⇒(작성)⇒ 빌드 명령(= 빌드 스크립트 파일) ⇒ 빌드 도구
빌드 도구에는 크게 3가지가 있는데 점점 부족한 부분을 보완하면서 발전해왔다.
- Ant : build.xml → 가장 초창기 빌드 도구
- Maven : pom.xml → Ant + 의존 라이브러리 관리(.jar 다운로드 해서 빌드할 때 사용)
→ jar = (Java Archive = 자바 실행과 관련된 파일을 한 파일로 묶은 것) (ex. .war, .ear, .tar)
현재 대부분의 빌드 도구는 Maven을 사용하고 있다 대략 70% - Gradle : build.gradle → Maven + 프로그래밍 언어를 사용하여 빌드스크립트 파일 작성 가능.
- Maven때 까지 사용되었던 xml은 배치만 할 수 있는 언어였다.
- 세월이 지나면서 배치가 복잡해지며 이를 통제할 방법이 필요했다.
- 그래서 빌드 과정을 정교하게 제어할 수 있도록 빌드 스크립트 파일을 작성 할 수 있는 Gradle이 만들어짐
- 빌드 스크립트 언어로는 groovy, kotlin이 있다.
maven 표준 프로젝트 디렉토리로 구성하기
gradle을 이용해 maven 표준 프로젝트 디렉토리를 구성하려고 한다.
→ gradle은 maven에 빌드 스크립트 파일 작성 기능 추가된 것, 표준 프로젝트 디렉토리는 maven과 동일하다
1
gradle init
초기화하려는 폴더에 가서 해당 명령문을 입력하면 자동 초기화 및 기본 구조를 만들어준다.
gradle 초기화 시 질문 과정
- 빌드 타입 선택
- 빌드하려는 프로젝트의 언어 선택
- 빌드하려는 프로젝트의 자바 버전 선택
미 입력 시 default 버전으로 생성
- 프로젝트 이름 입력
미 입력 시 상위 폴더 이름 = 프로젝트 이름으로 생성
- 프로젝트 디렉토리 구조 설정
1. 하나의 프로젝트인 구조
2. 하나의 메인 프로젝트와 사이드 프로젝트의 구조 - 빌드 스크립트 언어 설정
미 선택 시 Kotlin 설정 > 하지만 현재 프로젝트에서는 Groovy로 설정함 (가장 많이 사용하는 언어임)
- 테스트 프레임워크 설정
미 선택 시 JUnit Jupiter 설정 됨
- 새로운 기능을 활용하여 빌드 할 것인지에 대한 설정
해당 부분은 새로운 기능을 이용해 빌드를 할 것인지.
즉, 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 보조 설정 파일
- app/ ← main 프로젝트
짤지식
- 파일이 없는 디렉토리는 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 도움없이 자발적으로 컴파일 및 실행을 하려면…