Docs Menu
Docs Home
/ /

MongoDB에 연결

이 페이지에는 다양한 설정을 사용하여 코틀린 (Kotlin) 애플리케이션 MongoDB 에 연결하는 방법을 보여주는 코드 예시가 포함되어 있습니다.

이 페이지의 연결 옵션에 대해 자세히 알아보려면 각 섹션에 제공된 링크를 참조하세요.

이 페이지의 연결 예시 사용하려면 코드 예시 애플리케이션 에 복사합니다. 코드 예시의 모든 자리 표시자(예: <hostname>)를 MongoDB 배포서버에 필요한 관련 값으로 바꿔야 합니다.

다음 샘플 애플리케이션 사용하여 이 페이지의 연결 코드 예시를 테스트할 수 있습니다.

import com.mongodb.kotlin.client.coroutine.MongoClient
import com.mongodb.kotlin.client.coroutine.MongoDatabase
import kotlinx.coroutines.runBlocking
import org.bson.Document
import org.bson.BsonInt32
import com.mongodb.MongoException
fun main() = runBlocking {
// Replace the placeholder with your connection string
val uri = "<connection string>"
// Create a new client and connect to the server
val mongoClient = MongoClient.create(uri)
val database: MongoDatabase = mongoClient.getDatabase("test")
try {
// Send a ping to confirm a successful connection
val command = Document("ping", BsonInt32(1))
val commandResult = database.runCommand(command)
println("Ping response: $commandResult")
println("Pinged your deployment. You successfully connected to MongoDB!")
} catch (me: MongoException) {
System.err.println(me)
}
}

다음 섹션에서는 MongoDB 의 로컬 인스턴스 또는 Atlas 의 클라우드 호스팅 인스턴스 와 같은 다양한 대상에 연결하는 방법을 설명합니다.

다음 코드는 로컬 MongoDB deployment 에 연결하는 방법을 보여줍니다.

val uri = "mongodb://localhost:27017/"
val client = MongoClient.create(uri)

다음 코드는 Atlas 에서 호스팅되는 배포서버 에 연결하는 방법을 보여줍니다.

import com.mongodb.kotlin.client.coroutine.MongoClient
import com.mongodb.MongoClientSettings
import com.mongodb.ConnectionString
import com.mongodb.ServerApi
import com.mongodb.ServerApiVersion
val uri = "<Atlas connection string>"
val serverApi = ServerApi.builder()
.version(ServerApiVersion.V1)
.strict(true)
.deprecationErrors(true)
.build()
val settings = MongoClientSettings.builder()
.applyConnectionString(ConnectionString(uri))
.serverApi(serverApi)
.build()
val client = MongoClient.create(settings)

다음 코드는 복제본 세트 에 연결하는 방법을 보여줍니다.

val uri = "mongodb://<replica set member>:<port>/?replicaSet=<replica set name>"
val client = MongoClient.create(uri)

다음 코드는 서버 선택 함수를 지정하는 방법을 보여줍니다.

import com.mongodb.kotlin.client.coroutine.MongoClient
import com.mongodb.MongoClientSettings
import com.mongodb.ConnectionString
val uri = "mongodb://<db_username>:<db_password>@<hostname>:<port>"
val settings = MongoClientSettings.builder()
.applyConnectionString(ConnectionString(uri))
.serverSelector(<selector function>)
.build()
val client = MongoClient.create(settings)

서버 선택 사용자 지정에 대해 자세히 학습하려면 서버 선택 사용자 지정을 참조하세요.

다음 코드는 연결에 대한 Stable API 설정을 지정하는 방법을 보여줍니다.

import com.mongodb.kotlin.client.coroutine.MongoClient
import com.mongodb.MongoClientSettings
import com.mongodb.ConnectionString
import com.mongodb.ServerApi
import com.mongodb.ServerApiVersion
val uri = "mongodb://<db_username>:<db_password>@<hostname>:<port>"
val serverApi = ServerApi.builder()
.version(ServerApiVersion.V1)
.build()
val settings = MongoClientSettings.builder()
.applyConnectionString(ConnectionString(uri))
.serverApi(serverApi)
.build()
val client = MongoClient.create(settings)

안정적인 API에 대해 자세히 알아보려면 stable API 를 참조하세요 stable API

참고

실험적 기능

CSOT 기능 실험적 기능이며 향후 드라이버 릴리스 에서 변경될 수 있습니다.

다음 코드는 timeoutMS 연결 옵션을 사용하여 클라이언트 사이드 시간 제한을 설정하다 방법을 보여줍니다.

import com.mongodb.kotlin.client.coroutine.MongoClient
import com.mongodb.MongoClientSettings
import com.mongodb.ConnectionString
import java.util.concurrent.TimeUnit
val uri = "mongodb://<db_username>:<db_password>@<hostname>:<port>"
val settings = MongoClientSettings.builder()
.applyConnectionString(ConnectionString(uri))
.timeout(200L, TimeUnit.MILLISECONDS)
.build()
val client = MongoClient.create(settings)
import com.mongodb.kotlin.client.coroutine.MongoClient
val uri = "mongodb://<db_username>:<db_password>@<hostname>:<port>/?timeoutMS=<timeout length>"
val client = MongoClient.create(uri)

클라이언트 사이드 시간 제한에 대해 자세히 알아보려면 MongoDB 서버 실행 시간 제한을 참조하세요.

모든 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()를 호출하면 드라이버는 모든 유휴 소켓을 닫고 사용 중인 모든 소켓이 풀로 반환될 때 닫습니다.

돌아가기

시작하기

이 페이지의 내용