Docs Menu
Docs Home
/ / /
Go 드라이버
/ /

연결 가이드

이 페이지의 내용

  • 개요
  • 연결 URI
  • MongoDB에 연결하는 다른 방법
  • 연결 옵션

이 가이드에서는 Go 드라이버를 사용하여 MongoDB 인스턴스 또는 복제본 세트 배포에 연결하는 방법을 알아볼 수 있습니다.

다음 환경에 호스팅된 배포에 연결하기 위해 Go 드라이버를 사용할 수 있습니다:

  • MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스

  • MongoDB Enterprise: 구독 기반의 자체 관리형 MongoDB 버전입니다.

  • MongoDB Community: 소스 사용 가능하고, 무료로 사용할 수 있으며 자체적으로 관리되는 MongoDB 버전입니다.

연결 문자열이라고도 하는 연결 URI는 드라이버에 MongoDB에 연결하는 방법과 연결된 동안 동작하는 방법을 알려줍니다.

다음 예시에서는 샘플 연결 URI의 각 부분을 설명합니다.

연결 문자열의 각 부분

이 예에서는 표준 연결 문자열 형식을 지정하는 프로토콜에 mongodb을 사용합니다. 배포서버의 유연성을 높이고 클라이언트를 재구성하지 않고도 서버를 교대로 변경할 수 있는 기능을 원하는 경우 DNS 시드 목록 연결 형식을 사용할 수도 있습니다.

연결 문자열의 다음 부분에는 데이터베이스 사용자 이름과 암호 기반 인증을 사용하는 경우 암호가 포함됩니다. user의 값을 데이터베이스 사용자 이름으로, pass의 값을 비밀번호로 교체하세요. 사용자 이름과 비밀번호가 필요하지 않은 인증 메커니즘을 사용하는 경우 연결 URI에서 이 부분을 생략합니다.

연결 문자열의 다음 부분은 MongoDB 인스턴스의 호스트 이름 또는 IP 주소 및 포트를 지정합니다. 앞의 예에서는 sample.host을 호스트 이름으로, 27017을 포트로 사용합니다. 이 값을 MongoDB 인스턴스의 포인트 정보로 바꿉니다.

연결 문자열의 마지막 부분은 연결 및 인증 옵션을 지정합니다. 위의 예에서는 maxPoolSize=20w=majority의 두 가지 연결 옵션을 설정했습니다. 연결 옵션에 대해 자세히 알아보려면 이 가이드의 연결 옵션 섹션을 참조하세요.

MongoDB에 연결하려면 클라이언트를 만들어야 합니다. 클라이언트는 연결을 관리하고 데이터베이스 명령을 실행합니다.

클라이언트 재사용

세션 및 작업 전반에서 클라이언트 를 재사용하는 Client 것이 좋습니다. 매번 새 인스턴스를 만드는 대신 동일한 인스턴스 를 사용하여 여러 작업을 수행할 수 있습니다.Client 유형은 여러 goroutine 에서 동시에 사용하기에 안전합니다. 운전자 에서 연결 풀이 작동하는 방식에 학습 보려면 FAQ 페이지를 참조하세요.

ClientOptions 객체를 Connect() 생성자에 전달하여 연결 문자열과 기타 클라이언트 옵션을 사용하는 클라이언트를 만들 수 있습니다.

연결 URI를 지정하려면 이를 새 ClientOptions 인스턴스를 반환하는 ApplyURI() 메서드에 전달하세요. 다른 옵션을 설정하려면 options 패키지에서 관련 도우미 메서드를 호출하세요.

연결 옵션에 대한 자세한 내용은 Connection Options(연결 옵션) 섹션을 참조하십시오. 클라이언트 생성에 대한 자세한 내용은 클라이언트Connect()에 대한 API 설명서를 참조하십시오.

새 서버 버전으로 업그레이드할 때 호환성이 손상되는 변경을 방지하기 위해 Stable API 버전을 옵션으로 설정할 수 있습니다. Stable API 기능에 대해 자세히 알아보려면 Stable API 페이지를 참조하세요.

다음 코드는 Atlas 연결 문자열과 Stable API 버전을 사용하는 클라이언트를 만들고, MongoDB에 연결하고, 연결이 성공했는지 확인하는 방법을 보여 줍니다.

