Docs Menu
Docs Home
/ / /
Go

연결 문제 해결

이 페이지의 내용

  • 연결 오류
  • 연결 문자열 확인
  • 방화벽 구성
  • 인증 오류
  • 연결 문자열 확인
  • 인증 메커니즘 확인
  • 사용자가 인증 데이터베이스에 있는지 확인
  • 메시지 전송 오류
  • 연결 문자열 확인
  • 인증 메커니즘 확인
  • 사용자가 인증 데이터베이스에 있는지 확인
  • 방화벽 구성
  • 연결 횟수 확인
  • 시간 초과 오류
  • 제한 시간 옵션 설정
  • 연결 횟수 확인

이 페이지에서는 MongoDB Go 드라이버를 사용하여 MongoDB 배포에 연결할 때 발생할 수 있는 문제에 대한 잠재적인 해결책을 제시합니다.

참고

이 페이지에서는 연결 문제만 다룹니다. MongoDB 또는 드라이버에 다른 문제가 발생하는 경우 다음 리소스를 방문하세요.

  • 고 (Go) 운전자 에 대한 자주 묻는 질문 ( 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 인스턴스에서 사용하는 포트인지 확실하지 않은 경우 방화벽에서 포트를 열지 마십시오.

승인이 올바르게 구성되지 않은 경우 Go 드라이버가 MongoDB 인스턴스에 연결하지 못할 수 있습니다. 이 경우 드라이버는 다음 메시지 중 하나와 비슷한 오류 메시지를 표시합니다.

Command failed with error 18 (AuthenticationFailed): 'Authentication
failed.' on server localhost:27017.
connection() error occurred during connection handshake: auth error:
sasl conversation error: unable to authenticate using mechanism
"SCRAM-SHA-256": (AuthenticationFailed) Authentication failed.

다음 섹션에서는 문제 해결에 도움이 될 수 있는 방법을 설명합니다.

유효하지 않은 연결 문자열은 MongoDB에 연결하려고 할 때 인증 문제를 일으키는 가장 흔한 원인입니다.

연결 문자열에 대한 자세한 내용은 연결 가이드의 연결 URI를 참조하세요.

연결 문자열에 사용자 이름과 비밀번호가 포함된 경우 올바른 형식인지 확인합니다.

참고

사용자 이름 또는 비밀번호에 다음 문자가 포함된 경우 퍼센트로 인코딩되어야 합니다.

: / ? # [ ] @

복제본 세트에 연결할 때는 연결 문자열에 복제본 세트의 모든 호스트를 포함해야 합니다. 연결 문자열의 각 호스트를 쉼표로 구분합니다. 이렇게 하면 호스트 중 하나에 연결할 수 없는 경우 드라이버가 연결을 설정할 수 있습니다.

자격 증명 및 인증 메커니즘이 올바른지 확인합니다. 인증 자격 증명을 환경 변수에 저장하거나 이를 SetAuth() 메서드에 전달할 수 있습니다.

인증에 대해 자세히 알아보려면 인증 메커니즘 가이드를 참조하세요.

사용자 이름과 비밀번호를 사용하여 연결을 성공적으로 인증하려면 사용자 이름을 인증 데이터베이스에 정의해야 합니다. 기본 인증 데이터베이스는 admin 데이터베이스입니다. 인증에 다른 데이터베이스를 사용하려면 연결 문자열에 authSource를 지정합니다. 다음 예에서는 드라이버가 users를 인증 데이터베이스로 사용하도록 지합니다.

uri := "mongodb://<username>:<password>@<hostname>:<port>/?authSource=users"
client := mongo.Connect(uri)

요청을 한 후 드라이버가 명령을 전송하지 못하면 다음과 같은 일반 오류 메시지가 표시되는 경우가 많습니다.

com.mongodb.MongoSocketWriteException: Exception sending message

다음 섹션에서는 문제 해결에 도움이 될 수 있는 방법을 설명합니다.

앱의 연결 문자열이 정확한지 확인합니다. 연결 문자열 확인에 대한 자세한 내용은 연결 오류인증 오류를 참조하세요.

올바른 인증 메커니즘과 자격 증명을 사용해야 합니다. 인증 오류에 대한 자세한 내용은 인증 오류를 참조하세요.

사용자가 올바른 인증 데이터베이스에 있는지 확인합니다. 인증 데이터베이스에 대한 자세한 내용은 인증 오류를 참조하세요.

방화벽에는 MongoDB 인스턴스와 통신하기 위한 열린 포트가 있어야 합니다. 방화벽 구성에 대한 자세한 내용은 연결 오류를 참조하세요.

MongoClient 인스턴스는 연결 풀에서 최대 동시 개방 연결 수를 지원합니다. 구성 매개 변수 maxPoolSize는 이 값을 정의하며 기본적으로 100으로 설정됩니다. maxPoolSize만큼 열려 있는 연결이 이미 여러 개 있는 경우 서버는 연결을 사용할 수 있을 때까지 기다립니다. 이 대기 시간이 maxIdleTimeMS 값을 초과하면 드라이버는 오류로 응답합니다. 연결 풀링의 작동 방식에 대한 자세한 내용은 FAQ에서 Go 드라이버에서 연결 풀링은 어떻게 작동하나요?를 참조하세요.

드라이버를 통해 서버에 요청을 보낼 때 요청 시간이 초과되는 경우가 있습니다. 이 경우 다음 메시지와 비슷한 오류 메시지가 나타날 수 있습니다.

timed out while checking out a connection from connection pool: context canceled

이 오류가 발생하면 다음 조치를 시도하여 문제를 해결하세요.

Client는 단일 작업을 실행하는 데 걸리는 시간을 제어하는 단일 Timeout 옵션을 지원합니다. SetTimeout() 메서드를 사용하거나 연결 문자열에 timeoutMS 옵션을 지정하여 이 값을 설정할 수 있습니다.

다음 예에서는 연결 문자열 옵션을 사용하여 단일 제한 시간 값을 5초로 설정합니다.

uri := "mongodb://<username>:<password>@<hostname>:27017/?timeoutMS=5000"
client := mongo.Connect(uri)

서버에 대한 연결 수가 maxPoolSize개를 초과할 수 있습니다. 연결 수를 확인하는 방법에 대한 자세한 내용은 메시지 전송 오류를 참조하세요.

돌아가기

FAQ