Google 클라우드로 연결 관리
이 페이지의 내용
GCP Functions 를 사용하여 Atlas cluster와 상호 작용할 수 있습니다. 및 GCP 실행.
모범 사례
다음 권장사항을 사용하여 Google Cloud 함수와 Atlas 간의 연결을 올바르게 관리합니다.
함수 범위의 데이터베이스 연결이 아닌 글로벌 범위의 데이터베이스 연결을 사용하여 Cloud Function을 만드세요.
함수를 호출할 때마다 새
MongoClient
객체를 정의하지 않습니다. 이로 인해 드라이버가 각 함수 호출에 대해 새 데이터베이스 연결을 생성하게 됩니다. 이 경우 비용이 많이 들 수 있고 그 결과 애플리케이션이 데이터베이스 연결 제한을 초과할 수 있습니다. 새MongoClient
를 정의하는 경우 다음과 같이 수행해야 합니다.MongoClient
객체를 한 번 생성합니다.함수가 함수 호출에서
MongoClient
를 재사용할 수 있도록 객체를 저장합니다.
연결 예시는 기존 데이터베이스 연결을 재사용하여 데이터베이스와의 통신 속도를 높이고 애플리케이션 트래픽과 관련하여 데이터베이스에 대한 연결 수를 합리적인 수준으로 유지합니다.
샤드가 많은 샤딩된 클러스터에 연결하는 함수가 있는 경우 성능 문제가 발생할 수 있습니다. 예를 들어 샤드 Atlas 클러스터가 10개인 경우 드라이버는 기본적으로 30개의
mongos
인스턴스 모두에 연결합니다. 연결 문자열에서srvMaxHosts
옵션을 사용하여 드라이버가 연결하는 최대 호스트 수를 설정할 수 있습니다. 드라이버 성능을 개선하려면srvMaxHosts=3
을 설정합니다. 예를 들면 다음과 같습니다.mongodb+srv://<db_username>:<db_password>@<clusterName>.mongodb.net/?retryWrites=true&w=majority&srvMaxHosts=3 자세한 사항은 연결 옵션을 참조하세요.
Atlas 클러스터에 대한 네트워크 액세스를 제한합니다.
Atlas 클러스터 Atlas 와 GCP 함수 간의 네트워크 피어링 연결 을 사용하거나 비공개 엔드포인트 를 사용하여 비공개 네트워킹을 통해 클러스터 에 연결하여 IP 액세스 IP 목록 에서 비공개 주소만 허용할 수 있습니다.
개인 네트워킹을 사용하지 않는 경우 NAT 게이트웨이를 통해 Atlas 클러스터에 연결하는 방식을 고려해 보세요. . 그렇지 않으면 모든 IP 주소(0.0.0.0/0)가 Atlas 클러스터에 액세스할 수 있도록 허용해야 합니다.
경고
IP 액세스 목록에
0.0.0.0/0
추가하면 공용 인터넷의 어디에서든지 cluster에 액세스할 수 있습니다. 어디에서든 액세스를 허용하는 경우 데이터베이스 사용자 에 대해 강력한 자격 증명을 사용해야 합니다.
유휴 시간 1분 후 자동으로 연결을 종료하려면 maxIdleTimeMS를
60000
으로 설정합니다.maxIdleTimeMS
를 조정하면 서버리스 함수에서 시간 초과 오류 발생을 줄이는 데 유용할 수 있습니다.
동시성을 구성합니다. 새 Google Cloud 기능을 만드는 경우:
여러 개의 동시 요청을 처리할 수 있는 2nd gen 환경을 선택합니다. 2ndgen은 또한 함수가 많은 동시 호출로 단일
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; }