Docs Menu

FAQ

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

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

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 및 집계 API 지원

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

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

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

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

모든 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에 연결하는 방법에 대한 자세한 내용은 연결 가이드를 참조하세요.