Ketika membuat sebuah aplikasi, programmer sering berhadapan dengan berbagai informasi yang dibutuhkan oleh program agar dapat berjalan. Contohnya adalah alamat database, API key, port server, nama aplikasi, hingga konfigurasi tertentu.
Informasi tersebut sebaiknya tidak selalu ditulis langsung di dalam source code. Salah satu cara yang umum digunakan untuk menyimpan konfigurasi tersebut adalah menggunakan environment variable.
Bagi developer yang baru belajar pemrograman, istilah ini mungkin terdengar cukup teknis. Padahal, konsepnya cukup sederhana dan banyak digunakan dalam pengembangan aplikasi modern.
Apa Itu Environment Variable?
Environment variable adalah sebuah nilai yang disimpan pada lingkungan tempat sebuah program dijalankan dan dapat dibaca oleh aplikasi ketika dibutuhkan.
Contohnya, sebuah aplikasi membutuhkan alamat database:
DATABASE_URL=localhost
Daripada menulis konfigurasi tersebut langsung di source code, aplikasi dapat mengambil nilainya dari environment variable.
Dengan pendekatan ini, konfigurasi aplikasi dapat dipisahkan dari kode program.
Mengapa Environment Variable Digunakan?
Ada beberapa alasan mengapa environment variable sering digunakan dalam pengembangan software.
1. Memisahkan Konfigurasi dari Source Code
Bayangkan sebuah aplikasi memiliki konfigurasi seperti:
const databaseHost = "localhost";
Jika aplikasi dipindahkan ke server production, konfigurasi tersebut mungkin perlu diubah.
Dengan environment variable, kode program tidak harus diubah. Nilainya dapat disesuaikan berdasarkan lingkungan tempat aplikasi dijalankan.
Contohnya:
DATABASE_HOST=localhost
Pada server production, nilainya dapat berbeda:
DATABASE_HOST=production-server
Source code tetap dapat menggunakan nama variabel yang sama.
2. Mengurangi Risiko Membagikan Data Sensitif
Aplikasi terkadang membutuhkan informasi yang tidak seharusnya ditulis langsung di source code, seperti:
- API key
- Database password
- Secret key
- Access token
- Credential tertentu
Contohnya:
API_KEY=xxxxxxxx
Kemudian aplikasi mengambil nilai tersebut melalui environment variable.
Meskipun demikian, environment variable bukan berarti otomatis membuat credential aman. Developer tetap perlu memperhatikan bagaimana credential disimpan dan siapa yang memiliki akses terhadap environment tempat aplikasi berjalan.
Environment Variable pada Node.js
Node.js menyediakan objek process.env untuk membaca environment variable.
Misalnya:
const port = process.env.PORT || 3000;
console.log(`Server berjalan di port ${port}`);
Jika environment variable PORT tersedia, aplikasi akan menggunakan nilai tersebut.
Jika tidak tersedia, program menggunakan nilai 3000.
Contohnya ketika menjalankan aplikasi:
PORT=5000 node server.js
Server kemudian dapat membaca nilai:
process.env.PORT
dan mendapatkan:
5000
Menggunakan File .env
Dalam banyak project JavaScript dan Node.js, developer juga sering menggunakan file .env untuk menyimpan konfigurasi lokal.
Contohnya:
PORT=3000
DATABASE_URL=localhost
API_KEY=contoh_api_key
Aplikasi kemudian dapat membaca nilai tersebut menggunakan library seperti dotenv.
Contoh instalasi:
npm install dotenv
Kemudian pada aplikasi:
require("dotenv").config();
console.log(process.env.PORT);
Jika file .env berisi:
PORT=3000
maka program dapat mengambil nilai tersebut melalui:
process.env.PORT
Jangan Sembarangan Mengunggah File .env
Salah satu kesalahan yang cukup sering terjadi pada project pemula adalah memasukkan file .env ke repository Git.
Misalnya file .env berisi:
DATABASE_PASSWORD=password123
API_KEY=abcdef123456
Jika file tersebut ikut diunggah ke repository publik, informasi tersebut berpotensi diketahui oleh orang lain.
Karena itu, file .env biasanya dimasukkan ke dalam .gitignore.
Contohnya:
.env
Dengan begitu Git tidak memasukkan file .env ke dalam repository.
Environment Variable untuk Development dan Production
Salah satu manfaat environment variable adalah mempermudah penggunaan konfigurasi berbeda untuk setiap lingkungan.
Misalnya aplikasi memiliki tiga lingkungan:
Development
API_URL=http://localhost:3000
Testing
API_URL=http://testing-server
Production
API_URL=https://api.example.com
Kode aplikasi tetap dapat menggunakan:
const apiUrl = process.env.API_URL;
Tanpa harus mengubah source code setiap kali aplikasi berpindah lingkungan.
Environment Variable pada Frontend
Environment variable tidak hanya digunakan pada backend.
Framework frontend seperti React, Next.js, dan berbagai tools JavaScript juga memiliki mekanisme untuk menggunakan konfigurasi berdasarkan environment.
Namun, developer harus berhati-hati.
Jika sebuah environment variable digunakan dalam kode frontend dan akhirnya dikirim ke browser, nilainya bukan lagi rahasia.
Jadi jangan menyimpan password database atau secret credential di environment variable yang memang akan diekspos ke browser.
Contoh Penggunaan dalam Project
Misalnya kita membuat REST API menggunakan Node.js.
Struktur sederhananya:
project/
├── server.js
├── package.json
├── .env
└── .gitignore
Isi .env:
PORT=3000
DATABASE_URL=localhost
Isi .gitignore:
node_modules/
.env
Kemudian server.js:
require("dotenv").config();
const port = process.env.PORT;
console.log(`Server berjalan pada port ${port}`);
Ketika aplikasi dijalankan, Node.js akan membaca konfigurasi dari environment yang tersedia.
Dengan cara ini, konfigurasi tidak perlu ditulis langsung di dalam source code.
Kesalahan yang Sering Dilakukan Pemula
Ada beberapa kesalahan yang perlu diperhatikan ketika menggunakan environment variable.
Menulis Secret Langsung di Source Code
Contoh:
const apiKey = "123456789";
Cara seperti ini sebaiknya dihindari untuk credential yang bersifat sensitif.
Lupa Menambahkan .env ke .gitignore
File .env yang berisi credential dapat ikut masuk ke repository jika tidak dikecualikan.
Salah Menulis Nama Variable
Misalnya .env berisi:
DATABASE_URL=localhost
Tetapi kode menggunakan:
process.env.DB_URL
Hasilnya tentu tidak sesuai karena nama variabel berbeda.
Menganggap Semua Environment Variable Rahasia
Tidak semua environment variable bersifat rahasia.
Nilai seperti:
APP_NAME=MyApp
PORT=3000
tidak sama tingkat sensitivitasnya dengan password atau private key.
Yang penting adalah memahami apakah nilai tersebut nantinya dapat diakses oleh pengguna atau tidak.
Kesimpulan
Environment variable merupakan konsep penting dalam pengembangan software karena membantu memisahkan konfigurasi aplikasi dari source code.
Teknologi ini dapat digunakan untuk menyimpan berbagai konfigurasi seperti port server, alamat API, konfigurasi database, hingga credential tertentu.
Penggunaan environment variable juga membantu ketika aplikasi memiliki beberapa lingkungan seperti development, testing, dan production.
Namun, environment variable tetap harus digunakan dengan benar. Credential sensitif tidak boleh dimasukkan ke repository publik, file .env sebaiknya dikecualikan melalui .gitignore, dan developer perlu memahami apakah suatu variable akan terekspos ke client atau tidak.
Dengan memahami konsep ini sejak awal, developer dapat membangun project yang lebih mudah dikonfigurasi dan dikelola ketika aplikasi berkembang.