// Connects to MongoDB and sets a Stable API version
package main
import (
"context"
"fmt"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
// Replace the placeholder with your Atlas connection string
const uri = "<connection string>"
func main() {
// Use the SetServerAPIOptions() method to set the Stable API version to 1
serverAPI := options.ServerAPI(options.ServerAPIVersion1)
opts := options.Client().ApplyURI(uri).SetServerAPIOptions(serverAPI)
// Create a new client and connect to the server
client, err := mongo.Connect(context.TODO(), opts)
if err != nil {
panic(err)
}
defer func() {
if err = client.Disconnect(context.TODO()); err != nil {
panic(err)
}
}()
// Send a ping to confirm a successful connection
var result bson.M
if err := client.Database("admin").RunCommand(context.TODO(), bson.D{{"ping", 1}}).Decode(&result); err != nil {
panic(err)
}
fmt.Println("Pinged your deployment. You successfully connected to MongoDB!")
}

빠른 시작 가이드에 따라 Atlas 연결 문자열을 검색하세요.

참고

Atlas 서버리스 연결에 대해 자세히 알아보려면 필요한 최소 드라이버 버전을 식별하는 서버리스 인스턴스 제한 페이지를 참조하세요.

Atlas에서 호스팅되지 않는 단일 MongoDB 서버 인스턴스 또는 복제본 세트에 연결하는 경우, 다음 섹션을 참조하여 연결 방법을 알아보세요.

개발 목적으로 로컬 머신에서 MongoDB 서버를 실행해야 하는 경우 다음 단계를 완료하세요.

  1. MongoDB Server의 Community 또는 Enterprise 버전을 다운로드하세요.

  2. MongoDB 서버를 설치하고 구성합니다.

  3. 서버를 시작합니다.

중요

악의적인 공격으로부터 항상 MongoDB 서버를 보호하세요. 보안 체크리스트에서 보안 권장 사항 목록을 확인하세요.

MongoDB Server를 성공적으로 시작한 후에는 드라이버 연결 코드에 연결 문자열을 지정하세요.

MongoDB Server가 로컬에서 실행되는 경우 연결 문자열("mongodb://localhost:<port>")을 사용할 수 있습니다. 여기서 <port>는 서버가 들어오는 연결을 수신하도록 구성한 포트 번호입니다.

다른 호스트 이름이나 IP 주소를 지정하려면 연결 문자열에 대한 서버 매뉴얼 항목을 참조하세요.

서버에 연결할 수 있는지 여부를 테스트하려면 앞의 코드 예시에서 연결 문자열을 localhost 연결 문자열로 바꿉니다.

MongoDB 복제본 세트 배포는 동일한 데이터 세트를 저장하는 연결된 인스턴스 그룹입니다. 이 구성은 데이터 중복성과 높은 데이터 가용성을 제공합니다.

복제본 세트 배포서버에 연결하려면 각 인스턴스의 호스트 이름과 포트 번호를 쉼표로 구분하고, 연결 문자열의 replicaSet 매개변수 값으로 복제본 세트 이름을 지정하세요. 다음 예에서 호스트 이름은 host1, host2, host3이고 포트 번호는 모두 27017입니다. 복제본 세트 이름은 myRS입니다.

mongodb://host1:27017,host2:27017,host3:27017/?replicaSet=myRS

복제본 세트에 연결할 때 드라이버는 기본적으로 다음 작업을 수행합니다.

  • 한 멤버의 주소가 제공되면 모든 복제본 세트 멤버를 검색합니다.

  • 프라이머리 멤버에 대한 쓰기 명령과 같은 작업을 해당 멤버에 전달합니다.

복제본 세트에 연결할 호스트를 하나만 지정할 수 있습니다. 하지만 지정된 호스트를 사용할 수 없을 때 연결을 보장하려면 전체 호스트 목록을 제공해야 합니다.

연결 URI에 지정된 호스트에서 작업을 강제하려면 directConnection 옵션을 지정합니다. 직접 연결:

  • SRV 문자열은 지원하지 않습니다.

  • 지정된 호스트가 프라이머리 호스트가 아닌 경우 쓰기에 실패합니다.

  • 지정된 호스트가 프라이머리 호스트가 아닌 경우 세컨더리 읽기 설정을 지정해야 합니다.

이 섹션에서는 몇 가지 일반적인 MongoDB 연결 및 인증 옵션에 대해 설명합니다. 연결 옵션을 연결 URI의 매개변수로 전달하여 클라이언트의 동작을 지정할 수 있습니다.

옵션 이름
유형
기본값
설명
timeoutMS
integer
null
Client에서 단일 작업을 실행할 때 제한 시간 오류가 반환되기 전에 걸릴 수 있는 시간을 밀리초 단위로 지정합니다. 작업 컨텍스트에 최종 기한이 없는 경우에만 작업에서 이 설정을 따릅니다.
connectTimeoutMS
integer
30000
TCP 연결이 시간 초과되기 전에 대기할 시간(밀리초)을 지정합니다.
maxPoolSize
integer
100
특정 시간에 연결 풀이 가질 수 있는 최대 연결 수를 지정합니다.
복제본 세트
문자열
null
클러스터의 복제본 세트 이름을 지정합니다. 복제본 세트의 모든 노드는 동일한 복제본 세트 이름을 가져야 하며, 그렇지 않으면 클라이언트가 해당 노드를 세트의 일부로 간주하지 않습니다.
maxIdleTimeMS
integer
0
연결이 제거되고 닫히기 전에 연결 풀에서 유휴 상태로 남아 있을 수 있는 최대 시간을 지정합니다. 기본값은 0으로, 연결이 무기한 사용되지 않은 상태로 유지될 수 있습니다.
minPoolSize
integer
0
드라이버가 단일 연결 풀에서 유지 관리하는 최소 연결 수를 지정합니다.
socketTimeoutMS
integer
0
네트워크 오류를 반환하기 전에 소켓 읽기 또는 쓰기가 반환될 때까지 기다리는 시간(밀리초)을 지정합니다. 0 기본값은 시간 초과가 없음을 나타냅니다.
serverSelectionTimeoutMS
integer
30000
작업을 실행하는 데 사용 가능하고 적합한 서버를 찾기 위해 기다리는 시간(밀리초)을 지정합니다.
heartbeatFrequencyMS
integer
10000
정기적인 백그라운드 서버 확인 사이에 대기할 시간(밀리초)을 지정합니다.
TLS
부울
false
인스턴스와의 TLS(전송 계층 보안) 연결을 설정할지 여부를 지정합니다. 연결 문자열에서 DNS 시드 목록(SRV) 을 사용할 때 이 값은 자동으로 true로 설정됩니다. 값을 false로 설정하여 이 동작을 재정의할 수 있습니다.
w
문자열 또는 정수
null
쓰기 고려를 지정합니다. 값에 대해 자세히 알아보려면 쓰기 고려 옵션에 대한 서버 설명서를 참조하세요.
directConnection
부울
false
연결 URI에 지정된 호스트에 모든 작업을 강제로 디스패치할지 여부를 지정합니다.

연결 옵션의 전체 목록은 ClientOptions API 설명서를 참조하세요.

Client 파일에 단일 Timeout 옵션을 설정하여 SetTimeout() 메서드를 사용하거나 연결 URI 문자열에 timeoutMS 옵션을 지정하여 단일 작업을 실행하는 데 걸리는 시간을 제어할 수 있습니다. 코드의 다른 곳에 있는 Database, Collection, Session, ChangeStreamBucket 인스턴스는 동일한 엔티티에 대한 작업에 대한 컨텍스트를 설정하지 않은 경우 Client에서 Timeout 옵션을 상속받습니다.

기한이 있는 작업에 컨텍스트를 전달하면 드라이버는 작업에 해당 컨텍스트 기한을 사용합니다. 컨텍스트에 기한이 없는 경우 드라이버는 Client에 설정된 Timeout 옵션을 사용하여 지정된 컨텍스트에서 새 컨텍스트를 파생합니다.

참고

시간 초과 사양에 따른 재시도

기본 설정을 사용하면 ClientTimeout 옵션을 설정하고 작업을 재시도해야 하는 경우 드라이버는 시간 제한이 만료되기 전에 가능한 한 많은 횟수만큼 작업을 재시도합니다. 시간 제한이 만료되면 드라이버는 시간 초과 오류를 반환합니다. Go 드라이버 버전 1.1 이상에서는 기본적으로 재시도 가능 읽기 및 쓰기가 활성화되어 있습니다. 재시도 가능 읽기재시도 가능 쓰기에 대한 자세한 내용은 서버 매뉴얼을 참조하세요.

다음 코드는 SetTimeout 옵션이 있는 Client에서 Timeout 옵션을 설정하는 방법을 보여줍니다.

opts := options.Client().SetTimeout(5 * time.Second)

다음 예제는 URI 옵션을 사용하여 단일 제한 시간을 설정하고 이 설정을 상속하는 작업을 실행하는 방법을 보여 줍니다.

uri := "mongodb://user:pass@sample.host:27017/?timeoutMS=5000"
client := mongo.Connect(context.TODO(), uri)
coll := client.Database("<db>").Collection("<collection>")
...
coll.InsertOne(context.Background(), doc)

중요

레거시 시간 초과 옵션

SocketTimeout, wTimeout, MaxTime, MaxCommitTime는 다음 릴리스에서 더 이상 사용되지 않습니다. Timeout을 설정하면 드라이버는 MaxTimeMaxCommitTime를 무시합니다. 드라이버는 여전히 SocketTimeoutwTimeout 기능을 지원하지만 이러한 설정으로 인해 정의되지 않은 동작이 발생할 수 있습니다. 대신 단일 타임아웃 옵션만 사용하는 것이 좋습니다.

돌아가기

연결