Google Cloud Platform Functions 및 Google Cloud Platform Run을 사용하여 Atlas 클러스터와 상호 작용 수 있습니다.
모범 사례
다음 권장사항을 사용하여 Google Cloud 함수와 Atlas 간의 연결을 올바르게 관리합니다.
함수 범위의 데이터베이스 연결이 아닌 글로벌 범위의 데이터베이스 연결을 사용하여 Cloud Function을 만드세요.
함수를 호출할 때마다 새 클라이언트 객체 정의하지 마세요. 이렇게 하면 드라이버 각 함수 호출에 대해 새 데이터베이스 연결을 생성하게 됩니다. 이 경우 비용이 많이 들 수 있으며 애플리케이션 데이터베이스 연결 제한을 초과할 수 있습니다. 최상의 성능을 얻으려면 다음 지침을 따르세요.
클라이언트 객체 한 번 생성합니다.
함수가 함수 호출 전반에서 클라이언트 재사용할 수 있도록 객체 를 저장합니다.
연결 예시 기존 데이터베이스 연결을 재사용하여 데이터베이스 와의 통신 속도를 높이고 애플리케이션 트래픽과 관련하여 데이터베이스 에 대한 연결 수를 합리적인 수준으로 유지합니다.
샤드가 많은 샤딩된 클러스터에 연결하는 함수가 있는 경우 성능 문제가 발생할 수 있습니다. 예를 들어 샤드 Atlas 클러스터가 10개인 경우 드라이버는 기본적으로 30개의
mongos인스턴스 모두에 연결합니다. 연결 문자열에서srvMaxHosts옵션을 사용하여 드라이버가 연결하는 최대 호스트 수를 설정할 수 있습니다. 드라이버 성능을 개선하려면srvMaxHosts=3을 설정합니다. 예를 들면 다음과 같습니다.mongodb+srv://<db_username>:<db_password>@<clusterName>.mongodb.net/?retryWrites=true&w=majority&srvMaxHosts=3 자세한 사항은 연결 옵션을 참조하세요.
Atlas 클러스터에 대한 네트워크 액세스를 제한합니다.
프라이빗 네트워킹을 통해 Atlas 클러스터를 연결하세요. Google Cloud 기능과 Atlas 클러스터 간 네트워크 피어링 연결 또는 비공개 엔드포인트를 사용하여 연결하면 IP 액세스 목록의 프라이빗 IP 주소만 허용할 수 있습니다.
개인 네트워킹을 사용하지 않는 경우 NAT 게이트웨이를 통해 Atlas 클러스터에 연결하는 방식을 고려해 보세요. . 그렇지 않으면 모든 IP 주소(0.0.0.0/0)가 Atlas 클러스터에 액세스할 수 있도록 허용해야 합니다.
경고
와 같은
/0CIDR을0.0.0.0/0추가하면 어디에서나 액세스 할 수 있습니다. 이 구성은 배포서버 무단 액세스 , 데이터 유출 및 기타 악의적인 활동에 노출할 수 있습니다. 가능하면 신뢰할 수 있는 IP 주소 또는 CIDR 범위에 대한 액세스 제한하고, 공용 인터넷에서 액세스 허용할 때는 모든 데이터베이스 사용자에 대해 강력한 자격 증명 사용합니다.참고
프로젝트 액세스 목록에 IPv4
/0CIDR(예:0.0.0.0/0또는10.0.0.0/0)을 추가하면 Atlas 프로젝트 에 직접 역할 부여한 모든 사용자 또는 다음을 통해 간접적으로 역할 부여받은 모든 사용자에게 경고 이메일 보냅니다. 팀 멤버십( 팀 에 프로젝트 에 대한 역할 부여된 경우).
- 유휴 시간 1분 후 자동으로 연결을 종료하려면 maxIdleTimeMS를
60000으로 설정합니다.maxIdleTimeMS를 조정하면 서버리스 함수에서 시간 초과 오류 발생을 줄이는 데 유용할 수 있습니다.
동시성을 구성합니다. 새 Google Cloud 기능을 만드는 경우:
여러 개의 동시 요청을 처리하다 할 수 있는 2nd gen 환경을 선택합니다. 2nd gen은 또한 함수가 많은 동시 호출로 단일
MongoClient를 주식 할 수 있도록 하여 서버 의 연결 부하를 줄입니다.동시성 설정을 높이면 콜드 부팅을 최소화하고 지연 시간을 개선할 수 있습니다.
참고
동시성 설정을 늘리는 경우 최상의 성능을 위해 CPU를 늘려야 할 수 있습니다. 자세한 학습 은 동시성을 참조하세요.
Google Cloud 연결 예시
다음 예시에서는 Node.js Google Cloud 함수를 Atlas 배포셔벼에 연결합니다. <YOUR-ATLAS-CONNECTION-STRING>을 Atlas 연결 문자열로 바꿉니다.
const { MongoClient } = require('mongodb'); let client; async function getConnection() { if (!client) { const client = new MongoClient('<YOUR-ATLAS-CONNECTION-STRING>'); client.on('connectionCreated', () => { console.log('New connection created successfully.'); }); // Connect to the database in the global scope await client.connect(); } return client; }