빌드(Build)란 무엇일까?

maldaliza·2021년 6월 8일
0
post-thumbnail

빌드

1. 빌드란?

  • 소스코드 및 프로젝트에 쓰인 각각의 파일 및 자원 등을 JVM이나 WAS가 인식할 수 있는 구조로 패키징하는 과정 및 결과물.

2. 빌드 도구(Build Tool)

  • 프로젝트 생성, 테스트 빌드, 배포 등의 작업을 위한 전용 프로그램.
  • 계속해서 늘어나는 라이브러리, 프로젝트 진행 중 라이브러리 버전 동기화의 어려움 해소.
  • 초창기 Java 빌드 도구로 Ant가 많이 사용되었으나, 현재는 Maven, Gradle이 많이 쓰인다.

Maven

1. 정의 및 특징

  • Maven은 Java용 프로젝트 관리도구.
  • 프로젝트의 전체적인 라이프 사이클을 관리.
  • 필요한 라이브러리를 특정 문서(pom.xml)에 정의해놓으면 해당 라이브러리는 물론 해당 라이브러리가 작동하는데 필요한 다른 라이브러리까지 관리.
  • 간단한 설정을 통해 배포 관리가 가능.

2. POM

  • Project Object Model의 약자이며, pom.xml으로 표현된다.
  • 프로젝트 관리의 핵심요소이며, 여러가지 요소가 포함된다.

프로젝트 기본 정보

<modelVersion>4.0.0</modelVersion>
  • pom.xml 파일 양식의 "버전 정보"이며, 5.0.0은 아직 나오지 않았다.
<groupId>com.회사이름</groupId>
  • 다른 프로젝트들과 구별되는 유니크한 "패키지 이름"
  • 관례적으로 범위가 큰 것부터 작은 것 순으로 기술 ex) com.naver
<artifactId>모듈이름</artifactId>
  • 프로젝트에서 생성되는 jar, war 파일 등의 이름을 의미.
<version>artifact의 버전</version>
  • 프로젝트에서 생성되는 artifact의 버전을 의미.
  • 기본값으로 설정된 0.0.1-SNAPSHOT은 아직 개발 중이라는 뜻.
<packaging>artifact의 포맷</packaging>
  • 프로젝트에서 생성되는 artifact의 파일 포맷을 의미. ex) jar, war

프로퍼티

<properties>...</properties>
  • property는 값을 가진 상수라고 생각하면 된다.
  • property에 명시된 값들은 pom.xml에서 ${propertyname}의 형태로 참조할 수 있다.

저장소

<repositories>...</repositories>
  • 라이브러리를 받아올 저장소를 지정.

의존성

<dependencies>...</dependencies>
  • 의존성은 POM에서 가장 중요한 요소이다. (일관성 있는 프로젝트 관리가 가능해지기 때문)
  • Maven은 dependencies 요소에 명시된 의존성을 가져와주고(자동 다운로드), 해당 의존성이 의존하는 또다른 의존성(transitive dependencies)까지 가져와주기 때문이다.
  • 외부 라이브러리 jar 파일을 일일이 다운 받아 관리하던 것에서 아주 개선된 방식.

빌드

<build>...</build>
  • 프로젝트 빌드에 사용될 여러가지 플러그인 목록.

Gradle

1. 정의 및 특징

  • Gradle은 Groovy 언어를 기반으로 한 오픈소스 빌드 도구이다.
  • Build script를 xml이 아닌 Groovy 기반의 DSL(Domain Specific Language)를 사용. (설정 파일을 xml 파일로 사용하는 Maven보다 코드가 훨씬 간결하다.)
  • 꽤 큰 규모로 예상되는 multi-project 빌드를 지원.
  • Gradle 설치 없이 Gradle Wrapper를 이용해 빌드 지원.

gradle wrapper

  • 이미 존재하는 프로젝트를 새로운 환경에서 별도의 설치 없이 곧바로 빌드할 수 있게 함.
  • Java나 Gradle도 설치할 필요가 없음. (또한 버전도 신경 쓸 필요가 없다)
  • wrapper를 생성하면 사용자가 프로젝트를 만든 사람과 동일한 버전의 Gradle을 사용할 수 있음.
  • wrapper는 사용자가 Gradle이 설치되어 있지 않아도 Gradle tasks를 실행할 수 있도록 해주는 작은 script, jar 및 등록 정보 파일.
$ gradle wrapper

BUILD SUCCESSFUL in 602ms
1 actionable task: 1 executed

아래와 같이 파일이 생성.

.
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
└── gradlew.bat

2 directories, 5 files

gradlew

  • 유닉스용 실행 스크립트
  • Gradle로 컴파일 또는 빌드 등을 할 때, 아래와 같이 하면 로컬에 설치된 gradle을 사용.
gradle build
  • 이 경우 Java나 Gradle이 설치되어 있어야 하고, 새로받은 프로젝트의 Gradle 버전과 로컬에 설치된 Gradle 버전이 호환되지 않으면 문제가 발생할 수 있음. 따라서 Wrapper를 사용하면 아래와 같이 실행.
./gradlew build

gradle.bat

  • 윈도우용 실행 배치 스크립트
  • 윈도우에서 실행가능하다는 점만 제외하면 gradlew와 동일.

gradle/wrapper/gradle-wrapper.jar

  • Wrapper 파일
  • gradlew나 gradlew.bat 파일이 프로젝트 내에 설치하는 이 파일을 사용하여 gradle task를 실행하기 때문에 로컬 환경의 영향을 받지 않음.(실제로는 Wrapper 버전에 맞는 구성들을 로컬 캐시에 다운로드 받음)

gradle/wrapper/gradle-wrapper.properties

  • Gradle Wrapper 설정 파일
  • 이 파일의 wrapper 버전 등을 변경하면 task 실행시, 자동으로 새로운 Wrapper 파일을 로컬 캐시에 다운로드 받음.

build.gradle

  • 의존성이나 플러그인 설정 등을 위한 스크립트 파일.

settings.gradle

  • 프로젝트의 구성 정보를 기록하는 파일.
  • 어떤 하위 프로젝트들이 어떤 관계로 구성되어 있는지 기술.
  • Gradle은 이 파일에 기술된대로 프로젝트를 구성.

0개의 댓글