Gradle이란 ?
Gradle은 CI/CD를 위해 아래 작업들을 자동화 시켜 주는 Groovy 기반의 오픈소스 빌드 도구입니다.
- Compile - Java 파일의 소스 코드를 컴퓨터가 이해할 수 있도록 바이트 코드로 변환
- Test - 유닛 테스트, UI 테스트
- Packaging - 스프링 코드를 패키징 해 .jar 파일이나 .war 파일로 생성
- Deploy & Run - 서버 실행
빌드 도구란?
소프트웨어 개발에 있어서 소스 코드를 실행 가능한 어플리케이션으로 만들어주는 도구를 말합니다.
빌드 과정을 자동화하여 관리하는 기능을 하기 때문에 빌드 관리 도구 도는 빌드 자동화 도구라고 불리기도합니다.
Gradle Project 구성
- .gradle - gradle 버전 별 엔진 및 설정 파일
- .idea - 에디터 관련 파일들
- gradle/wrapper - 사용자가 Gradle을 설치하지 않았어도 Gradle tasks를 실행할 수 있도록 도와준다. (프로젝트 생성자와 사용자가 동일한 버전의 Gradle 사용가능)
- gradle-wrapper.jar - Wrapper 파일로 실행 스크립트가 동작하면 Wrapper에 맞는 환경을 로컬 캐시가 다운로드 받은 뒤 실제 명령에 해당하는 task 실행
- gradle-wrapper.properties - Gradle Wrapper 설정 파일
- gradlew - Unix용 실행 스크립트
- gradlew.bat - Windows용 실행 스크립트
- build.gradle - 의존성이나 플러그인 설정 등 프로젝트 빌드에 대한 모든 기능 정의.
- settings.gradle - 빌드할 프로젝트 정보 설정
빌드 도구 종류와 차이점
Ant (앤트)
자바 프로젝트 빌드 도구로 가장 널리 사용되던 빌드 도구였습니다.
Eclipse에 기본적으로 탑재되었으며, XML 스크립트를 기반으로 하였는데, 최근에 나온 빌드 도구들과 달리 자동으로 라이브러리를 업데이트 하는 기능이 없어
현재는 주로 레거시 시스템에서만 사용됩니다.
Maven (메이븐)
Ant이후에 나온 자바 빌드 도구로 자동으로 라이브러리와 의존성을 관리하는 기능이 있습니다.
Ant와 마찬가지로 XML 스크립트를 기반으로 하며, pom.xml 파일로 의존성을 관리합니다.
Maven에서는 라이프 사이클 개념이 도입되어 빌드 순서 등을 정의 할 수 있습니다.
Gradle (그래들)
가장 최근에 나온 자바 빌드 도구로 "Groovy (그루비)" 문법을 사용합니다.
build.gradle에 스크립트를 작성하며, 대규모 프로젝트에서 복잡해지는 경향이 있는 XML 기반 스크립트에 비해 관리가 편하다는 장점을 갖습니다.
Gradle은 현재 안드로이드 프로젝트의 표준 빌드 시스템으로 채택되어 있다고 합니다.
Gradle을 주로 사용하는 이유
1️⃣ 간결한 스크립트
Gradle 이전의 빌드 도구인 Ant와 Maven은 XML 문법으로 스크립트를 작성하였습니다.
하지만 XML은 태그 문법 때문에 복잡한 빌드 스크립트를 작성하기에는 까다로우며 가독성또한 떨어집니다.
반면, Gradle은 Groovy 문법으로 간결한 스크립트를 작성할 수 있습니다.
2️⃣ 빌드 속도
프로젝트 규모가 커지게 되면 빌드 속도 차이가 개발 생산성에 큰 영향을 미치게 됩니다.
Gradle은 캐싱(caching)을 하기 때문에 Ant나 Maven같은 이전 빌드 도구보다 빌드 속도가 빠르다는 장점을 갖습니다.
3️⃣ 멀티 프로젝트 빌드
대규모 자바 프로젝트는 대부분 하나의 프로젝트 안에 여러 모듈이 동시에 개발되고, 각 모듈이 공통으로 사용하는 모듈도 만들어지게 되는데
이렇게 여러 모듈이 동시에 개발되는 경우 각각 따로 빌드 작업을 하면 번거로울 뿐 아니라 실수가 발생할 수 도 있습니다.
하지만 Gradle은 멀티 프로젝트 빌드 기능을 제공하기 때문에 이런 번거로움과 실수를 줄일 수 있습니다.
'◼ JAVA' 카테고리의 다른 글
IntelliJ (인텔리제이) Window 유용 단축키 모음 (0) | 2023.05.01 |
---|---|
체크 예외(Exception)와 언체크 예외(RuntimeException) (0) | 2023.04.25 |
JSP(JavaServer Pages)와 Servlet(서블릿)이란? (0) | 2023.03.08 |
[Java/자바] java.time 패키지 (날짜와 시간 다루기) (0) | 2023.01.17 |
[Java/자바] Scanner 클래스 (입력받기) (2) | 2023.01.05 |