본문 바로가기

개발기술/빌드, 배포, 운영

빌드와 Gradle 개념

빌드개념 설명

  • 빌드(Build) : 소스 코드를 컴파일, 테스트, 패키징 등을 실행하여 컴퓨터가 실행할 수 있는 실행 파일로 만드는 과정

  1. 컴파일 (Compile) : 프로그래밍 언어로 작성된 소스 코드를 기계어로 변환하여 실행 가능한 파일로 만드는 과정입니다. 예를 들어, Java 코드(.java)를 바이트 코드(.class)로 변환합니다. 페이지들을 한글로 번역하기
  2. 패키징 (Packaging) : 컴파일된 파일을 하나의 패키지로 묶어 배포 가능한 형태로 만드는 단계입니다. Java에서는 .jar 파일이나 .war 파일로 패키징할 수 있습니다. 파일들을 책으로 묶기
    • PlainJar :  .class 파일들과 해당 클래스에서 사용하는 리소스(이미지 등)을 포함. 외부라이브러리를 포함하지 않아 주로 다른 프로젝트의 종속성으로 사용될때 사용
    • Jar : .class 파일들과 정적자원(이미지 등) 웹 어플리케이션이 의존하는 라이브러리나 외부모듈(프레임워크, 라이브러리, DB드라이버)등을 포함. 내장형서버 (톰캣)을 포함시켜 웹 프로젝트를 압축한 파일. 외부 웹서버 없이 단독으로 실행, 배포가능.
    • War : Jar와 달리 웹 애플리케이션(was)가 필요함
  3. 의존성 관리 (Dependency Management) : 필요한 외부 라이브러리나 모듈을 다운로드하고 프로젝트에 포함시켜 빌드할 수 있도록 합니다. 예를 들어 Gradle이나 Maven을 사용하여 의존성을 관리합니다. 의존성들도 책으로 묶기
  4. 테스트 실행 (Testing) : 코드를 빌드하면서 자동으로 작성된 테스트 코드를 실행해 코드가 의도대로 작동하는지 확인합니다. 
  5. 배포 가능 상태로 준비 (Preparing for Deployment) : 환경 설정 파일 등을 포함해 실행에 필요한 모든 파일을 배포할 준비가 된 상태로 패키징합니다.

Gradle 설명

12년도에 출시된 Groovy기반의 오픈소스 빌드도구. 거의 모든 타입의 소프트웨어를 빌드할 수 있는 빌드 자동화 시스템. 

Gradle 도입배경

빌드 자동화 시스템 도입배경

  • 빌드 스크립트 수작업 진행의 어려움
  • 프로젝트 의존성의 직접 다운로드 관리, 프로젝트 의존성 파악의 어려움

Gradle 이전의 빌드 자동화툴

  Apache Ant Maven
장점
  • 기본적인 컴파일, 패키징, 배포작업 수행가능
  • XML 기반의 스크립트 사용
  • 작성에 정해진 규칙이 없어 유연성을 가짐
  • 정해진 라이프사이클에 따라 빌드 진행
  • pom.xml 파일 사용
  • 라이브러리 의존성 자동관리 기능 추가
단점
  • 라이브러리 의존관계를 정의하는 구조의 부재
  • 정해진 규칙이 없어서 유지보수하기 어려움

  •  xml 파일 기반으로 가독성이 좋지 않음, 의존관계가 복잡한 프로젝트에는 부적합
  • 상속구조를 이용한 멀티모듈 구현

 

.gradle as 빌드 스크립트

.gradle 파일은 groovy 기반의 스크립트 언어(DSL)로 작성된 파일이다. 

 

Groovy

Groovy는 JVM 위에서 실행되는 언어로서, Java와 유사한 문법 구조를 가지고 있으며 Java와의 호환성이 뛰어나 Java 생태계 내의 프레임워크와 라이브러리를 모두 활용할 수 있다. Kotlin과 같이 Java기반의 응용언어이다

 

스크립트(Script)란?

스크립트는 컴퓨터 프로세서가 직접 실행하지 않고, 다른 프로그램이 해석하고 실행하는 명령어 집합입니다.

 

도메인 특화 언어(DSL)란?

DSL은 특정 문제 영역(여기서는 빌드)에 최적화된 프로그래밍 언어나 스크립트입니다. 구문의 문법이 특정작업에 특화되어 가독성이 뛰어나며 코드가 최적화되어있어 수행속도가 빠르다. 추상화와 최적화의 관계가 Java와 어셈블리어의 관계와 유사하다

 

