Logo Universitas Teknokrat Indonesia

Lupakan JSON! Jsonnet Punya Jurus Ampuh Atasi Konfigurasi Rumit

Gambar untuk Lupakan JSON! Jsonnet Punya Jurus Ampuh Atasi Konfigurasi Rumit

Di dunia pengembangan perangkat lunak modern, kita tidak bisa lepas dari yang namanya konfigurasi. Setiap aplikasi, baik itu yang sederhana maupun yang kompleks, pasti memiliki file-file konfigurasi. Dari pengaturan database, endpoint API, hingga detail deployment di cloud, semuanya bergantung pada file-file ini. Selama bertahun-tahun, format seperti JSON (JavaScript Object Notation) telah menjadi standar emas. Namun, seiring dengan semakin kompleksnya aplikasi, JSON mulai menunjukkan keterbatasannya. File-file yang semula ringkas bisa berubah menjadi tumpukan kode yang repetitif, rawan kesalahan, dan sulit dipertahankan.

baca juga : Lithium: Kisah di Balik Baterai yang Menggerakkan Dunia, Mengapa Logam Ini Begitu Berharga?

Di sinilah Jsonnet muncul sebagai "pahlawan" yang tidak terduga. Dibuat oleh Google, Jsonnet bukanlah pengganti JSON, melainkan sebuah bahasa templating data yang dirancang untuk mengatasi kelemahan-kelemahan JSON. Dengan Jsonnet, Anda bisa menulis konfigurasi yang modular, bersih, dan dinamis, jauh dari kekacauan copy-paste yang sering terjadi. Artikel ini akan mengajak Anda untuk membongkar jurus ampuh Jsonnet, menjelaskan mengapa ia lebih unggul dari JSON untuk konfigurasi yang rumit, dan bagaimana teknologi ini mengubah cara developer bekerja.

Mengapa JSON Seringkali Menjadi Sumber Masalah?

JSON adalah format yang sangat populer, dan memang pantas mendapatkannya. Ia mudah dibaca, ringan, dan didukung hampir di semua bahasa pemrograman. Namun, sebagai format data, ia memiliki satu kekurangan fatal: ia adalah bahasa deskripsi data, bukan bahasa pemrograman. Ini berarti ia tidak memiliki fitur-fitur seperti variabel, fungsi, atau kemampuan untuk mengimpor file lain.

Bayangkan Anda bekerja di sebuah proyek yang memiliki puluhan, bahkan ratusan microservice. Setiap microservice ini memiliki file konfigurasi yang hampir sama, hanya berbeda di beberapa detail, seperti nama service atau nomor port.

File service-api-1.json:

JSON

{
  "serviceName": "api-1",
  "port": 8080,
  "database": {
    "host": "db.prod.com",
    "user": "admin",
    "password": "password123"
  }
}

File service-api-2.json:

JSON

{
  "serviceName": "api-2",
  "port": 8080,
  "database": {
    "host": "db.prod.com",
    "user": "admin",
    "password": "password123"
  }
}

Dan seterusnya. Jika Anda perlu mengubah host database, Anda harus membuka dan mengedit puluhan atau ratusan file secara manual. Ini tidak hanya memakan waktu, tetapi juga sangat rawan kesalahan. Kekeliruan kecil dalam menyalin kode bisa menyebabkan bug yang sulit dideteksi. Inilah masalah yang disebut repetisi kode (code repetition), dan di dunia konfigurasi, hal ini menjadi momok yang menakutkan.

Jurus Ampuh Jsonnet: Konfigurasi yang Terprogram

Jsonnet hadir untuk menyelesaikan masalah ini dengan menambahkan kekuatan sebuah bahasa pemrograman ke dalam konfigurasi Anda. Alih-alih menulis file JSON, Anda akan menulis kode Jsonnet yang kemudian akan dikompilasi menjadi JSON yang valid. Mari kita lihat jurus-jurus andalan Jsonnet:

1. Abstraksi dengan Variabel dan Fungsi

Di Jsonnet, Anda bisa mendefinisikan variabel untuk menyimpan nilai yang berulang. Anda juga bisa membuat fungsi untuk pola konfigurasi yang sering Anda gunakan.

Code snippet

local DB_HOST = "db.prod.com";
local defaultService(name) = {
  serviceName: name,
  port: 8080,
  database: {
    host: DB_HOST,
    user: "admin",
    password: "password123"
  }
};

{
  serviceApi1: defaultService("api-1"),
  serviceApi2: defaultService("api-2")
}

