연결 문제 해결
이 페이지의 내용
이 페이지에서는 MongoDB Kotlin 드라이버를 사용하는 동안 MongoDB 인스턴스 또는 복제본 세트에 연결할 때 발생할 수 있는 문제에 대한 잠재적인 해결 방법을 제공합니다.
참고
이 페이지에는 연결 문제만 나열되어 있습니다. MongoDB에 다른 문제가 있는 경우 다음 리소스를 고려하세요.
코틀린( 코틀린 (Kotlin) ) 운전자 에 대한 자주 묻는 질문( FAQ )
버그 보고, 드라이버에 기여 및 추가 리소스에 대한 정보는 문제 및 도움말 항목을 참조하세요.
질문, 토론 또는 일반적인 기술 지원을 위한 MongoDB Community 포럼
연결 오류
다음 오류 메시지는 드라이버가 지정된 호스트 이름 또는 포트의 서버에 연결할 수 없음을 나타내는 일반 메시지입니다.
Error: couldn't connect to server 127.0.0.1:27017
이 오류가 발생하면 다음 조치를 시도하여 문제를 해결하세요.
연결 문자열 확인
연결 문자열의 호스트 이름과 포트 번호가 모두 정확한지 확인. 이 샘플 오류 메시지에서 호스트 이름은 127.0.0.1
이고 포트는 27017
입니다. MongoDB 인스턴스의 기본 포트 값은 27017
이지만 다른 포트에서 통신하도록 MongoDB를 구성할 수 있습니다.
방화벽 구성
MongoDB 배포에서 기본 포트를 사용한다고 가정하고 방화벽에 27017
포트가 열려 있는지 확인합니다. 배포에서 다른 포트를 사용하는 경우 방화벽에서 포트가 열려 있는지 확인합니다.
중요
MongoDB 인스턴스에서 사용하는 포트인지 확실하지 않은 경우 방화벽에서 포트를 열지 마세요.
인증 오류
권한 부여가 올바르게 구성되지 않은 경우 Kotlin 드라이버가 MongoDB 인스턴스에 연결하지 못할 수 있습니다. 이로 인해 다음과 유사한 오류 메시지가 표시되는 경우가 많습니다.
Command failed with error 18 (AuthenticationFailed): 'Authentication failed.' on server localhost:27017.
이 오류가 발생하면 다음 조치를 시도하여 문제를 해결하세요.
연결 문자열 확인
유효하지 않은 연결 문자열은 MongoDB에 연결하려고 할 때 인증 문제를 일으키는 가장 흔한 원인입니다.
참고
Kotlin 드라이버에서 연결 문자열을 사용하는 방법에 대한 자세한 내용은 연결 가이드의 연결 URI 를 참조하세요.
연결 문자열에 사용자 이름과 비밀번호가 포함된 경우 올바른 형식인지 확인합니다.
참고
사용자 이름 또는 비밀번호에 다음 문자가 포함된 경우 퍼센트로 인코딩되어야 합니다:
: / ? # [ ] @
MongoDB deployment가 MongoDB Atlas에 있는 경우, Atlas 연결 예제 를 사용하여 연결 문자열을 확인할 수 있습니다. 예제의 연결 문자열을 사용자의 연결 문자열로 바꿔야 합니다.
복제본 세트에 연결할 때는 연결 문자열에 복제본 세트의 모든 호스트를 포함해야 합니다. 연결 문자열의 각 호스트를 쉼표로 구분합니다. 이렇게 하면 호스트 중 하나에 연결할 수 없는 경우 드라이버가 연결을 설정할 수 있습니다.
사용자가 인증 데이터베이스에 있는지 확인
사용자 이름과 비밀번호를 사용하여 연결을 성공적으로 인증하려면 사용자 이름을 인증 데이터베이스에 정의해야 합니다. 기본 인증 데이터베이스는 admin
데이터베이스입니다. 인증에 다른 데이터베이스를 사용하려면 연결 문자열에 authSource
를 지정합니다. 다음 예에서는 드라이버가 users
를 인증 데이터베이스로 사용하도록 지합니다.
val mongoClient = MongoClient.create("mongodb://<db_username>:<db_password>@<hostname>:<port>/?authSource=users")
메시지 전송 오류
드라이버를 통해 요청을 보냈지만 명령을 보낼 수 없는 경우 다음과 같은 일반 오류 메시지가 표시되는 경우가 많습니다.
com.mongodb.MongoSocketWriteException: Exception sending message
이 오류가 발생하면 다음 조치를 시도하여 문제를 해결하세요.
연결 문자열 확인
앱의 연결 string 이 정확한지 확인합니다. 이에 대한 설명은 연결 오류 및 인증 오류에 설명되어 있습니다.
사용자가 인증 데이터베이스에 있는지 확인
사용자는 인증 데이터베이스에서 인식되어야 합니다. 이는 인증 오류에 설명되어 있습니다.
방화벽 구성
방화벽에는 MongoDB 인스턴스와 통신하기 위한 열린 포트가 있어야 합니다. 이는 연결 오류에 설명되어 있습니다.
연결 횟수 확인
각 MongoClient
인스턴스는 연결 풀에서 최대 동시 개방 연결 수를 지원합니다. 구성 매개 변수 maxPoolSize
는 이 값을 정의하며 기본적으로 100
으로 설정됩니다. maxPoolSize
만큼 열려 있는 연결이 이미 여러 개 있는 경우 서버는 연결을 사용할 수 있을 때까지 기다립니다. 이 대기 시간이 maxIdleTimeMS
값을 초과하면 드라이버는 오류로 응답합니다.
시간 초과 오류
드라이버를 통해 서버에 메시지를 보낼 때 메시지가 응답하는 데 시간이 걸리는 경우가 있습니다. 이 경우 다음 오류 메시지 중 하나와 유사한 오류 메시지가 나타날 수 있습니다.
Timed out after 30000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}.
No server chosen by ReadPreferenceServerSelector{readPreference=primary} from cluster description
이러한 오류 중 하나가 발생하면 다음 방법을 시도하여 문제를 해결하세요.
세트 maxConnectionTimeoutMS
maxConnectionTimeoutMS
옵션은 코틀린(Kotlin) 드라이버가 시간이 초과되기 전에 연결을 기다리는 시간을 나타냅니다. 기본값은 10000
입니다. 드라이버가 시간 초과되지 않도록 하려면 이 값을 늘리거나 0
로 설정할 수 있습니다.
및 설정 maxConnectionLifeTime
maxConnectionIdleTime
maxConnectionLifeTime
및 maxConnectionIdleTime
을 설정하는 것이 좋습니다. 이 매개변수는 MongoDB 인스턴스와의 연결이 유지될 수 있는 기간을 구성합니다. 이러한 매개변수에 대한 자세한 내용은 연결 풀 설정에서 확인 가능합니다.
연결 횟수 확인
열려 있는 연결이 너무 많을 수 있습니다. 이에 대한 해결 방법은 메시지 전송 오류에 설명되어 있습니다.
추가 팁
특정 오류 메시지와 관련이 없지만 이 섹션에는 연결 문제를 해결할 때 유용할 수 있는 추가 정보가 포함되어 있습니다.
TLS/SSL에 대한 로그 정보 가져오기
TLS/SSL을 사용하는 경우 -Djavax.net.debug=all
시스템 속성을 사용하여 추가 로그 문을 볼 수 있습니다. 이는 연결 문제를 디버깅하려고 할 때 도움이 될 수 있습니다. TLS/SSL 연결 디버깅에 대한 Oracle 가이드를 참조하세요. 을(를) 참조하세요.