Gradle은 Groovy 언어를 기반으로 특정 목적을 가진 스크립트 언어(DSL)를 만들어 사용한다. 즉, Gradle의 빌드 스크립트는 Groovy DSL을 활용하여 빌드, 테스트, 배포와 같은 작업을 정의하거나 기존 task의 실행을 설정하는 언어이다. 스크립트는 Gradle 실행 환경에서 해석되어 실행된다. 

 

.gradle의 빌드 스크립트로써 특성

 

Gradle 빌드 스크립트는 DSL로 작성:

  • Groovy 또는 Kotlin DSL로 작성된 파일(build.gradle 또는 build.gradle.kts)입니다.
  • 프로젝트의 빌드, 의존성 관리, Task 정의 등을 설정합니다.

Task 기반:

  • Gradle은 특정 작업을 실행하는 실행 단위인 task 의 집합으로 구성됩니다.
  • Task는 Gradle에서 실행 가능한 기본 실행 단위로, 코드 컴파일, 테스트, 배포 등의 작업을 담당합니다.
  • 주로 task들은 Plugin으로써 여러 task의 묶음으로 존재하고 있고 개발자는 plugin 호출로 미리 정의된 task들을 실행시킬 수 있다.
  • 그외, 개발자는 사용자 정의 작업을 작성할 수 있다. (예: task myTask { ... }).

 

 

 

Task 의존관계

  • task를 실행하면 gradle은 연관관계를 파악해서 가장 하위부터 순서대로 실행한다.
  • Gradle의 build Task는 일반적으로 프로젝트의 전체 빌드 과정을 처리하는 Task입니다.
  • 이 Task는 프로젝트에서 정의된 여러 하위 Task를 의존성으로 실행하며, 최종적으로 빌드 결과를 생성합니다.

 

https://www.dhiwise.com/post/kotlin-dsl-vs-groovy-which-should-you-use-for-build-files

Gradle 장점

  • 프로젝트를 설정주입 방식으로 정의
    • maven의 상속구조보다 재사용에 용이
    • 프로젝트의 조건을 체크할 수 있어서 프로젝트별로 주입되는 설정을 다르게 할 수 있다
  • 멀티 프로젝트 빌드 용이
    • 모듈 공통 gradle과 모듈별 gradle을 분리하여 관리할 수 있어 코드 중복성을 줄일 수 있다.
  • 빌드 속도가 빠름
    • 점진적 빌드 
      • gradle은 빌드 실행 중 마지막 빌드 호출 task의 입력, 출력 혹은 구현이 변경되었는지 확인한다
      • 최신 상태로 간주하지 않는다면 빌드는 실행되지 않는다
    • 빌드캐시
      • 두개 이상의 빌드가 돌아가고 하나의 빌드에서 사용되는 파일들이 다른 빌드에 사용된다면 gradle은 빌드 캐시를 이용해 이전 빌드의 결과물을 다른 빌드에서 사용할 수 있다
      • 다시 빌드하지 않게되므로 빌드 시간이 줄어들게 된다
    • 데몬프로세스 : 서비스의 요청에 응답하기 위해 오래동안 살아있는 프로세스
      • gradle의 데몬프로세스는 메모리 상에 빌드 결과물을 보관
      • 이로 인해 한번 빌드된 프로젝트는 다음 빌드에 매우 적은 시간만 소요된다

 

Gradle 결과물

    • Executable JAR (project-name-version.jar)
      • 모든 의존성을 포함하며 바로 실행 가능.
      • bootJar 태스크에 의해 생성됨.
      • 실행 방법: java -jar 명령어로 실행.
      • 용도: 애플리케이션 배포 및 실행.
    •  Plain Jar (project-name-version-plain.jar)
      • 직접 실행할 수 없음.
      • jar 태스크에 의해 생성됨.  실행 가능한 JAR 파일 대신, 라이브러리로 사용될 수 있는 파일을 만듭니다.
      • 프로젝트가 다른 프로젝트의 라이브러리로 포함될 때 사용.

 

 

 

'개발기술 > 빌드, 배포, 운영' 카테고리의 다른 글

Jenkins CI/CD 자동화  (0) 2025.01.26
Gradle 빌드 사용법  (0) 2025.01.02
빌드 파일 서버 배포  (0) 2024.11.12
Docker 개념 및 커맨드  (0) 2024.11.09
리눅스  (0) 2024.01.24