mongoDb 연결 문자열에서 "+srv"의 의미
저는 MongoDB가 처음이고 방금 두 가지 유형의 연결 문자열을 만났습니다.
mongodb://[사용자 이름:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[데이터베이스][?options]]]]
mongodb+srv://[hostname:password@]host[/filename][?hosts]
저는 첫 번째에 대해서 알고 있습니다.하지만 2일의 (+srv)에는 익숙하지 않습니다.
let connectionUrl;
if (username && password)
connectionUrl = `mongodb://${username}:${password}@${host}:${
port || 27017
}/${databaseName}`;
else
connectionUrl = `mongodb://${host}:${
port || 27017
}/${databaseName}`;
console.log(connectionUrl, "connectionUrlconnectionUrl");
let connection = await mongoose.createConnection(connectionUrl, {
useNewUrlParser: true,
});
return connection;
이제 문제 사용자는 사용자 이름, 암호, 호스트 이름 등을 입력할 수 있습니다.
하지만 제가 localhost와 MongoDB 아틀라스를 시도하고 있었기 때문에 (+srv)를 언제 추가해야 하는지 알 수 있는 방법이 없을까요?Atlas는 +srv에서 정상적으로 작동하지만 localhost의 경우 오류가 발생하고 있습니다.
MongoDB 3.6에는 DNS 레코드, 특히 SRV 및 TXT 레코드를 사용하여 지정된 시드 목록의 개념이 도입되었습니다.MongoDB에서 복제본 세트를 사용할 때 클라이언트가 연결할 때 적어도 하나의 복제본 세트 구성원을 지정해야 한다는 것을 기억하게 됩니다.이렇게 하면 클라이언트가 지정한 노드 중 하나를 사용할 수 없는 경우에도 클라이언트가 복제본 집합에 연결할 수 있습니다.
2.2.12 이상의 연결 문자열에서 이 URL의 예를 볼 수 있습니다.
SRV 레코드 구성 없이는 여러 노드를 나열해야 합니다(Atlas의 경우 항상 모든 클러스터 멤버를 포함하지만 필수는 아닙니다).또한 ssl 및 replicaSet 옵션을 지정해야 합니다.
3.4 이하 드라이버에서는 MongoDB URI 구문을 사용하여 명령줄의 모든 옵션을 지정해야 합니다.
SRV 레코드를 사용하면 모든 클라이언트가 클러스터에 대한 전체 상태 정보 집합을 전달할 필요가 없습니다.대신 단일 SRV 레코드가 클러스터와 연결된 모든 노드(및 해당 포트 번호)를 식별하고 관련 TXT 레코드가 URI에 대한 옵션을 정의합니다.
참조 확인
MongoDB 3.6에서는 DNS 레코드, 특히 SRV 및 TXT 레코드를 사용하여 지정된 시드 목록의 개념을 도입했습니다.
이렇게 하면 클라이언트가 지정한 노드 중 하나를 사용할 수 없는 경우에도 클라이언트가 복제본 집합에 연결할 수 있습니다.
호스트가 foo.example.com 일 것이라고 가정하고 직접 세부 정보를 얻는 방법이 궁금하다면,
host -t SRV _mongodb._tcp.foo.example.com
host -t TXT foo.example.com
위의 모든 답변은 mongoconn 문자열의 컨텍스트에서 SRV 및 TXT 레코드를 올바르게 지정합니다!!이러한 SRV 또는 TXT 레코드를 확인해야 하는 경우 다음 명령을 사용할 수 있습니다(Windows cmdi가 사용한 적이 있음).
레코드의 경우: SRV 파일:nslookup -q=SRV _mongodb._tcp.cluster0.9gztv.mongodb.net
위의 명령은 다음과 같은 결과를 제공합니다.
Non-authoritative answer:
_mongodb._tcp.cluster0.9gztv.mongodb.net SRV service location:
priority = 0
weight = 0
port = 27017
svr hostname = cluster0-shard-00-00.9gztv.mongodb.net
_mongodb._tcp.cluster0.9gztv.mongodb.net SRV service location:
priority = 0
weight = 0
port = 27017
svr hostname = cluster0-shard-00-01.9gztv.mongodb.net
_mongodb._tcp.cluster0.9gztv.mongodb.net SRV service location:
priority = 0
weight = 0
port = 27017
svr hostname = cluster0-shard-00-02.9gztv.mongodb.net
svr hostname 필드에는 복제본 세트의 일부인 3개의 서로 다른 서버 이름이 있습니다.중요한 것은 _mongodb를 추가하는 것입니다._ 접두사로 사용됩니다.
유하게사▁similarlynslookup -q=TXT cluster0.9gztv.mongodb.net
아래와 같이 결과를 알려드리겠습니다.
Non-authoritative answer:
cluster0.9gztv.mongodb.net text =
"authSource=admin&replicaSet=atlas-uovfn7-shard-0"
따라서 드라이버는 SRV 레코드에 연결 문자열의 호스트 이름을 쿼리한 다음 TXT 레코드를 결합하여 클러스터에 연결합니다.
http://pauldone.blogspot.com/2019/12/tips-for-atlas-connectivity.html
언급URL : https://stackoverflow.com/questions/66225004/what-is-meant-by-srv-in-the-mongodb-connection-string
'programing' 카테고리의 다른 글
Haml: Haml에서 조건이 참이면 클래스를 추가합니다. (0) | 2023.06.22 |
---|---|
업데이트 대 교체의 Mongod 의미 (0) | 2023.06.22 |
mongoose로 문서를 업데이트하고 저장하는 방법을 만드시겠습니까? (0) | 2023.06.22 |
j개체에 등록된 이벤트 핸들러 찾기 (0) | 2023.06.22 |
SQL Server : 식을 데이터 형식 int로 변환하는 동안 산술 오버플로 오류가 발생했습니다. (0) | 2023.06.22 |