본문 바로가기
공부

빌드란 ?, 빌드 도구 Gradle, gradle build vs ./gradlew build

by son_i 2024. 4. 28.
728x90

프로젝트를 하면서 밥먹듯이 하는게 컴파일 빌드 실행 과정인데 부끄럽게도 빌드가 정확히 무슨 역할인지는 잘 모르고 있었던 것 같다.

 

GitHub Actions로 CI코드를 작성하면서 build를 하는 코드 부분에 gradle build와 gradlew build의 차이점을 찾아보다가 

빌드부터 제대로 공부하기로 하였다.

 


개발자가 코드를 작성하여 서버에 작성하는 것 - "배포"

배포(Deploy)를 하기 위한 과정 - "빌드"

 

빌드란 ?

컴파일된 소스 코드를 실행 가능한 애플리케이션으로 만들어주는 과정.

 

ex) Java 프로젝트를 진행한다면 개발자가 작성한 A.jaca와 열어가지 정적 파일에 해당하는 resource가 존재.

 

- 빌드 : 소스코드(.java)를 컴파일해 바이트코드(.class)로 변환하고 resource를 .class에서 참조할 수 있는 적절한 위치로 옮기고 META-INF와 MANIFEST.MF들을 하나로 압축하는 과정을 의미.

 

   * 컴파일 : java는 컴파일의 결과로 JVM에서 실행가능한 .class 파일이 생김.
      컴파일 != 빌드. 컴파일은 빌드를 진행하는 과정 중의 하나.
       => 소스코드를 컴퓨터가 이해할 수 있는 기계어로 변환하는 작업.

 

- 빌드과정 : 컴파일, 테스트, 정적분석, 배포 등의 과정이 포함.

 

- 빌드 : 수많은 라이브러리들을 자동 추가 및 관리하여 프로젝트 진행을 도와주고 라이브러리 버전을 쉽게 동기화 해줌.

  (빌드를 직접 해주면 개발자들간 버전관리도 어렵고 다운받은 jar 파일의 보안 위험도 존재.)

 

  빌드 툴의 종류 : Ant, Maven, Gradle

 

* Build = Complie + etc
* Run = Build + 실행
         (Compile + etc) + 실행

 


빌드도구 Gradle

GitHub Actions에서 workflow 템플릿에서 빌드 하는 부분이 두 가지 였는데

첫 번째에는 ./gradlew build,

두 번째에는 주석처리가 되어있고 gradle build로 되어있었으며 위에 설명으로 아래와 같이 되어있었다.

 

"

# 참고: Gradle Wrapper는 Gradle(https://docs.gradle.org/current/userguide/gradle_wrapper.html) 을 실행하는 기본 및 권장 방법입니다.
# 프로젝트에 Gradle Wrapper가 구성되지 않은 경우 다음 구성을 사용하여 지정된 버전으로 Gradle을 실행할 수 있습니다.

"

 

Gradle 빌드에 권장되는 사용 방법은 Gradle Wrapper를 사용하는 것이다.

 

Gradle이란?)

 

  -위에서 언급한 빌드를 도와주는 빌드 툴이다.

  - Groovy 또는 코틀린 언어를 사용. 이 중 Groovy 언어는 JVM 상에서 싱행되는 스크립트 언어이고 Java와 유사한 문법 구조를 가지며 호환성이 좋음.

 

Gradle은 장점이 여러가지 있는데 그 중 멀티 프로젝트 빌드를 쉽게 할 수 있다고 한다.

  나중에 추가로 더 공부해보기로 하고

 

Gradle Wrapper란?)

 

  - gradle 빌드에 권장되는 사용방법으로, 명시된 ㅎradle 버전을 호출하고 명시된 버전의 gradle이 없을 경우 자동으로 다운로드 및 설치를 하여 빌드 해주는 스크립트이다.

 

  * 장점 )

      1. 특정 버전의 Gradle을 프로젝트와 함께 번들링 할 수 있으므로, 모든 개발자와 CI 서버가 동일한 버전의 빌드 도구를 사용하는 것을 보장한다.

      2. 필요한 경우 쉽게 Gradle 버전을 업그레이드 할 수 있다.

      3. 복잡한 프로젝트 설정 없이 새로운 개발자나 CI 서버가 빠르게 작업 시작을 할 수 있다.

      4. 환경에 종속되지 않고 프로젝트를 빌드할 수 있다.

          gradle build를 사용하면 로컬에 설치된 gradle과 java를 기준으로 build 함.

          ./gradlew build를 실행하면 build.gradle 파일에 정의한 내용 기준으로 build 함

               => 로컬 환경과 관계없이 프로젝트를 빌드할 수 있다.

 

> gradle-wrapper.propertoes에 distributionUrl에 지정되어 있는 gradle 버전을 사용하여 빌드하게 됨.


 

결론

호환성 때문에 Gradlew build사용을 권장하는 거라고 생각한다 !

 

 


* 참고

 

https://babgeuleus.tistory.com/entry/gradle%EB%A1%9C-%EB%B9%8C%EB%93%9C%ED%95%9C%EB%8B%A4%EB%8A%94-%EA%B2%83%EC%9D%80-%EB%AC%B4%EC%8A%A8-%EB%A7%90%EC%9D%B4%EA%B3%A0-gradle-wrapper%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C

 

gradle로 빌드한다는 것은 무슨 말이고 gradle wrapper는 무엇일까

서론 "Gradle 빌드에 권장되는 사용 방법은 Gradle Wrapper를 사용하는 것이다." 처음에 이 문장을 보고 무슨 말인지 전혀 몰랐다. 그때 내가 아는 지식으로는 gradle은 의존성을 받아오는 녀석이며 컴파

babgeuleus.tistory.com

 

https://nanbuja.com/entry/%EB%B9%8C%EB%93%9C-%EB%B0%B0%ED%8F%AC-%EC%BB%B4%ED%8C%8C%EC%9D%BC%EC%9D%98-%EA%B0%9C%EB%85%90-%EC%B0%A8%EC%9D%B4%EC%A0%90-Build-Deploy-Complie

 

빌드, 배포, 컴파일의 개념 & 차이점 (Build, Deploy, Complie)

빌드, 배포, 컴파일의 개념 & 차이점 (Build, Deploy, Complie) 서버에 기능을 추가 하려면 개발자가 로컬 PC에서 개발을 하고 테스트까지 진행한 뒤에 문제가 없을 경우 사용자가 사용할 수 있도록 수정

nanbuja.com

 

https://velog.io/@maldaliza/%EB%B9%8C%EB%93%9CBuild%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C

 

빌드(Build)란 무엇일까?

소스코드 및 프로젝트에 쓰인 각각의 파일 및 자원 등을 JVM이나 WAS가 인식할 수 있는 구조로 패키징하는 과정 및 결과물.프로젝트 생성, 테스트 빌드, 배포 등의 작업을 위한 전용 프로그램.계속

velog.io