Search
🍎

#build.gradle 의미와 설정

Intro

Spring Boot에서 ‘build.gradle’파일은 Gradle을 사용하는 프로젝트의 설정과 의존성 관리를 위한 핵심파일이다. 이 파일은 프로젝트의 빌드 과정과 실행에 필요한 다양한 설정을 정의한다. ‘build.gradle’의 주요 역할과 설정 가능한 내용들을 한 번 알아보자.
build.gradle파일은 프로젝트 내부에 코끼리 모양과 함께 목록에 올라와있다.

프로젝트 의존성 정의 #Dependencies

프로젝트 의존성 정의는 Gradle을 사용하는 Spring Boot 프로젝트에서 중요한 부분이다. 이는 ‘build.gradle’파일 내의 ‘dependencies’ 블록에서 수행되며, 프로젝트가 필요로 하는 모든 라이브러리들을 명시한다. 여기 의존성 유형은 대표적으로 세 가지가 있다.
‘implementation’
프로젝트 코드에서 직접 사용되는 라이브러리의 추가를 도와준다.
‘testImplementation’
테스트 시에만 필요한 라이브러리 추가를 도와준다.
‘compileOnly’
컴파일 시에만 필요하고, 런타임에는 포함되지 않는 라이브러리를 추가한다.
‘spring-boot-starter-web’
Spring Boot 개발에 필요한 기본 구성요소를 포함하는 의존성이다. 예를 들어 Spring MVC, RESTful API, 내장된 Tomcat서버 등을 사용할 수 있다.
‘sptring-boot-starter-test’
테스트 케이스 작성과 실행을 위해 필요한 의존성이다. JUnit, Spring Test, MockMVC등 테스트를 위한 다양한 라이브러리가 포함되어 있다.

플러그인 설정 #Plugins

Sping Boot 프로젝트에서 플러그인은 기존 의미대로 기능을 확장하고, 특수 기능을 처리하는 데 효과적이다. 이러한 플러그 인들은 ‘plugins’블록에서 정의된다.
Spring Boot Gradle 플러그 인
이 플러그인은 Spring Boot 애플리케이션을 실행하는데 필수적이다. 실행 가능한 JAR파일을 생성하고, Spring Boot의 의존성을 관리하며 애플리케이션의 자동 구성을 제공한다.
JAVA 플러그인
JAVA 애플리케이션을 빌드하기 위한 플러그인이다. JAVA 컴파일 기능과 기본 태스크등을 제공한다.
Spring Defendency Management 플러그 인
Spring Boot의 의존성 버전을 자동으로 관리할 수 있게 한다. 별도로 버전을 명시하지 않아도 Spring Boot가 권장하는 버전의 의존성을 사용하도록 도와준다.

저장소 설정 #Repositories

저장소 설정Repositories configurationGradle 또는 Maven과 같은 빌드 도구에서 외부 라이브러리 의존성/dependencies 를 다운로드하기 위해 사용되는 원격 또는 로컬 저장소를 지정하는 과정이다. 이 설정은 ‘build.gradle’ 파일에서 정의되며, 프로젝트가 필요로 하는 모든 의존성이 어디에서 가져와야 할지를 결정한다. 저장소가 하는 역할은 다음과 같다.
의존성dependencies 다운로드
프로젝트가 필요로 하는 외부 라이브러리나 모듈을 다운로드하기 위해 저장소를 지정해야한다.
저장소 유형
일반적으로 Maven 중앙 저장소가 사용되나, 회사 내부 저장소나 다른 공개 저장소를 사용할 수 있다.
멀티 저장소 지원
여러 저장소를 지정할 수 있고, Gradle이나 Maven은 이러한 저장소를 순차적으로 검색하여서 필요한 의존성을 찾는다.
‘mavenCentral()’
가장 일반 적으로 사용되는 공개 Maven 저장소이다.
‘jcenter()’
Bintray의 JCenter 저장소이며, Maven 중앙 저장소와 유사한 라이브러리를 제공한다.
‘maven { url ‘http://repo.mycompany.com/maven2’}
필요에 따라 회사 내부 저장소나 다른 추가적인 저장소를 지정할 때 이러한 방식을 사용한다.

프로젝트 메타데이터

프로젝트 메타데이터는 Gradle또는 Maven과 같은 빌드 도구에서 프로젝트에 관한 기본적인 정보를 제공한다. 이 정보는 프로젝트를 식별하고, 빌드 및 배포 과정에서 중요한 역할을 하며 일반적으로 프로젝트의 이름, 버전, 설명, 그룹ID가 포함된다. 프로젝트 메타데이터가 중요한 이유는 다음과 같다.
프로젝트 식별
프로젝트의 고유한 식별자를 제공한다. 이는 라이브러리를 저장소에 배포하거나 다른 프로젝트에서 의존성으로 추가할 때 중요하다.
버전관리
프로젝트 버전을 명시하여 빌드 및 릴리스 관리를 용이하게 한다.
라이브러리 의존성
다른 프로젝트에서 이 프로젝트를 의존성으로 추가할 때 필요한 정보를 제공한다.
group = ‘com.example’
프로젝트의 그룹 ID를 지정한다. 일반적으로 도메인 이름을 역순으로 사용한다.
version = ‘0.0.1-SNAPSHOT’
프로젝트의 현재 버전을 명시한다. ‘-SNAPSHOT’은 개발 중인 버전을 나타낸다.
sourceCompatibility = '17'
프로젝트가 사용할 JAVA버전을 지정한다. 여기서는 JAVA17을 사용하고 있음을 나타낸다.

빌드 구성 #Build Configuration

빌드 구성 Build Configuration 은 Gradle 또는 Maven과 같은 빌드 도구를 사용할 때 프로젝트의 빌드 과정을 어떻게 처리할지 결정하는 설정이다. 이 구성은 프로젝트의 컴파일, 테스트, 패키징, 배포 등의 과정을 관리한다. 빌드 구성이 중요한 이유는 다음과 같다.
커스텀 빌드 로직
프로젝트의 특정 요구사항에 맞춰 빌드 과정을 커스터마이즈 할 수 있다.
빌드 과정의 자동화
반복적인 빌드 작업을 자동화하여 개발 효율성을 높일 수 있다.
다양한 환경 지원
개발, 테스트, 프로덕션 등 다양한 환경에 맞는 빌드 설정을 구성할 수 있다.
task customTask (type : Copy {}
Copy타입의 태스크를 정의한다. 이 태스크는 src/main/resources 디렉토리에서 특정 파일을 buiild/resources 로 복사한다.
build { }
블록 내에서 dependsOn customTask를 사용하여 빌드 프로세스가 customTask에 의존하도록 설정한다. 이는 빌드 수행전에 customTask를 실행하게 한다.