- 메이븐 : https://maven.apache.org
- 그레이들 : https://gradle.org/
먼저 빌드 툴을 쓰기 위해서는 빌드가 뭐인지를 알아야 할 것 같다.
예를 들어서 어린왕자라는 책을 우리가 보기까지의 과정을 살펴보면
1. 영어로 된 원서를 한글로 번역한다. : 컴파일
2. 원서를 인쇄해 책으로 만든다. : 빌드
3. 인쇄한 책을 서점에 비치한다. : 배포
의 과정으로 설명할 수 있다.
1번과 2번의 과정을 묶어 빌드(build) 한다 라고 할 수 있다.
다시 말해 배포하기 전의 과정을 빌드한다라고 할 수 있다.
참고 : https://itholic.github.io/qa-compile-build-deploy/
1. 빌드와 실행 ( Build )
프로그래밍적으로 본다면.
빌드란 소스 코드 파일을 컴퓨터에서 실행할 수 있는 것으로 변환시키는 과정을 말한다.
-> 여러 클래스와 코드들을 하나의 파일( Artifact )로 만드는 것.
빌드를 좀더 자세히 세분화 해본다면
- 소스 코드를 컴파일한다.
- 테스트 코드를 컴파일한다.
- 테스트 코드를 실행한다.
- 테스트 코드 리포트를 작성한다.
- 기타 추가 설정한 작업들을 진행한다.
- 패키징을 수행한다.
- 최종 결과물 ( Artifact)을 만들어 낸다.
정도로 나눌 수 있다.
테스트 코드- 내가 작성한 코드를 자동 테스트해 주는 코드를 추가로 작성한 것이다.
패키징 - 오픈 소스를 내가 사용한 코드와 하나로 묶는 작업.
빌드를 왜 자동화해야 하는가??
만약 빌드를 팀에서 수동으로 작성하게 된다면
여러 사람이 모든 코드를 하나로 합칠 때 (패키징) 분명히 실수가 생기기 마련이다.
실수를 한다고하면 인건비 , 시간 등의 자원 ( Resource )이 많이 들 수 밖에 없다.
빌드 툴
- 프로젝트에서 필요한 xml , properties , jar 파일들을 자동으로 인식하고 빌드 해주는 도구.
- 소스코드를 컴파일 , 테스트 , 정적분석 등을 하여 실행 가능한 앱으로 빌드해 준다.
- 프로젝트 정보 관리 , 테스트 빌드 , 배포 등의 작업을 진행해준다.
- 외부 소스 코드 ( 외부 라이브러리 ) 자동 추가 , 관리 : 외부 소스 코드의 버전 관리 등
그렇기 때문에 빌드를 자동으로 해 주는 빌드 자동화 툴이 필요한 것이며 , 그게 Ant , Maven , Gradle 이다.
1. 앤트 ( Ant )
특징
- Apache 재단에서 만들어졌다.
- 설정을 위해 xml을 사용한다.
- 간단하고 사용하기 쉽다.
단점
- 복잡한 처리를 할 때(규모가 커질 때) 빌드 스크립트가 엄청 보기 힘들어져 관리가 어렵다.
- 외부 라이브러리를 관리하는 구조가 없다.
- 라이프 사이클이 없다.
2. 메이븐 ( Maven )
라이브러리 추가 : https://mvnrepository.com/
특징
- Apache 재단에서 만들어졌다.
- Ant를 대체하기 위해 개발됨.
- 설정을 위해 pom.xml을 사용한다.
- 외부 라이브러리를 관리할 수 있다.
- 빌드 스크립트를 깔끔하게 만들 수 있게 도와준다.
- Ant가 가지고 있는 단점들을 대부분 극복. ( 라이프 사이클 도입)
단점
- 특정 경우에 xml이 복잡해진다.
- xml 형태가 가지는 자체적인 한계가 있다.
대표 태그 설명
태그 | 설명 |
modelVersion | maven의 버전을 의미 |
groupId | 프로젝트 그룹 id를 뜻하고 , 통상적으로 도메인을 역순으로 적어 사용. (beetrb.test -> test.beetrb) |
artifactId | groupId 외에 다른 프로젝트와는 구분될 수 있는 프로젝트의 id를 작성 |
version | 프로젝트의 버전을 의미하고, 개발 단계에 따라 구분하여 작성. (ex : 1.0.3) |
name | 프로젝트의 이름 |
description | 해당 프로젝트의 간략한 소개,설명을 작성 |
properties | pom.xml 파일 내에서 자주 사용되는 중복 상수를 정의하는 영역 ${태그명} 으로 사용 |
dependencies | 의존성을 가지고 사용하는 라이브러리를 정의. <dependency> 태그 사용하여 구분 |
buid | 프로젝트 빌드와 관련된 정보를 설정하는 영역 (어떤 테스트 , 어떤걸 jar로 만들지 등 설정) |
3. 그레이들 ( Gradle )
특징
- 설정을 위해 pom.xml 대신 build.gradle (Groovy 스크립트)를 사용한다. (Groovy는 JVM 언어)
- xml의 한계가 없기 때문에 유연하게 빌드 스크립트를 작성할 수 있다.
- 외부 라이브러리를 관리할 수 있다.
- 안드로이드 프로젝트 표준 빌드 시스템.
- 멀티 프로젝트(Multi-project)의 빌드에 최적화하여 설계됨.
- 캐싱이 되어 성능이 좋다. (Maven에 비해 최대 100배 )
- Maven에 비해 더 구성이 간결하다.
- 설치 없이 사용할 수 있다.(Gradle Wrapper)
태그 | 설명 |
repositories | 라이브러리가 저장된 위치를 설정. |
mavenCentral | 기본 Maven Repository |
dependencies | 라이브러리 사용을 위한 의존성 설정 |
내가 배우려고 하는건 gradle 이기 때문에, 다음에 gradle 사용법을 조금 더 정리하려고 한다.
'Spring' 카테고리의 다른 글
JPA(Java Persistence Api) 사용하기 (0) | 2022.03.26 |
---|---|
Spring Boot 폼 입력 유효성 검사(Form Validation ) (0) | 2022.03.24 |
Spring Boot Devtools의 간략한 설명 (0) | 2022.03.23 |
스프링의 컨테이너 BeanFactory , ApplicationContext (0) | 2022.01.18 |
스프링 주요 특징 (0) | 2021.10.16 |