파이썬 개발만 해왔던 내가 코틀린으로 스프링부트 프로젝트를 공부하면서 '빌드도구'의 개념이 가장 낯설었다.
그래서 Gradle과 Maven과 같은 빌드도구를 알아보려고 한다.
빌드도구란?
빌드 자동화를 수행해주는 도구.
즉, 소스코드를 실행가능한 프로그램으로 만드는 과정(빌드)을 자동화 해주는 툴이라고 보면 된다.
기본적으로 빌드(build)란,
코드를 컴파일해서 binary code로 만들고, 패키징하고 코드를 테스트해서 이제 실행가능한 프로그램으로 만들기까지 과정인데
이걸 빌드도구가 자동화해주는 것이다.
왜 빌드도구가 필요한가?
우선 빌드하기까지 과정을 살펴보면 아래와 같다.
- 종속성 다운로드
- 소스코드-> binary code 컴파일
- binary code 패키징
- 테스트실행
- 시스템배포
이러한 빌드프로세스를 직접 무엇을 어떤 순서로 어떤 의존성이 있는지 직접 추적해서 적용하기엔 번거로워서 빌드도구가 있다.
빌드도구 역사
대표적인 빌드도구는 Maven과 Gradle이 있다.
그런데 빌드도구의 히스토리를 찾아보니까 다 한번쯤 들어봤다.. 생각보다 나 개발고인물일지도?
- 1세대 : Make - 빌드 초창기 개념
- 2세대 : Ant - 빌드의 범용성을 높이고, java,xml에 도입
- 3세대 : Maven - Ant에서 작성효율을 높인 빌드(XML언어기반)
- 4세대 : Grade - Maven보다 빠르며 스크립트언어기반 빌드
최근까지도 Maven을 쓰는것 같지만 그래도 가장 최신인 Gradle이 가장 익숙하다.
Maven vs Gradle
그래도 아직까지 spring 프로젝트를 시작하려고 하면 Maven과 Gradle을 선택할수 있게 되어있다.
그래서 나는 처음에 뭣도모르고 Maven기반으로 시작했다가 복잡한 xml 설정때문에 Gradle로 갈아탔다...
Gradle을 쓰는 이유
속도가 빠르다.
Gradle에서 직접 제공하는 Gradle과 Maven의 비교문서에 따르면 Gradle은 Maven보다 최대 100배까지 빠르다고한다.
가독성이 높다.
Maven 같은 경우 설정내용을 XML로 정의해야한다.
그래서 의존관계가 복잡한 프로젝트일경우 무한의 <> 꺽쇄굴레에 빠져야한다..
예를 들어 maven의 코드를 보면 아래와 같다. pom.xml에 필요한 라이브러리들을 정의할 수 있다.
같은 내용을 gradle로 정의한건 아래와 같다. 훨씬 코드가 간단하고 상속이나 의존관계를 조금더 직관적으로 확인할 수 있다.
설정주입방식(configuration injection) 사용
maven같은 경우 특정 설정을 몇개의 모듈에 공유하기 위해서는 부모프로젝트를 상속해야했다.
그래서 Build라는 동적인 요소를 xml로 정의하는데 어느정도 한계가 있었다. (안써봐서 잘모름)
하지만, gralde같은 경우 설정주입방식을 사용해서 공통모듈을 바로 상속해서 사용할수 있다.
그러다보니 설정주입시 프로젝트 조건도 체크할수 있어서 프로젝트별로 설정을 다르게 지정할 수도 있고,
이걸 groovy 스크립트로 플러그인을 호출하거나 직접 코드를 짜면 된다.
참고
https://velog.io/@bye9/Maven-gradle-%EC%BD%94%EB%93%9C-%ED%91%9C%EA%B8%B0%EB%B2%95
https://velog.io/@imok-_/Maven%EA%B3%BC-Gradle-%EC%B0%A8%EC%9D%B4
'🍃 Language > Kotiln' 카테고리의 다른 글
[Kotlin] 코틀린 기본문법3 (클래스와 컬렉션: List/Map/Set) (0) | 2022.01.30 |
---|---|
[Kotlin] 코틀린 기본문법2 (NULL처리 : lateinit/lazy/!!/?/?.) (0) | 2022.01.30 |
[Kotlin] 코틀린 실행하기 - Scratch File (스크래치 파일) 만들기 (0) | 2022.01.30 |
[Kotlin] Intellij에서 코틀린 코딩컨벤션 Kotlin Style Guide 적용하기 (0) | 2022.01.29 |
[Kotlin] 코틀린 기본문법1 (변수선언/함수선언/자료형/반복문/조건문) (0) | 2022.01.29 |
[Kotlin] ⚡️코틀린 특징 - 코틀린이란? 도대체 왜 쓰는가? (0) | 2022.01.29 |