Dengan kode di atas, Anda hanya perlu mengubah DB_HOST di satu tempat, dan perubahan akan secara otomatis diterapkan ke semua layanan. Ini adalah prinsip DRY (Don't Repeat Yourself) yang diterapkan pada konfigurasi.

2. Kekuatan Pewarisan Objek (Object Inheritance)

Ini adalah fitur paling revolusioner dari Jsonnet. Mirip dengan pewarisan kelas dalam pemrograman berorientasi objek, Anda dapat membuat objek dasar (base object) dan objek lain dapat mewarisi propertinya.

Code snippet

local baseService = {
  port: 8080,
  database: {
    host: "db.prod.com"
  },
  logLevel: "info"
};

{
  devService: baseService + {
    database: {
      host: "dev-db.local"
    },
    logLevel: "debug"
  },
  prodService: baseService + {
    database: {
      host: "db.prod.com"
    }
  }
}

Di sini, devService dan prodService mewarisi semua properti dari baseService, dan kemudian menimpa properti yang perlu diubah. Ini memungkinkan Anda untuk membuat konfigurasi yang spesifik tanpa harus menulis ulang semua kode dari awal. Sangat elegan dan mudah dipertahankan.

3. Kondisi dan Manipulasi Data

Jsonnet adalah bahasa yang dapat dieksekusi, yang berarti Anda bisa menggunakan logika bersyarat (if/else) dan perulangan (for) untuk membuat konfigurasi yang dinamis. Misalnya, Anda bisa membuat konfigurasi yang berbeda untuk lingkungan produksi dan pengembangan dengan satu kode Jsonnet.

Code snippet

local env = "prod";

{
  database: {
    host: if env == "prod" then "db.prod.com" else "dev-db.local"
  }
}

Kemampuan ini membuka pintu untuk otomatisasi yang jauh lebih canggih, di mana satu file Jsonnet bisa menghasilkan konfigurasi yang berbeda untuk setiap lingkungan.

Jsonnet di Dunia Nyata: Sahabat Sejati DevOps

Jsonnet telah menemukan tempat yang sangat cocok di lingkungan DevOps, terutama dalam mengelola sistem-sistem yang kompleks seperti Kubernetes. File konfigurasi Kubernetes (YAML) terkenal karena kerumitannya. Sebuah deployment sederhana bisa menjadi ratusan baris kode.

Dengan Jsonnet, insinyur DevOps dapat membuat template untuk konfigurasi Kubernetes. Mereka bisa membuat objek dasar untuk sebuah deployment, lalu menggunakannya kembali untuk semua layanan yang lain. Jika ada perubahan pada kebijakan keamanan atau variabel lingkungan, mereka hanya perlu mengedit template dasar dan regenerate semua konfigurasi.

Ini tidak hanya menghemat waktu, tetapi juga sangat penting untuk memastikan konsistensi dan mengurangi risiko human error di lingkungan produksi. Tool seperti Tanka, yang secara khusus dibangun untuk mengelola konfigurasi Kubernetes dengan Jsonnet, adalah bukti nyata seberapa besar kebutuhan akan teknologi semacam ini.

baca juga : Universitas Teknokrat Indonesia Dapatkan Penghargaan Mitra Kerja Dari Kemkumham

Jsonnet vs. YAML: Duel Konfigurasi Modern

Di dunia DevOps, perdebatan tentang Jsonnet vs. YAML seringkali menjadi topik hangat.

AspekYAMLJsonnet
SintaksisRingkas, namun sangat sensitif terhadap spasi.Mirip JSON, tetapi dengan sintaksis yang lebih fleksibel.
ModularitasTerbatas, hanya menggunakan anchor dan alias yang rumit.Sangat kuat (variabel, fungsi, pewarisan).
KeterbacaanMudah untuk file kecil.Kode lebih pendek dan bersih, ideal untuk file yang sangat besar.
DebuggingSulit. Tidak ada pesan kesalahan yang jelas.Lebih mudah, karena ia adalah bahasa yang terprogram dengan pesan kesalahan.
KesimpulanBaik untuk konfigurasi sederhana dan statis.Ideal untuk konfigurasi yang kompleks, dinamis, dan terdistribusi.

Export to Sheets

Meskipun YAML masih menjadi standar, Jsonnet membuktikan bahwa ada cara yang jauh lebih baik untuk mengelola kompleksitas konfigurasi.

penulis : Dylan Fernanda