Database user sudah dibuat dan IP access list sudah terisi — saatnya menyambungkan aplikasi. Kunci dari seluruh proses ini adalah satu baris connection string berawalan mongodb+srv:// yang diambil dari UI Atlas. Chapter ini membedah cara kerja format SRV tersebut, menyiapkan skrip uji koneksi yang bisa dipakai ulang, dan menyiapkan perbedaan penting antara menjalankan aplikasi dari mesin lokal dan dari server produksi.
Mengambil Connection String #
Dari halaman cluster, tombol Connect → Drivers menampilkan connection string untuk driver pilihan kita. Bentuknya seperti ini:
mongodb+srv://app-tokobuku:[email protected]/?retryWrites=true&w=majorityTiga hal perlu diperhatikan sebelum string ini dipakai: ganti YOUR_PASSWORD dengan kata sandi database user (bukan akun Atlas), jangan ubah parameter retryWrites dan w yang sudah diatur Atlas, dan simpan string ini sebagai environment variable — misalnya MONGODB_URI — bukan sebagai konstanta di dalam kode.
Bagaimana mongodb+srv Bekerja #
Awalan mongodb+srv:// memberi tahu driver untuk menemukan anggota cluster lewat DNS. Alur singkatnya:
- Driver melakukan kueri DNS SRV pada
_mongodb._tcp.tokobuku-prod.ab12cd.mongodb.net. - Jawaban berisi daftar hostname seluruh anggota cluster beserta portnya.
- Kueri TXT pada host yang sama mengambil opsi bawaan seperti
retryWritesdanssl=true. - Driver membangun daftar seed dari jawaban itu, lalu terhubung dan menemukan primary seperti biasa.
Keuntungannya: hostname anggota cluster boleh berubah (node diganti saat pemeliharaan) tanpa kita mengubah apa pun di aplikasi. Koneksi mongodb:// biasa menuntut daftar host ditulis manual di connection string — itulah mengapa Atlas memakai format SRV untuk seluruh cluster-nya.
Dari sisi klien, string yang benar-benar dipakai bisa dilihat kapan pun. Di mongosh, objek koneksi menampilkannya lewat db.getMongo():
print(db.getMongo())Output yang Dihasilkan:
mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.13.0Server latihan memakai string mongodb:// biasa, dan mongosh menambahkan beberapa opsi bawaannya sendiri (seperti appName) di belakang layar. Saat terhubung ke Atlas, perintah yang sama akan menampilkan string mongodb+srv:// yang sudah diperluas menjadi daftar host aktual.
Untuk kasus khusus, parameter srvMaxHosts membatasi jumlah host yang diambil dari jawaban SRV — berguna ketika kita sengaja ingin membatasi jumlah koneksi awal, misalnya pada arsitektur dengan proxy. Nilai bawaannya 0 berarti semua host dipakai.
Skrip Uji Koneksi #
Sebelum menyalakan aplikasi penuh, uji konektivitas dengan skrip kecil berikut. Skrip ini membaca MONGODB_URI dari environment variable dengan fallback ke server lokal, lalu melakukan ping dan menampilkan identitas server:
// Uji koneksi: sambungkan, ping, tampilkan info server, lalu tutup.
const { MongoClient } = require("mongodb");
const URI = process.env.MONGODB_URI
?? "mongodb://127.0.0.1:27017/?directConnection=true";
async function main() {
const client = new MongoClient(URI, { serverSelectionTimeoutMS: 3000 });
const mulai = Date.now();
try {
await client.connect();
const admin = client.db("admin");
const ping = await admin.command({ ping: 1 });
const hello = await admin.command({ hello: 1 });
const build = await admin.command({ buildInfo: 1 });
const durasi = Date.now() - mulai;
console.log(`ping ok=${ping.ok} dalam ${durasi} ms`);
console.log(`host : ${hello.hosts?.[0] ?? "?"} (setName: ${hello.setName ?? "-"})`);
console.log(`versi : ${build.version}`);
} finally {
await client.close();
}
}
main().catch((err) => {
console.error("Koneksi gagal:", err.name);
process.exit(1);
});Output yang Dihasilkan (terhadap server lokal):
ping ok=1 dalam 22 ms
host : 127.0.0.1:27017 (setName: rs0)
versi : 9.0.2Mari kita telaah bagian-bagian pentingnya:
process.env.MONGODB_URI ?? "mongodb://127.0.0.1:27017/..."— skrip yang sama berjalan di lokal (fallback) dan di produksi (cukup set environment variable ke string Atlas).serverSelectionTimeoutMS: 3000— membatasi waktu tunggu menemukan server agar kegagalan terdeteksi cepat, bukan menggantung 30 detik.admin.command({ ping: 1 })— uji koneksi paling ringan; tidak menyentuh data.finally { await client.close() }— memastikan pool koneksi selalu ditutup walau terjadi galat, kebiasaan yang dibahas tuntas pada Chapter Graceful Shutdown.
Untuk mengujinya terhadap Atlas, jalankan dengan environment variable yang diisi connection string SRV: MONGODB_URI="mongodb+srv://..." node ping.js. Bila balasan tidak datang, urutan pemeriksaan yang efektif: kata sandi user, entri IP access list, lalu TLS.
Memilih Driver dan Versi #
Atlas menerima driver resmi apa pun, tetapi versi yang usang bisa kehilangan dukungan format SRV dan opsi modern. Kombinasi yang dipakai Course ini:
| Runtime | Driver | Catatan |
|---|---|---|
| Node.js 24 | mongodb 7.x | Skrip ping.js di atas memakai driver ini |
| Python 3.12 | PyMongo 4.x | Butuh dnspython untuk memproses mongodb+srv |
| Node.js + ODM | Mongoose 9.x | Berdiri di atas driver mongodb |
Perbarui driver secara berkala — protokol koneksi dan fitur keamanan (seperti mekanisme SCRAM terbaru) dijaga tetap kompatibel oleh pengembang driver.
Dari Mesin Lokal ke Server Produksi #
Aplikasi di laptop dan di server cloud menghadapi kondisi berbeda. Dua hal yang paling sering mengejutkan:
- IP access list — server aplikasi produksi harus masuk daftar lewat IP statis atau CIDR VPC-nya; alamat keluar (egress) yang berubah-ubah akan memutus koneksi secara berkala.
- Latensi — pastikan region aplikasi dan region cluster sama atau berdekatan; string
mongodb+srvtidak menghapus waktu tempuh jaringan.
Sebagai penutup, Atlas juga menyediakan jembatan ke alat analitik: fitur Atlas SQL memungkinkan kueri gaya SQL atas collection untuk kebutuhan BI tanpa menyalin data. Aplikasi utama tetap disarankan memakai driver asli — Atlas SQL adalah pelengkap, bukan pengganti.
Rangkuman #
- Connection string SRV diambil dari Connect → Drivers; simpan sebagai environment variable dan jangan pernah menyimpannya di repositori.
mongodb+srv://menyelesaikan daftar host lewat DNS SRV dan opsi lewat TXT, sehingga aplikasi tidak perlu tahu hostname tiap anggota cluster;srvMaxHostsmembatasi jumlah host bila perlu.- Skrip
ping.jsmenguji konektivitas denganping,hello, danbuildInfosebelum aplikasi utama dinyalakan. - Server produksi butuh entri IP access list yang stabil dan region yang berdekatan dengan cluster; Atlas SQL tersedia untuk kebutuhan analitik gaya SQL.