Gradle plugins vs dependencies

2022. 6. 25. 16:37·개발 공부/Spring

이동욱님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 을 따라 진행하며 웹 앱을 개발하고 배포하는 전체 과정을 쭉 따라고 보고 싶었는데 첫 장부터 막혀버렸다..ㅋㅋ

start.spring.io에서 완성된 프로젝트 파일을 다운로드하여 import 해 사용하는 방식으로 공부해왔어서 gradle 설정에서 문제가 발생하니 해결하기가 어려웠다. (동욱님께서도 책에서 이러한 문제 때문에 직접 gradle 설정 파일을 작성해보기를 권장하신다.)

그래서 이 참에 평소 gradle 설정 파일에서 궁금했던 정보를 찾아 정리해봤다. 워낙 기능과 정보가 방대해서 지금 내 수준에서 필요한 정도로만 정보를 찾고 정리했다. 다른 때와 달리 최대한 gradle 공식 문서만을 참고하려고 노력했다..!

Gradle

  • Gradle은 오픈 소스 자동화 툴로 소스 코드와 의존관계가 있는 라이브러리 등을 빌드 하는데 필요한 일련의 작업을 자동으로 수행해주는 툴이다.

Gradle Wrapper

  • Gradle은 Gradle Wrapper라는 것을 통해 프로젝트를 다운 받아 개발을 수행하는 모든 개발자 및 CI 환경에서 매번 Gradle을 직접 설치하고 버전을 맞춰야 하는 번거로움을 해결한다.
  • Gradle Wrapper를 최초에 프로젝트에 생성하면 아래와 같은 파일들이 생성된다
    • gradle-wrapper.properties - 호스팅 서버, 빌드 버전 등 Gradle Distribution에 대한 정보 저장
    • gradle-wrapper.jar - Gradle Distribution을 다운로드 받기 위해 필요한 코드를 포함하는 .jar 파일
    • gradlew, gradlew.bat - Gradle Wrapper를 사용하여 빌드를 실행하기 위한 윈도우/쉘 스크립트
    • settings.gradle - 빌드 대상이 되는 프로젝트를 지정하는 Gradle 설정 파일
    • build.gradle - 특정 프로젝트의 gradle 설정 파일, dependency, tasks 등을 설정
      .
      ├── settings.gradle
      ├── gradle
      │   └── wrapper
      │       ├── gradle-wrapper.jar
      │       └── gradle-wrapper.properties
      ├── build.gradle
      ├── gradlew
      └── gradlew.bat
  • 이미 프로젝트에 Gradle Wrapper가 존재하는 경우 빌드 스크립트를 실행하면 아래와 같은 로직을 통해 빌드를 진행하게 된다.Untitled(출처 : https://docs.gradle.org/current/userguide/gradle_wrapper.html)

Plugins vs Dependencies

Plugins

  • Gradle 자체는 의도적으로 매우 적은 기능만을 제공한다.
  • 그 외 특정 도메인에 특화된 tasks들은 plugins을 통해 제공된다.
  • 즉, plugins는 Gradle에 기본적으로 포함되지 않는 tasks 들의 집합으로 build.gradle 파일에 아래와 같이 작성하여 불러올 수 있다.
    • plugins를 통해 자바 소스의 빌드, 소스 코드의 위치 명시, spring 프레임워크의 의존관계 관리 등의 tasks를 수행할 수 있음
    • 예를 들어 io.spring.dependency-management plugins를 사용하면 dependencies 에 라이브러리의 버전을 명시하지 않아도 현재 스프링 프레임워크의 버전과 그들의 버전 등등 관계를 고려하여 적절한 버전을 불러와준다.
      plugins {
      id 'org.springframework.boot' version '2.7.1'
      id 'io.spring.dependency-management' version '1.0.11.RELEASE'
      id 'java'
      }

Dependencies

  • 프로젝트에서 사용할 라이브러리 및 모듈과 그 버전을 정의하면 Gradle에서 자동으로 필요한 파일을 내려받아 사용할 수 있도록 하는 기능을 제공한다.
  • 예를 들어 아래와 같이 선언할 수 있다.
    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
    }
  • 선언 가능한 dependencies의 종류는 여러 가지가 있는데 대표적인 것들은 아래와 같다.
    • implementation - 컴파일과 런타임에 사용되는 dependency
    • compileOnly - 컴파일 시에만 필요한 dependency
    • runtimeOnly - 런타임에만 필요한 dependency
    • testImplementation - implementation과 동일하나 test에만 사용됨
    • testCompileOnly - compileOnly와 동일하나 test에만 사용됨
    • testRuntimeOnly - testRuntimeOnly와 동일하나 test에만 사용됨

'개발 공부 > Spring' 카테고리의 다른 글

[플랭고] 일대일에서 일대다로 변경 시 validation 관련 문제 (Custom ConstraintValidator)  (0) 2023.08.23
[플랭고] 스프링 시큐리티 실패 핸들러 에서 직접 예외를 던지면 안 되는 이유  (0) 2023.08.20
DTO의 사용범위  (1) 2023.05.17
[Spring Security] 웹 시큐리티  (0) 2023.03.10
[Spring Security] 아키텍처  (0) 2023.02.23
'개발 공부/Spring' 카테고리의 다른 글
  • [플랭고] 스프링 시큐리티 실패 핸들러 에서 직접 예외를 던지면 안 되는 이유
  • DTO의 사용범위
  • [Spring Security] 웹 시큐리티
  • [Spring Security] 아키텍처
gmelon
gmelon
백엔드 개발을 공부하고 있습니다.
  • gmelon
    gmelon's greenhouse
    gmelon
  • 전체
    오늘
    어제
    • 분류 전체보기 (91)
      • 개발 공부 (28)
        • Java (6)
        • Spring (10)
        • 알고리즘 (11)
        • 기타 (1)
      • 프로젝트 (12)
        • [앱] 플랭고 (4)
        • 졸업 프로젝트 (8)
      • 스터디 (0)
        • 자바 (30)
      • 기록 (15)
        • 후기, 회고 (9)
        • SSAFYcial (5)
        • 이것저것 (1)
      • etc. (6)
        • 모각코 (6)
  • 블로그 메뉴

    • 홈
    • 방명록
    • github
    • 스크랩
  • 인기 글

  • 태그

    태초마을이야
    2024 상반기 회고
    싸피 회고
    프리티어 종료
    Collector groupingBy()
    groupingBy mapping
    한글프로그래밍언어
    AWS 프리티어 종료
    groupingBy()
    java
    졸업프로젝트
    자바
    2024 회고
    Java Collector
    자바 Collector
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
gmelon
Gradle plugins vs dependencies
상단으로

티스토리툴바