Docs Menu
Docs Home
/ / /
Kotlin 코루틴

FAQ

이 페이지의 내용

  • MongoDB 인스턴스에 연결하는 데 문제가 있는 이유는 무엇인가요?
  • 코틀린(Kotlin) 드라이버는 KMongo와 어떻게 다른가요?
  • 코틀린(Kotlin) 드라이버와 코틀린 SDK(Kotlin SDK)의 차이점은 무엇인가요?
  • Kotlin 드라이버에서 연결 풀링은 어떻게 작동하나요?

이 페이지에서는 자주 묻는 질문과 해당 답변을 찾을 수 있습니다.

이 페이지에서 질문에 대한 답변 을 찾을 수 없는 경우 문제 및 도움말 페이지에서 문제를 신고하는 방법에 대한 정보를 참조하세요.

MongoDB deployment에 연결하는 데 문제가 있는 경우 연결 문제 해결 가이드에서 가능한 해결 방법을 참조하세요.

코틀린(Kotlin) 드라이버는 코틀린(Kotlin)의 공식 MongoDB 드라이버입니다. MongoDB 팀이 개발했으며 코틀린(Kotlin) 애플리케이션이 MongoDB에 연결하고 데이터로 작업할 수 있는 네이티브 API를 제공합니다. MongoDB Java 드라이버를 래핑하여 구현됩니다.

KMongo Kotlin 애플리케이션에서 MongoDB로 작업하기 위해 인기 있는 커뮤니티 개발 라이브러리입니다. 코틀린(Kotlin) 커뮤니티의 요구 사항을 충족하기 위해 공식 코틀린(Kotlin) 드라이버가 생성되기 전에 생성된 Java 드라이버를 감싸는 래퍼입니다.

중요

2023년 7월부터 KMongo는 사용 중단된 것으로 표시됩니다.

코틀린(Kotlin) 드라이버는 사용자에게 공식적으로 지원되는 드라이버를 제공하기 위해 KMongo의 창시자 줄리엔 뷰레(Julien 뷰레)와 협업하여 개발되었습니다.

공식 Kotlin 드라이버와 KMongo는 일반적으로 유사한 API를 사용합니다. Kotlin 드라이버와 KMongo 간의 주목할 만한 유사점은 다음과 같습니다.

  • 동기 및 코루틴 기반 작업 지원

  • 데이터 클래스를 사용하여 MongoDB 문서 표현 지원

  • KotlinX 직렬화 지원

  • MongoDB CRUD API 및 집계 지원

공식 Kotlin 드라이버와 KMongo는 유사하지만 몇 가지 주요 차이점이 있습니다.

  • 공식 드라이버에는 리액터 에 대한 지원이 내장되어 있지 않습니다 . ,rxjava2, 잭슨 , 또는 GSON.

  • 공식 드라이버는 MongoDB Shell 명령을 지원하지 않습니다 .

  • 공식 드라이버는 빌더 API를 통해 형식 안정 쿼리를 지원하는 반면, KMongo는 형식 안정 쿼리에 중위 함수와 속성 참조를 사용합니다.

자세한 내용은 KMongo에서 마이그레이션을 참조하세요.

MongoDB는 코틀린(Kotlin)에서 모바일 및 서버 측 개발을 모두 지원합니다. Android 또는 Kotlin 멀티플랫폼(KMP)용 모바일 애플리케이션을 개발하는 경우, MongoDB Atlas Device Kotlin SDK 를 사용하여 Atlas App Services에 액세스하고 Realm 데이터를 관리할 수 있습니다.

코틀린(Kotlin) 드라이버는 관용적인 코틀린(Kotlin) 애플리케이션을 빌드하기 위한 완전한 라이브러리를 제공하여 서버 측 개발을 지원합니다. 이 Kotlin 루틴 드라이버 문서에서 비동기 애플리케이션을 개발하는 방법을 알아보거나 Kotlin 동기화 드라이버 문서 를 참조하여 동기 프로그래밍에 대해 자세히 알아볼 수 있습니다.

모든 MongoClient 인스턴스에는 MongoDB 토폴로지의 각 서버에 대한 기본 제공 연결 풀이 있습니다. 연결 풀은 필요에 따라 소켓을 열어 멀티스레드 애플리케이션에서 동시 MongoDB 작업을 지원합니다.

