Gradle 의존성 스코프 정리

Daniel·2025년 5월 22일
0

Back-End

목록 보기
52/54

Gradle을 쓰다 보면 implementation, compileOnly, runtimeOnly 같은 키워드가 반복된다.
처음에는 무작정 복붙하지만, 프로젝트가 커질수록 "왜 이게 들어가 있지?" 하는 의문이 들기 마련이다.
이 포스트에서는 각 스코프가 언제, 어디서, 사용되는지를 표와 함께 정리해봤다.

의존성 스코프란?

의존성 스코프는 말 그대로 라이브러리를 언제(컴파일, 런타임, 테스트) 사용할지 정의하는 역할을 한다.
이를 통해 불필요한 라이브러리 포함을 방지하고, 빌드 시간과 실행 크기를 줄일 수 있다.

스코프 비교표

스코프컴파일런타임테스트 전용용도
compileOnly컴파일 시점에만 필요 (ex. lombok)
implementation주로 사용하는 기본 의존성
runtimeOnly실행 시에만 필요한 라이브러리 (ex. JDBC driver)
testCompileOnly테스트에서만 컴파일 필요
testImplementation테스트에서만 컴파일 + 실행
testRuntimeOnly테스트에서 실행 시에만 필요
annotationProcessor애노테이션 처리기 등록
compileClasspath, runtimeClasspath✅ / ❌❌ / ✅커스텀 빌드 구성 시 사용

  • Lombok 사용 시
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
  • JDBC 드라이버는 runtimeOnly로 분리
runtimeOnly 'mysql:mysql-connector-java'
  • 테스트만 사용하는 경우
testImplementation 'org.mockito:mockito-core'

정리

Gradle 의존성 스코프를 제대로 활용하면 다음과 같은 이점이 있다:

  • 빌드 결과물의 최적화
  • 불필요한 의존성 제거
  • 관리와 디버깅의 효율성 향상

💡 Tip: build.gradle에 의존성을 추가할 땐 "이게 정말 런타임에 필요할까?"를 한 번쯤 자문해보자. 성능과 유지보수에 큰 차이를 만든다.

profile
응애 나 애기 개발자

0개의 댓글