Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
PHP 라이브러리 매뉴얼
/

연결 대상 선택

이 가이드에서는 연결 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!\n';

빠른 시작의 연결 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']

PHP 확장은 일반적으로 이러한 오류를 MongoDB\ 드라이버\Exception\ConnectionTimeoutException 예외로 나타냅니다. 그러나 예외 메시지는 libmongoc 확장에서 사용하는 기본 시스템 라이브러리인 에서 발생합니다. 이러한 메시지는 다양한 형태를 취할 수 있으므로 애플리케이션 의 오류를 더 잘 진단할 수 있도록 메시지 구조를 세분화하는 것이 좋습니다.

메시지는 일반적으로 "적합한 서버를 찾을 수 없음"으로 시작합니다. 메시지의 다음 부분은 서버 선택이 실패한 방법 을 나타냅니다. 확장 프로그램은 서버 선택 루프를 피하고 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 문서를 참조하세요.

돌아가기

클라이언트 만들기

이 페이지의 내용