요즘 새롭게 스프링 부트를 공부하며 프로젝트를 만들어 보고있는데, build.gradle 파일의 dependencies 항목 앞에 붙는 단어들의 의미가 궁금해졌다.

아래는 내가 작성하고 있는 프로젝트의 build.gradle 파일이다.

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.3.3'
	id 'io.spring.dependency-management' version '1.1.6'
}

group = 'com.dororok'
version = '0.0.1-SNAPSHOT'

java {
	toolchain {
		languageVersion = JavaLanguageVersion.of(17)
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'com.fasterxml.jackson.core:jackson-databind'
	runtimeOnly 'com.h2database:h2'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
	useJUnitPlatform()
}

오늘은 dependenciesimplementation, runtimeOnly, compileOnly, annotationProcessor, testImplementation 항목의 의미를 알아보려고 한다.

build.gradle의 dependencies에서 각 항목의 용도는?

build.gradle 파일에서 dependencies 섹션에 사용되는 각 항목은 Gradle 빌드 도구에서 의존성의 범위와 목적을 지정하는 데 사용된다.

1. implementation

  • implementation은 애플리케이션의 런타임과 컴파일 타임 모두에 필요한 의존성을 선언할 때 사용한다.

2. runtimeOnly

  • runtimeOnly는 컴파일 시점에 사용하지 않고 애플리케이션 실행 시에만 사용하는 의존성.
  • 예를들어, 데이터베이스 드라이버는 애플리케이션이 컴파일될 때는 필요하지 않지만, 실행될 때는 필요하다.

3. compileOnly

  • compileOnly는 컴파일 타임에만 필요한 의존성을 선언한다.
  • 주로 컴파일 타임에만 필요한 API를 제공하는 라이브러리나 애노테이션 프로세서 등을 추가할 때 사용된다.

4. annotationProcessor

  • annotationProcessor는 주로 컴파일 타임에 애노테이션을 처리하기 위해 사용하는 의존성.
  • 애노테이션 프로세서가 애노테이션을 처리하여 코드 생성이나 문서화, 검사를 수행하는 데 필요한 의존성을 추가합니다. 예를 들어, Lombok과 같은 라이브러리의 경우, 이 항목에 추가되어야 한다.

5. testImplementation

  • testImplementation은 테스트 코드에서 필요로 하는 의존성을 선언한다.
  • 이 의존성은 테스트 코드가 실행되는 동안에만 필요하며, 애플리케이션의 본문 코드에서는 필요하지 않다. 예를 들어, JUnit, Mockito와 같은 테스트 라이브러리를 이 항목에 추가한다.

의존성 범위를 설정하는 이유?

이러한 의존성 범위를 적절히 설정함으로써, 코드의 유지보수성과 빌드 성능을 향상시킬 수 있다. 각 의존성 항목이 프로젝트에서 어떻게 사용되는지 이해하면, 빌드 구성을 보다 효율적으로 관리할 수 있습니다 🙂

By dororok

Leave a Reply

Your email address will not be published. Required fields are marked *