연결 문제 해결
이 페이지의 내용
이 페이지에서는 MongoDB .NET/C# 드라이버를 사용하여 MongoDB 배포에 연결할 때 발생할 수 있는 문제에 대한 잠재적인 해결 방법을 제공합니다.
참고
이 페이지에서는 연결 문제만 다룹니다. MongoDB 또는 드라이버에 다른 문제가 발생하는 경우 다음 리소스를 방문하세요.
.NET/ C# 드라이버 에 대한 자주 묻는 질문( FAQ )
버그 보고, 드라이버 기여, 추가 리소스 찾기에 대한 정보가 포함된 문제 및 도움말 페이지
질문, 토론 또는 일반적인 기술 지원을 위한 MongoDB Community 포럼
연결 오류
다음 오류 메시지는 드라이버가 지정된 호스트 이름 또는 포트의 서버에 연결할 수 없음을 나타냅니다. 여러 상황에서 이 오류 메시지가 발생할 수 있습니다. 이 샘플 오류 메시지에서 호스트 이름은 127.0.0.1
(이)고 포트는 27017
입니다.
Error: couldn't connect to server 127.0.0.1:27017
다음 섹션에서는 잠재적으로 문제를 해결하기 위해 취할 수 있는 조치에 대해 설명합니다.
연결 문자열 확인
연결 문자열의 호스트 이름과 포트 번호가 모두 정확한지 확인하세요. MongoDB 인스턴스의 기본 포트 값은 27017
(이)지만 다른 포트에서 통신하도록 MongoDB를 구성할 수 있습니다.
방화벽 구성
MongoDB 배포 서버가 수신하는 포트가 동일한 네트워크의 방화벽에 의해 차단되지 않았는지 확인합니다. MongoDB는 기본적으로 포트 27017
을(를) 사용합니다. MongoDB에서 사용하는 기본 포트 및 변경 방법에 대한 자세한 내용은 기본 MongoDB 포트를 참조하세요.
경고
MongoDB deployment에서 사용되는 포트인지 확실하지 않은 경우 방화벽에서 포트를 열지 않도록 합니다.
인증 오류
인증 메커니즘이 올바르게 구성되지 않은 경우 .NET/C# 드라이버가 MongoDB 인스턴스에 연결하지 못할 수 있습니다. 인증에 SCRAM-SHA-256
또는 SCRAM-SHA-1
을 사용하는데 드라이버가 연결에 실패할 경우, 드라이버에서 다음 메시지 중 하나와 유사한 오류 메시지를 표시할 수 있습니다.
Command failed with error 18 (AuthenticationFailed): 'Authentication failed.' on server <hostname>:<port>.
Authentication failed","attr":{"mechanism":"SCRAM-SHA-256","principalName": "<db_username>","<auth database>":"<db_username>","client":"127.0.0.1:2012", "result":"UserNotFound: Could not find user}}
connection() error occurred during connection handshake: auth error: sasl conversation error: unable to authenticate using mechanism "SCRAM-SHA-256": (AuthenticationFailed) Authentication failed.
다음 섹션에서는 잠재적으로 문제를 해결하기 위해 취할 수 있는 조치에 대해 설명합니다.
연결 문자열 확인
잘못된 연결 문자열은 연결 문자열과 SCRAM-SHA-256
또는 SCRAM-SHA-1
을 사용하여 MongoDB에 연결하려고 할 때 인증 문제가 발생하는 가장 일반적인 원인입니다.
팁
연결 문자열에 대한 자세한 내용은 연결 가이드의 연결 URI를 참조하세요.
연결 string 문자열 에 사용자 이름 과 비밀번호가 포함된 경우 올바른 형식인지 확인하세요. 사용자 이름 또는 비밀번호에 다음 문자가 포함된 경우 퍼센트로 인코딩되어야 합니다:
: / ? # [ ] @
다음 예는 '#MyP@assword?'를 퍼센트로 인코딩하는 방법을 보여줍니다.
Console.WriteLine(System.Web.HttpUtility.UrlEncode("#MyPassword?"));
이렇게 하면 다음과 같은 결과가 출력됩니다.
%23MyPassword%3F
MongoClientSettings 속성 확인
MongoDB 배포에 연결을 시도할 때 MongoClientSettings
객체를 사용하여 설정을 구성할 수 있습니다. Credential
속성을 사용하여 인증 정보를 설정할 수 있습니다. 자격 증명 정보가 정확하지 않은 경우 MongoDB 배포에 연결하려고 할 때 인증 오류가 발생합니다.
사용자가 인증 데이터베이스에 있는지 확인하기
SCRAM-SHA-256
또는 SCRAM-SHA-1
과 함께 사용자 이름과 비밀번호를 사용하여 연결을 성공적으로 인증하려면 사용자 이름을 인증 데이터베이스에 정의해야 합니다. 기본 인증 데이터베이스는 admin
데이터베이스입니다. 인증에 다른 데이터베이스를 사용하려면 연결 문자열에 authSource
를 지정합니다. 다음 예에서는 users
를 인증 데이터베이스로 사용하도록 드라이버에 지시합니다.
using MongoDB.Driver; // Connection URI const string connectionUri = "mongodb://<db_username>:<db_password>@<hostname>:<port>/?authSource=users"; // Create a new client and connect to the server var client = new MongoClient(connectionUri);
MongoClientSettings
객체를 만들고 이를 MongoClient
생성자에 전달하여 구성 설정을 지정할 수도 있습니다. Credential
속성을 사용해서 인증 데이터베이스 지정을 비롯하여 로그인 자격 증명을 설정할 수 있습니다. MongoClientSettings
사용에 대한 자세한 내용과 몇 가지 예를 보려면 MongoClientSettings 사용하기를 참조하세요.
동일한 코드를 사용하여 로컬 시스템에서 호스팅되는 MongoDB 인스턴스에 연결을 시도하여 이것이 문제인지 확인할 수 있습니다. 동일한 머신의 배포서버에는 연결하는 데 권한 부여가 필요하지 않습니다.
X.509 자격 증명 오류
Windows 를 운영 체제로 사용하는 경우 .NET/ C# 드라이버 가 메모리에서 X.509
인증 인증서를 찾을 수 없는 문제가 발생할 수 있습니다. 이 오류는 다음 오류 메시지와 함께 발생합니다.
No credentials are available in the security package
다음 섹션에서는 문제를 해결하는 데 도움이 될 수 있는 방법에 대해 설명합니다.
디스크에 인증서 생성 및 저장
다음 코드를 사용하여 애플리케이션 에 필요한 X.509
인증서를 생성합니다.
using (X509Certificate2 certWithKey = certOnly.CopyWithPrivateKey(key)) { return new X509Certificate2(certWithKey.Export(X509ContentType.Pkcs12)); }
메시지 전송 오류
요청을 한 후 드라이버가 명령을 전송하지 못하면 다음과 같은 오류 메시지가 표시될 수 있습니다.
com.mongodb.MongoSocketWriteException: Exception sending message
다음 섹션에서는 잠재적으로 문제를 해결하기 위해 취할 수 있는 조치에 대해 설명합니다.
사용자 권한 확인
올바른 사용자로 MongoDB deployment에 액세스했는지 확인하세요. 오류의 '메시지'라는 용어는 드라이버가 보낸 명령일 수 있습니다. 명령을 보낼 권한이 없는 사용자를 사용하는 경우 드라이버에서 이 오류가 발생할 수 있습니다.
또한 사용자에게 보내는 메시지에 대한 적절한 권한이 있는지 확인합니다. MongoDB는 RBAC(역할 기반 액세스 제어)를 사용하여 MongoDB 배포에 대한 액세스를 제어합니다. MongoDB에서 RBAC를 구성하는 방법에 대한 자세한 내용은 역할 기반 액세스 제어를 참조하세요.
방화벽 구성
방화벽에는 MongoDB 인스턴스와 통신할 수 있는 개방형 포트가 있어야 합니다. 방화벽 구성 정보는 연결 오류 섹션의 방화벽 구성에서 자세히 확인하세요.
연결 횟수 확인
각 MongoClient
인스턴스는 연결 풀에서 최대 동시 개방 연결 수를 지원합니다. 이 제한을 정의하는 매개변수 MaxConnectionPoolSize
을(를) 구성할 수 있습니다. 기본값은 100
입니다. MaxConnectionPoolSize
만큼 열려 있는 연결이 이미 여러 개 있는 경우 서버는 연결을 사용할 수 있을 때까지 기다립니다. 이 대기 시간이 MaxConnectionIdleTime
값을 초과하면 드라이버는 오류로 응답합니다.
연결 풀링의 작동 방식에 대한 자세한 내용은 FAQ에서 .NET/C# 드라이버에서 연결 풀링은 어떻게 작동하나요?를 참조하세요.
열려 있는 연결이 너무 많음
드라이버는 연결을 열려고 시도하지만 최대 연결 수에 도달하면 다음과 같은 오류 메시지를 생성합니다.
connection refused because too many open connections
다음 섹션에서는 문제를 해결하는 데 도움이 될 수 있는 방법에 대해 설명합니다.
연결 횟수 확인
열린 연결을 더 만들어야 하는 경우 MaxConnectionPoolSize
를 늘리세요. 연결 수 확인에 대한 자세한 내용은 메시지 전송 오류 섹션의 연결 수 확인을 참조하세요.
시간 초과 오류
네트워크가 드라이버의 요청을 서버에 충분히 빠르게 전달하지 못하면 타임아웃이 발생할 수 있습니다. 이 경우 다음 메시지와 유사한 오류 메시지가 나타날 수 있습니다.
timed out while checking out a connection from connection pool: context canceled
이 오류가 발생하면 다음 조치를 시도하여 문제를 해결하세요.
연결 제한 시간 설정
연결할 수 없는 복제본 세트 노드에 도달하는 데 시간이 너무 오래 걸려 연결을 설정할 수 없는 경우 드라이버가 중단될 수 있습니다. connectTimeMS
설정을 사용하여 드라이버가 연결을 시도하는 데 소요되는 시간을 제한할 수 있습니다. 이 설정에 대해 자세히 알아보려면 MongoDB Server 매뉴얼의 시간 초과 옵션 을 참조하세요.
connectTimeoutMS
설정이 해당 세트의 멤버에 대한 최대 네트워크 지연 시간보다 낮지 않은지 확인해야 합니다. 세컨더리 멤버 중 하나의 지연 시간이 10000밀리초인 경우 connectTimeoutMS
을(를) 9000으로 설정하면 드라이버가 해당 구성원에 연결되지 않습니다.
이 옵션은 연결 문자열에서 설정할 수 있습니다. 다음 예에서는 connectTimeoutMS
를 10000밀리초로 설정합니다.
using MongoDB.Driver; // Connection URI const string connectionUri = "mongodb://<db_username>:<db_password>@<hostname>:<port>/?connectTimeoutMS=10000"; // Create a new client and connect to the server var client = new MongoClient(connectionUri);
MongoClientSettings
객체를 만들고 이를 MongoClient
생성자에 전달하여 구성 설정을 지정할 수도 있습니다. MongoClientSettings
사용에 대한 자세한 내용과 몇 가지 예를 보려면 MongoClientSettings 사용하기를 참조 하세요.
연결 횟수 확인
서버에 대한 연결 수가 MaxConnectionPoolSize
개를 초과할 수 있습니다. 연결 수를 확인하는 방법에 대한 자세한 내용은 오류 메시지 전송 중 연결 수 확인 섹션을 참조하세요.