일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 서버
- 어노테이션
- 정처기필기
- spring
- 시계열디비
- 빌드자동화도구
- PULL방식아키텍쳐
- 생성자
- Java8
- API
- 정보처리기사
- Docker
- 무중단배포
- aws
- 롬복사용시주의할점
- git
- 자바
- 프로그래머스
- 빌드스크립트
- CICD
- java
- 정처기공부
- controller
- 알고리즘
- 롬복
- 완전탐색알고리즘
- 롬북
- 정처기
- 정보처리기사필기
- Groovy문법
- Today
- Total
우당탕탕 개발일지
Gradle(그래이들) 개념 및 특징 본문
Gradle(그래이들)이란?
유연성과 성능에 중점을 둔 오픈 소스 빌드 자동화 도구
Groovy Script 를 이용한 Build 자동화 시스템
같은 빌드 도구인 Ant, Maven의 장점을 모아 2012년에 출시
Android OS의 빌드 도구로 채택
간결함 / 빠른 속도 / 유연성 / 확장성 / 다양하고 많은 문서화 등의 장점이 있음
📌 빌드 관리 도구 ( = Gradle / Maven / Ant )
- 프로젝트에서 필요한 xml, properties, jar 파일들을 자동으로 인식하여 빌드해주는 도구
- 빌드 되기전 미리 소스 코드를 컴파일, 테스트, 정적분석 등을 하여 실행가능한 앱인지 확인 및 빌드 실행을 해줌
- 프로젝트의 정보 관리, 테스트 빌드, 배포 등의 작업을 해줌
- 배포작업 ⇒ 배포가 되는 위치로 빌드 된 jar, war 파일을 제공해줌
- 외부 라이브러리를 참조하여 자동으로 다운로드 및 업데이트 관리 해줌
- 개발 된 제일 주된 목적
- 개발 전엔 필요한 라이브러리가 있다면 모두 다운받아 라이브러리에 수동으로 추가해주고, 버전 업이 되었는지까지 개발자가 직접 확인하는 작업이 필요했다. ⇒ 이런 번거로운 부분을 빌드 관리 도구가 관리해줌
📌 Groovy 문법
- JVM 위에서 동작하는 동적 타입 프로그래밍 언어
- JVM 언어 중 하나로 DSL에 의한 확장성이 좋은 언어
- Java와 유사한 문법 구조로 학습에 용이
- Java처럼 소스 코드를 컴파일하여 클래스를 생성할 수도 있고, 컴파일을 거치지 않고 직접 실행할 수도있어 스크립트로 사용할 수 있음
- Java 뿐 아니라 Python, Ruby 등에 많은 영향을 받은 프로그래밍 언어로 문법이 간결함
- 대부분 Gradle Script를 작성하기 위해 사용되고 있음
- Gradle Kotlin이 등장하고 나서는 Gradle Groovy를 Gradle Kotlin으로 많이 전환하는 추세임
✅ Gradle 기능
- Incremental Builds (증분 빌드)
Java Complie과 같은 내장 작업은 입력 집합(Java소스파일)과 출력 집합(class파일)을 선언 Gradle은 위의 정보를 사용하여 작업이 최신 상태이고, 작업을 수행해야하는지를 확인 입/출력이 변경되지 않은 경우 Gradle은 해당작업을 건너뛸 수 있음 ⇒ 불필요한 빌드를 또 할 필요가 없음
- Build Caching (캐싱 구축)
작업이 다른 컴퓨터에서 이미 실행 된 경우 Gradle은 로컬에서 실행을 건너뛰고 대신 빌드 캐시에서 작업의 출력을 로드할 수 있음
- Incremental Subtasks (증분 하위 작업)
Gradle은 빌드 실행 간에 작업의 입/출력이 변경되었음을 발견하면 작업이 다시 실행됨 task incremental API를 사용하여 어떤 파일이 변경되었는지를 알 수 있기 때문에 모두 빌드 할 필요없이 변경된 작업만 독립적으로 빌드할 수 있음
- Incremental Annotation Processing (증분 주석 처리)
- Parallel Execution(병렬 실행)
Worker API를 통해 작업 및 작업 내 작업의 병렬 실행을 허용함 ⇒ 병렬 처리는 매우 세분화되기 때문에 성능이 훨씬 빨라짐
- Task timeouts (작업시간 초과)
모든 task에 실행 시간을 제한하는 데 사용되는 제한 시간 속성이 존재함 작업이 제한 시간에 도달하게 되면 해당 작업 실행 스레드가 중단되고 빌드가 완료될 수 있음
✅ Gradle 기본 구조
- 모든 Gradle Script는 하나 이상의 Project로 구성됨 / 모든 Project는 하나의 task로 구성됨
- Gradle Script > Project > task
- Project
- 소스를 jar로 모으거나, 자바 프로젝트를 컴파일 하거나, 테스트를 실행하고, 어플리케이션을 배포하는 등의 업무로 구성된다.
- Task
- 작업의 최소 단계
- Project
- Gradle Script > Project > task
- Gradle은 자바 6버전 이상의 JVM 환경에서 사용가능
- Gradle 설치 또는 Gradle wrapper를 이용하여 실행환경을 구성
✅ Gradle 용어
- /.gradle /gradle
- gradle 버전별 엔진 및 설정 파일
- /.idea
- 에디터 관련 파일들
- /gradlew /gradlew.bat
- gradle 명령파일
- gradlew : Unix용 실행 스크립트 / gradlew.bat : Windows용 실행 스크립트
- /settings.gradle
- 빌드할 프로젝트 정보 설정(트리형태로 멀티프로젝트 구성)
- /build.gradle
- 프로젝트 빌드에 대한 모든 기능 정의
- 의존성이나 플러그인 설정 등을 위한 스크립트 파일
- /src
- 자바소스파일
- /gradlew-wrapper.jar
- Wrapper 파일
- /gradle-wrapper.properties
- Gradle Wrapper 설정 파일
- Gradle Wrapper
- 사용자가 Gradle을 설치하지 않았어도 Gradle tasks를 실행할 수 있도록 도움
- 프로젝트 생성자와 사용자가 동일한 버전의 Gradle 사용할 수 있음
- repositories
- 라이브러리가 저장된 위치 등 설정
- mavenCentral() : 기본 Maven Repository
- dependencies
- 라이브러리 사용을 위한 의존성 설정
✅ Gradle Life-Cycle
1. (Script)초기화 단계
Gradle의 Script 파일을 읽거나 Gradle의 도메인 객체가 생성되는 단계
- Script 파일 확인 및 읽기
- 멀티 or 싱글 프로젝트 판단 ⇒ settings.gradle 로 확인 ⇒ Setting 객체 생성
- Gradle을 이용한 멀티 프로젝트 관리 ( https://jojoldu.tistory.com/123 )
- Setting 객체를 이용하여 각 프로젝트의 org.gradle.api.Project 객체 생성
- 명령어 옵션 및 인수 설정
2. 구성 / 프로젝트 설정 단계
프로젝트를 빌드하기 위해 필요한 정보 및 자원들에 대한 설정이 이루어지는 단계
- 참조 중인 라이브러리 확인 ⇒ build.gradle
- build.gradle에 있는 task를 읽어 Task Container를 이용하여 task 객체 및 task 그래프 생성
3. task 실행 단계
그래프에서 대상이 되는 task를 확인하여 빌드를 실행
- task 추출 및 실행
✅ Ant vs Maven vs Gradle
Ant
- xml 기반의 빌드 스크립트
- 빌드 기능만 가지고 있음
- 그 외 기능은 개발자가 수동으로 관리 해줘야함
- 라이브러리 추가 or 버전 관리등
- 자유로운 빌드 단위 지정
- 간단하고 사용하기 쉬움
- Life-Cycle 없음
Maven
- 자바의 대표적인 관리 도구
- Ant를 대처하기 위해 개발
- 프로젝트 외부 라이브러리를 쉽게 참조할 수 있게 pom.xml 파일로 명시하여 관리
- 라이브러리 추가 시 해당 라이브러리가 참조되고 있는 다른 라이브러리까지 관리
- Life-Cycle 도입
- pom.xml로 편하게 라이브러리/의존성 관리
⇒ xml 기반의 빌드는 대규모 프로젝트로 갈 수록 복잡해짐
⇒ Life-Cycle이 중요한 이유?
- 빌드의 순서를 지정할 수 있음
- 빌드가 잘 못 된 경우 싹 밀고 새롭게 빌드를 할 수 있음
Gradle
- Maven에 비해 더 빠른 처리 속도를 가지고 있음
- 멀티 프로젝트(Multi-Project) 빌드에 최적화하여 설계
- Maven에 비해 더 간결한 Script 구성이 가능함
- 이유? Groovy 언어로 Script 작성하기 때문
- xml로 스크립트를 작성하면 태그로 되어있기 때문에 태그 열고 닫고, 위상에 대한 정렬도 해줘야하기 때문에 Groovy로 작성한 스크립트 보다 복잡함
- 아직까지는 메이븐이 점유율이 높지만 Gradle이 점점 치고 올라오는 추세
- 지금까지 메이븐으로 빌드 관리를 해왔기 때문에 갑자기 변경되긴 어려운것
- 대규모 프로젝트에서 성능이 좋음
- 간략하고 간편한 스크립트 작성
- 빌드 재사용 가능 ⇒ 빌드가 된건 패스하는 기능이 있음
- Gradle을 설치할 필요없이 사용할 수 있음(⇒ Gradle Wrapper)
- Maven : pom.xml / Gradle : build.gradle
📚 참고자료
https://www.youtube.com/watch?v=3Jp9kGDb01g
외부라이브러리 대표 사이트 : https://mvnrepository.com/
Gradle 공식 사이트 : https://docs.gradle.org/current/dsl/
Gradle DSL Version 8.0.2
A build script is made up of zero or more statements and script blocks. Statements can include method calls, property assignments, and local variable definitions. A script block is a method call which takes a closure as a parameter. The closure is treated
docs.gradle.org
Groovy : https://honeyinfo7.tistory.com/242
그레이들의 라이프 사이클과 그루비
이글은 오늘 아침에 공부한 그레이들의 내용을 정리한 글이다. 금일 오전에는 그레이들의 빌드 라이프 사이클과 그루비가 어떤 것인지 약간의 맛보기 형식으로 공부를 진행하였다. 그러면 정리
honeyinfo7.tistory.com
'개발' 카테고리의 다른 글
[Lombok] @Data 사용법 (0) | 2023.05.31 |
---|---|
[Lombok] @AllArgsConstructor / @NoArgsConstructor (0) | 2023.04.27 |
좋은 객체 지향 설계의 5가지 원칙(SOLID) (0) | 2022.12.15 |
[Lombok] RequiredArgsConstructor 어노테이션이란? (0) | 2022.12.06 |
[Lombok] RequiredArgsConstructor 어노테이션이란? (0) | 2022.11.28 |