

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 종속성 충돌을 해결하려면 어떻게 해야 합니까?
<a name="ts-faq-dep-conflict-resolution"></a>

를 사용할 때 제대로 작동하려면 특정 AWS 및 타사 종속성이 AWS SDK for Kotlin필요합니다. 런타임에 이러한 종속성이 없거나 예상치 못한 버전인 경우 `NoSuchMethodError` 또는와 같은 오류가 표시될 수 있습니다`NoClassDefFoundError`. 이러한 종속성 문제는 일반적으로 두 그룹으로 나뉩니다.
+ SDK/Smithy 종속성 충돌
+ 타사 종속성 충돌

Kotlin 애플리케이션을 빌드할 때 Gradle을 사용하여 종속성을 관리할 수 있습니다. 프로젝트에 SDK 서비스 클라이언트에 대한 종속성을 추가하면 필요한 모든 관련 종속성이 자동으로 포함됩니다. 그러나 애플리케이션에 다른 종속성이 있는 경우 SDK에 필요한 종속성과 충돌할 수 있습니다. 예를 들어 SDK는 애플리케이션에서 사용할 수 있는 인기 있는 HTTP 클라이언트인 OkHttp를 사용합니다. 이러한 충돌을 발견하는 데 도움이 되도록 Gradle은 프로젝트의 종속성을 나열하는 유용한 작업을 제공합니다.

```
./gradlew dependencies
```

종속성 충돌이 발생하면 조치를 취해야 할 수 있습니다. 로컬 네임스페이스에 특정 버전의 종속성 또는 섀도우 종속성을 지정할 수 있습니다. Gradle 종속성 해결은 *Gradle 사용 설명서*의 다음 섹션에서 설명하는 복잡한 주제입니다.
+ [ 종속성 해결 이해 ](https://docs.gradle.org/current/userguide/dependency_resolution.html)
+ [ 종속성 제약 조건 및 충돌 해결 ](https://docs.gradle.org/current/userguide/dependency_constraints_conflicts.html)
+ [ 종속성 버전 정렬 ](https://docs.gradle.org/current/userguide/dependency_version_alignment.html)

## 프로젝트에서 SDK 및 Smithy 종속성 관리
<a name="sdk-smithy-dep-conflicts"></a>

SDK를 사용할 때는 일반적으로 해당 모듈이 버전 번호가 일치하는 다른 SDK 모듈에 의존한다는 점에 유의하세요. 예를 들어 `aws.sdk.kotlin:s3:1.2.3`는에 따라 `ws.sdk.kotlin:aws-http:1.2.3`달라지는 `aws.sdk.kotlin:aws-core:1.2.3`에 따라 달라집니다.

SDK 모듈은 특정 Smithy 모듈 버전도 사용합니다. Smithy 모듈 버전은 SDK 버전 번호와 동기화되지 않지만 SDK의 예상 버전과 일치해야 합니다. 예를 들어는에 의존할 `aws.sdk.kotlin:s3:1.2.3` 수 있으며`aws.smithy.kotlin:serde:1.1.1`,는에 의존`aws.smithy.kotlin:runtime-core:1.1.1`하는 등등입니다.

종속성 충돌을 방지하려면 모든 SDK 종속성을 함께 업그레이드하고 명시적인 Smithy 종속성에 대해서도 동일한 작업을 수행합니다. [Gradle 버전 카탈로그](setup-create-project-file.md)를 사용하여 버전을 동기화하고 SDK 버전과 Smithy 버전 간의 매핑에서 추측을 제거하는 것이 좋습니다.

SDK/Smithy 모듈의 마이너 버전 업데이트에는 [버전 관리 정책에](https://github.com/awslabs/aws-sdk-kotlin/blob/main/VERSIONING.md#versioning-policy) 설명된 대로 주요 변경 사항이 포함될 수 있습니다. 마이너 버전 간에 업그레이드할 때는 변경 로그를 주의 깊게 검토하고 런타임 동작을 철저히 테스트합니다.

## 애플리케이션의 OkHttp 버전 충돌 해결
<a name="okhttp-dep-conflicts"></a>

[OkHttp](https://square.github.io/okhttp/)는 SDK가 기본적으로 JVM에서 사용하는 인기 있는 HTTP 엔진입니다. 애플리케이션에는 다른 OkHttp 버전을 가져오는 다른 종속성 또는 프레임워크가 포함될 수 있습니다. 이로 인해 `okhttp/coroutines/ExecuteAsyncKt` 또는와 같은 `okhttp3` 네임스페이스의 클래스에 `NoClassDefFoundError` 대한가 발생할 수 있습니다`okhttp3/ConnectionListener`. 이 경우 일반적으로 최신 버전을 선택하여 충돌을 해결해야 합니다. 이러한 충돌의 원인을 추적하는 데 도움이 되도록 Gradle은 유용한 작업을 제공합니다. 다음을 실행하여 모든 종속성을 나열할 수 있습니다.

```
./gradlew dependencies
```

예를 들어 SDK가 OkHttp에 의존`5.0.0-alpha.14`하고 Spring Boot와 같은 다른 종속성이 OkHttp에 의존`4.12.0`하는 경우를 사용해야 합니다`5.0.0-alpha.14 version`. Gradle에서 `constraints` 블록을 사용하여이 작업을 수행할 수 있습니다.

```
dependencies {
    constraints {
        implementation("com.squareup.okhttp3:okhttp:4.12.0")
    }
}
```

또는 OkHttp 4.x를 사용해야 하는 경우 SDK는를 제공합니다`OkHttp4Engine`. Gradle을 구성하고 코드`OkHttp4Engine`에서를 사용하는 방법에 대한 자세한 내용은 [설명서를](https://github.com/smithy-lang/smithy-kotlin/tree/main/runtime/protocol/http-client-engines/http-client-engine-okhttp4) 참조하세요.