각 연결 풀의 최대 크기는 maxPoolSize 옵션으로 설정되며 기본값은 100입니다. 서버에 대한 사용 중인 연결 수가 maxPoolSize 값에 도달하면 해당 서버에 대한 다음 요청은 연결이 가능해질 때까지 대기합니다.

MongoClient 인스턴스는 MongoDB 토폴로지에서 서버당 두 개의 추가 소켓을 열어 서버 상태를 모니터링합니다.

예를 들어, 3노드 복제본 세트에 연결된 클라이언트는 6개의 모니터링 소켓을 엽니다. 또한 각 서버에서 애플리케이션의 스레드를 지원하는 데 필요한 만큼의 소켓을 maxPoolSize 값까지 엽니다. maxPoolSize100 이고 애플리케이션이 기본 연결 풀만 사용하는 경우(기본값), 기본 연결 풀만 커져서 총 연결 풀이 최대 106 개가 될 수 있습니다. 애플리케이션이 읽기 설정 (read preference) 을 사용하여 세컨더리 노드를 쿼리하는 경우 해당 풀도 커지고 총 연결 수가 306 개가 될 수 있습니다.

또한 연결 풀에는 속도 제한이 있어 각 연결 풀은 언제든지 최대 maxConnecting 개의 연결 값만 병렬로 생성할 수 있습니다. 모든 추가 스레드는 다음과 같은 경우 대기를 중지합니다.

  • 기존 스레드 중 하나가 연결 생성을 완료하거나, 기존 연결이 풀에 다시 체크인됩니다.

  • 연결 생성에 대한 속도 제한으로 인해 기존 연결을 재사용하는 드라이버의 기능이 향상됩니다.

minPoolSize 옵션(기본값 0)을 사용하여 각 서버에 대한 최소 동시 연결 수를 설정할 수 있습니다. 연결 풀은 이 수의 소켓으로 초기화됩니다. 네트워크 오류로 인해 소켓이 닫혀 총 소켓 수(사용 중인 소켓과 유휴 상태 모두)가 최소값 아래로 떨어지면 최소값에 도달할 때까지 더 많은 소켓이 열립니다.

연결이 제거되기 전에 풀에서 유휴 상태로 유지될 수 있는 최대 시간(밀리초)을 설정하고 maxIdleTimeMS 옵션(기본값은 0 (제한 없음))으로 대체될 수 있습니다.

MongoClient에 대한 다음 기본 구성은 대부분의 애플리케이션에서 작동합니다.

val client = MongoClient("<connection string>")

각 프로세스에 대해 한 번씩 클라이언트를 생성하고 모든 작업에 재사용합니다. 각 요청에 대해 새 클라이언트를 생성하는 것은 흔한 실수이며 이는 매우 비효율적입니다.

하나의 프로세스 내에서 많은 수의 동시 MongoDB 작업을 지원하려면 maxPoolSize 을 늘리면 됩니다. 풀이 최대 크기에 도달하면 추가 스레드가 소켓을 사용할 수 있을 때까지 대기합니다.

드라이버는 소켓이 사용 가능해질 때까지 기다릴 수 있는 스레드 수를 제한하지 않으며, 부하 급증 시 해당 풀의 크기를 대기 중인 제한으로 제한하는 것은 애플리케이션의 책임입니다. 스레드는 waitQueueTimeoutMS 옵션에 지정된 시간 동안 대기하며 기본값은 120000 (120초)입니다.

소켓에 대해 waitQueueTimeoutMS 에 정의된 시간보다 오래 기다리는 스레드는 연결 오류를 발생시킵니다. 모든 작업을 완료하는 것보다 부하가 급증하는 동안 작업 기간을 제한하는 것이 더 중요한 경우 이 옵션을 사용합니다.

스레드에서 MongoClient.close()를 호출하면 드라이버는 모든 유휴 소켓을 닫고 사용 중인 모든 소켓이 풀로 반환될 때 닫습니다.

MongoDB에 연결하는 방법에 대한 자세한 내용은 연결 가이드를 참조하세요.

돌아가기

API 문서