AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

연결 대상 선택

이 가이드 에서는 연결 string 과 MongoDB\Client 객체 를 사용하여 다양한 유형의 MongoDB deployment에 연결하는 방법을 학습 수 있습니다.

MongoDB 에서 deployment에 Atlas 연결하려면 연결 에 다음 요소를 string 포함하세요.

  • Atlas cluster 의 URI

  • 데이터베이스 사용자 이름

  • 데이터베이스 사용자의 비밀번호

그런 다음 연결 string 을 MongoDB\Client 생성자에 전달합니다.

Atlas 에 연결할 때 Stable API 클라이언트 옵션을 사용하여 Atlas 를 새 버전의 MongoDB Server 로 업그레이드할 때 호환성이 손상되는 변경을 방지하는 것이 좋습니다. Stable API 기능 에 학습 보려면 Stable API 페이지를 참조하세요.

다음 코드는 PHP 라이브러리를 사용하여 Atlas cluster 에 연결하는 방법을 보여줍니다. 또한 이 코드는 serverApi 옵션을 사용하여 Stable API 버전을 지정합니다.

<?php
// Replace the placeholder with your Atlas connection string
$uri = '<connection string>';
// Create a MongoDB client with server API options
$client = new MongoDB\Client($uri, [], [
'serverApi' => new MongoDB\Driver\ServerApi('1'),
]);
// Ping the server to verify that the connection works
$admin = $client->admin;
$command = new MongoDB\Driver\Command(['ping' => 1]);
$result = $admin->command($command)->toArray();
echo json_encode($result), PHP_EOL;
echo 'Pinged your deployment. You successfully connected to MongoDB!', PHP_EOL;

빠른 시작의 연결 string만들기 단계에 따라 연결 string 을 조회 합니다.

로컬 MongoDB deployment에 연결하려면 localhost 을 호스트 이름으로 사용합니다. 기본적으로 mongod 프로세스는 포트 27017 에서 실행되지만, 배포서버에 맞게 사용자 지정할 수 있습니다.

다음 코드는 PHP 라이브러리를 사용하여 로컬 MongoDB deployment 에 연결하는 방법을 보여줍니다.

<?php
$uri = 'mongodb://localhost:27017';
$uriOptions = ['serverSelectionTimeoutMS' => 10000];
$client = new MongoDB\Client($uri, $uriOptions);

복제본 세트 에 연결하려면 연결 에 IP 복제본 세트 멤버의 호스트 이름(또는 주소)과 포트 번호를 string 지정합니다.

복제본 세트 에 있는 호스트의 전체 목록을 제공할 수 없는 경우, 복제본 복제본 세트 에 있는 호스트 중 하나 이상을 지정하고 다른 호스트를 찾기 위해 자동 검색을 수행하도록 PHP 라이브러리에 지시할 수 있습니다. 운전자 에 자동 검색을 수행하도록 지시하려면 다음 작업 중 하나를 선택합니다.

  • 복제본 세트의 이름을 replicaSet 매개변수의 값으로 지정합니다.

  • directConnection 매개 변수의 값으로 false를 지정합니다.

  • 복제본 세트에 둘 이상의 호스트를 지정합니다.

다음 예시에서 드라이버는 샘플 연결 URI를 사용하여 host1를 포함하여 서로 다른 세 호스트의 27017 포트에서 실행 중인 MongoDB 복제본 세트 sampleRS에 연결합니다.

<?php
$uri = 'mongodb://host1:27017/?replicaSet=sampleRS';
// Create a MongoDB client
$client = new MongoDB\Client($uri);

복제본 세트 를 초기화하려면 단일 멤버에 직접 연결해야 합니다. 이렇게 하려면 연결 string 에서 directConnection 연결 옵션을 true 로 설정하다 합니다. 다음 코드 예시 에서는 이 연결 옵션을 설정하다 하는 방법을 보여줍니다.

<?php
// Replace the placeholders with your actual hostname and port
$uri = 'mongodb://<hostname>:<port>/?directConnection=true';
// Create a MongoDB client
$client = new MongoDB\Client($uri);

참고

Docker에서의 복제본 세트

복제본 세트 Docker 에서 실행되면 MongoDB 엔드포인트를 하나만 노출할 수 있습니다. 이 경우 복제본 세트 검색할 수 없습니다. 연결 URI에 directConnection=false 을(를) 지정하거나 이 옵션을 설정하지 않은 상태로 두면 애플리케이션 연결 URI에 연결되지 않을 수 있습니다.

테스트 또는 개발 환경에서 directConnection=true를 지정하여 복제본 세트에 연결할 수 있습니다. 프로덕션 환경에서는 Docker 가상 네트워크 외부에서 각 MongoDB 인스턴스에 액세스할 수 있도록 클러스터를 구성하는 것이 좋습니다.

