project 를 하며 dependency scope 가 다른 것을 보고 한 번 정리해야겠다고 생각했다.
gradle configurations 와 maven scope 를 각각 살펴보자.
종속성 관리
종속성 관리는 프로젝트를 할 때 필요에 따라 외부 라이브러리나 프레임워크를 사용하는데 Maven 혹은 Gradle 과 같은 빌드 도구가 이를 관리해주는 것을 말한다.
또한, 이를 빌드 수명 주기의 적절한 시점에 클래스 경로에 추가하는데 이 시점에 대한 정리를 해보려한다.
Maven 은 pom.xml 에서, Gradle 은 build.gradle 에서 관리하며 예시는 아래와 같다.
- Maven scope : runtime
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
- Gradle Configurations : runtimeOnly
runtimeOnly 'com.mysql:mysql-connector-j'
Maven Scope
1. Compile
: 다른 scope 가 정의되지 않았을 때 디폴트 scope로 모든 빌드 작업의 프로젝트 클래스 경로로 사용할 수 있다.
2. Provided
: JDK 또는 컨테이너가 Runtime 에 제공해야 하는 종속성을 표시한다.
3. Runtime
: Compile 에는 필요없고 Runtime 에만 필요. 따라서 Runtime scope로 표시된 종속성은 Runtime 및 테스트 클래스 경로에 존재하지만 Compile 클래스 경로에서는 누락된다.
4. Test
: 애플리케이션의 표준 Runtime 에서는 종속성이 필요하지 않으며 테스트 목적으로만 사용된다.
따라서, 테스트 종속성은 전이적이지 않으며 테스트 및 실행 클래스 경로에만 존재한다.
Gradle Configurations
1. implementation
: 디폴트 값으로, Compile 시점 에 노출시키고 싶지 않은 경우 사용한다.
2. api
: Compile 과 Runtime 시점 모두 전이적으로 내보내지는 종속성을 선언한다.
3. compileOnly
: Compile 시점에는 필요하지만 Runtime 에는 필요하지 않은 종속성을 선언한다. 여기에는 일반적으로 Runtime 에 발견되면 음영 처리되는 종속성이 포함된다.
4. runtimeOnly
: Compile 시점이 아닌 Runtime 에만 필요한 종속성을 선언한다.
5. testImplementation
: 테스트를 Compile 하는데 사용되는 종속성을 선언한다.
6. testCompileOnly
: 테스트 Compile 시점에만 필요하고 런타임에 노출되어서는 안되는 종속성을 선언한다. 여기에는 일반적으로 Runtime 에 발견되면 음영 처리되는 종속성이 포함된다.
7. testRuntimeOnly
: 테스트 Compile 시점이 아닌 테스트 Runtime 에만 필요한 종속성을 선언한다.
참고
https://docs.gradle.org/current/userguide/java_library_plugin.html
https://medium.com/agorapulse-stories/gradle-configurations-explained-4b9608dd5e35
https://reflectoring.io/maven-scopes-gradle-configurations/
https://www.baeldung.com/maven-dependency-scopes
'Web' 카테고리의 다른 글
[Spring] 동시성 이슈와 synchronized 에 관하여 (0) | 2023.09.10 |
---|---|
[JPA] Dirty Checking 동작 방식 및 성능 개선 (2) | 2023.09.03 |
[Spring] compiletime 과 runtime 에 대해서 (0) | 2023.08.13 |
[Spring] XSS Prevention (2) | 2023.07.31 |
[Spring] Unit Tests with Mockito ( in Service Layer ) (0) | 2023.07.25 |