Gradle plugins vs dependencies개발 공부/Spring2022. 6. 25. 16:37
Table of Contents
이동욱님의 스프링 부트와 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
가 존재하는 경우 빌드 스크립트를 실행하면 아래와 같은 로직을 통해 빌드를 진행하게 된다.(출처 : 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
- 컴파일과 런타임에 사용되는 dependencycompileOnly
- 컴파일 시에만 필요한 dependencyruntimeOnly
- 런타임에만 필요한 dependencytestImplementation
-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 |
@gmelon :: gmelon's greenhouse
백엔드 개발을 공부하고 있습니다.