솔솔

[Gradle] Gradle 의존성 각 범위의 역할과 활용 방법 본문

나의보물들/BuildAutomationTools

[Gradle] Gradle 의존성 각 범위의 역할과 활용 방법

솔솔하네 2025. 1. 7. 13:15
반응형

🍀 시작하기에 앞서


 

 

Gradle로 이루어진 프로젝트를 진행하다 보면 의존성 주입 시 의존성 범위(scope)를 지정하는 부분을 자주 보게 된다. 사실 그동안 필요한 의존성을 공식 사이트에서 찾아 복사하여 붙여넣는 방식으로만 사용했기 때문에, 의존성 범위에 대해서는 잘 알지 못한 채로 작업을 해왔다. 그러던 중 최근에 끝난 프로젝트를 정리하면서 갑자기 의문이 생겼다. "각각의 의존성 범위는 어떤 차이가 있을까?" 그래서 이 부분을 공부해보았다.

 

 

🍀 의존성 범위란?


Gradle에서 의존성 범위는 특정 라이브러리가 어떤 시점에(컴파일, 실행, 테스트 등) 필요한지, 또는 어떤 환경에서만 필요한지를 정의하는 것. 이러한 범위를 설정함으로써, 프로젝트의 빌드 성능을 최적화하고, 불필요한 라이브러리의 포함을 방지할 수 있다.

 

🍀 의존성 범위 종류


* 사실 Gradle 공홈에 가서 번역기를 돌리면 '종속성 구성'이라고 번역되지만 나는 '의존성 범위'라고 칭하겠다. 

의존성 범위 설명 사용 예시
api 다른 모듈에서 이 의존성을 사용할 수 있도록 공개하는 의존성. 주로 라이브러리 개발 시 사용되며, 이 의존성은 해당 모듈을 사용하는 다른 모듈에도 포함됨. 라이브러리 프로젝트에서 다른 프로젝트가 해당 라이브러리를 사용할 때 이 의존성이 자동으로 포함되도록 할 때 사용.
implementation 컴파일 시와 실행 시 모두 필요한 의존성. 애플리케이션에서 직접 사용하는 라이브러리나 모듈에 적합. 이 의존성은 다른 모듈에 노출되지 않으며 내부적으로만 사용. 일반적인 애플리케이션에서 직접 사용하는 라이브러리나 모듈에 사용.
compileOnly 컴파일 시에만 필요한 의존성. 이 의존성은 실행 시에는 포함되지 않으며, 컴파일 시에만 사용됨.  서버나 환경에서 이미 제공되는 라이브러리, 또는 컴파일 시에만 필요한 라이브러리에서 사용.
compileOnlyApi compileOnly와 비슷하지만, 이 의존성은 API 모듈에서만 사용되고, 해당 의존성을 다른 모듈에서도 사용할 수 있도록 공개. 라이브러리 프로젝트에서 컴파일 시에만 필요한 의존성을 다른 프로젝트에서도 사용할 수 있도록 할 때 사용.
runtimeOnly 실행 시에만 필요한 의존성. 컴파일 시에는 필요하지 않지만, 애플리케이션이 실행될 때 필요한 라이브러리.  데이터베이스 드라이버 같은 경우에 사용.
testImplementation 테스트 코드에서만 필요한 의존성. 테스트를 실행할 때만 필요하고, 애플리케이션 코드에는 포함되지 않음. 단위 테스트나 통합 테스트에서만 사용하는 의존성에 사용.
testCompileOnly 테스트 컴파일 시에만 필요한 의존성. 이 의존성은 실행 시에는 포함되지 않으며, 오직 테스트 코드 컴파일 시에만 필요함. 테스트 코드에서만 필요하지만, 실행 시에는 포함되지 않아야 하는 의존성에 사용
testRuntimeOnly 테스트 실행 시에만 필요한 의존성. 이 의존성은 컴파일 시에는 필요하지 않으며, 테스트를 실행할 때만 필요한 라이브러리. 테스트 실행 시에만 필요한 라이브러리나 모듈에 사용

그 외에도 다양한 의존성 범위와 사용자 정의 의존성 범위도 있다.

 

 

🍀 결론


의존성 범위를 잘 활용하면 프로젝트에서 필요한 라이브러리를 효율적으로 관리할 수 있을 것 같다. 예를 들어, compileOnly와 runtimeOnly를 사용해 불필요한 의존성을 빌드 과정에서 제외하고, testImplementation, testCompileOnly, testRuntimeOnly 등을 통해 테스트 환경을 분리하여 의존성 충돌을 방지할 수 있다. 이렇게 의존성 범위를 정확히 설정하면 프로젝트가 커져도 관리가 용이해지고, 빌드 성능을 최적화하는데도 좋을 것 같다. 

 

 

 

🔹 참고 서적 및 자료

1. Gradle 공홈: https://docs.gradle.org/current/userguide/dependency_configurations.html

2. Chat GPT