프로젝트를 진행하다 gradle에 의존성을 추가할 일이 생겨 이것저것 추가하다가
implementation과 runtimeOnly 그리고 compileOnly의 차이점이 문득 궁금해져 찾아보게 되었다.
Gradle에 dependency 항목을 보면 compileClasspath와 runtimeClasspath가 나뉘어 있는 점을 볼 수 있다.
compileClasspath
compileClasspath는 프로젝트안에 있는 모든 소스 코드를 compile할 때 필요한 모든 클래스 파일과 라이브러리를 포함한다.
즉, 컴파일이 돌아갈 동안 필요한 의존성이 필요하다(런타임 X)
runtimeClasspath
반대로
runtimeClasspath에는 프로젝트가 실행될 동안 필요한 모든 클래스 파일과 라이브러리를 포함한다.
일반적으로 compileClasspath에는 runtimeClasspath에 포함되는 대부분의 의존성이 들어가 있다.
이를 토대로 runtimeOnly와 compileOnly의 차이점을 유추해볼 수 있다.
implementation은 두 경우 모두 필요하다는 의미이다!!
즉, 3개를 적절히 필요에 따라 구분해야 사용하면 프로젝트의 빌드 시간이나 크기를 최적화할 수 있게 된다.