DNS 서비스 검색을 사용하여 연결하려는 서비스의 DNS SRV 기록 조회하려면 연결 문자열 에 SRV 연결 형식을 지정합니다. 이 형식을 지정하면 PHP 라이브러리가 자동으로 새 호스트를 다시 스캔합니다. 배포서버 클라이언트 구성을 변경하지 않고도 토폴로지 에 호스트를 추가할 수 있습니다.

다음 코드는 SRV 연결 형식을 사용하는 연결 문자열 보여줍니다.

$uri = 'mongodb+srv://<hostname>/';

SRV 연결 형식에 대해 자세히 학습 MongoDB Server 매뉴얼의 SRV 연결 형식 항목을 참조하세요.

다음 코드는 애플리케이션 에서 생성할 수 있는 가능한 서버 선택 오류 메시지를 보여줍니다.

No suitable servers found (`serverSelectionTryOnce` set):
[connection refused calling hello on 'a.example.com:27017']
[connection refused calling hello on 'b.example.com:27017']
No suitable servers found: `serverSelectionTimeoutMS` expired:
[socket timeout calling hello on 'example.com:27017']
No suitable servers found: `serverSelectionTimeoutMS` expired:
[connection timeout calling hello on 'a.example.com:27017']
[connection timeout calling hello on 'b.example.com:27017']
[TLS handshake failed: -9806 calling hello on 'c.example.com:27017']
No suitable servers found: `serverselectiontimeoutms` timed out:
[TLS handshake failed: certificate verify failed (64): IP address mismatch calling hello on 'a.example.com:27017']
[TLS handshake failed: certificate verify failed (64): IP address mismatch calling hello on 'b.example.com:27017']

The PHP extension usually represents these errors as MongoDB\Driver\Exception\ConnectionTimeoutException exceptions. However, the exception messages originate from libmongoc, which is the underlying system library used by the extension. Since these messages can take many forms, we recommend breaking down the structure of the message so you can better diagnose errors in your application.

메시지는 일반적으로 "적합한 서버를 찾을 수 없음"으로 시작합니다. 메시지의 다음 부분은 서버 선택이 실패한 방법 을 나타냅니다. 확장 프로그램은 서버 선택 루프를 피하고 serverSelectionTryOnce 연결 문자열 옵션에 따라 기본값 으로 한 번만 시도합니다. 확장 프로그램이 루프를 사용하도록 구성된 경우 "serverSelectionTimeoutMS expireed"라는 문구가 포함된 메시지는 시간 제한을 모두 소진했음을 나타냅니다.

메시지의 마지막 구성 요소는 서버 선택이 실패한 이유 를 알려주며 각 호스팅하다 에 대한 연결 및 모니터링 담당하는 서비스인 토폴로지 스캐너에서 직접 보내는 하나 이상의 오류를 포함합니다. 이전에 모니터링 중에 오류가 발생한 모든 호스팅하다 이 목록에 포함됩니다. 이러한 메시지는 일반적으로 낮은 수준의 소켓 또는 TLS 함수에서 발생합니다.

다음 목록에서는 마지막 오류 메시지 구성 요소에 포함된 일반적인 구문의 가능한 의미를 설명합니다.

  • "연결이 거부되었습니다": 원격 호스팅하다 예상 포트에서 수신 대기하지 않을 수 있습니다.

  • '연결 시간 초과': 라우팅 문제, 방화벽 오류 또는 지연 시간 으로 인한 시간 초과가 있을 수 있습니다.

  • '소켓 시간 초과': 초기 연결이 설정되었을 수 있으며, 지연 시간 으로 인해 삭제되거나 시간이 초과되었을 수 있습니다.

  • "TLS 핸드셰이크 실패": TLS 또는 OCSP 확인에 실패했으며, 잘못 구성된 TLS 인증서를 사용하고 있을 수 있습니다.

연결에 실패한 경우 connect 도구를 사용하여 자세한 문제 해결 정보를 확인할 수 있습니다. 이 도구는 소켓 함수를 사용하여 연결 문자열 의 각 호스팅하다 에 연결을 시도한 다음 데이터와의 상호 작용 을 시도합니다. 컴포저를 사용하여 라이브러리를 설치한 경우 다음 명령을 사용하여 connect 도구를 시작할 수 있습니다.

php vendor/mongodb/mongodb/tools/connect.php <connection URI>

연결하려는 서버 연결을 허용하지 않는 경우 출력은 다음 코드와 유사합니다.

Looking up MongoDB at <connection URI>
Found 1 host(s) in the URI. Will attempt to connect to each.
Could not connect to <host>:<port>: Connection refused

참고

이 도구는 mongodb:// URI 스키마 만 지원합니다. mongodb+srv 체계 사용은 지원되지 않습니다.

MongoDB\Client 클래스 사용에 학습 보려면 다음 API 문서를 참조하세요.