Sering mendengar istilah deployment? Namun, tahukah kamu sebenarnya deployment itu apa sih? Mari kita bahas di tulisan kali ini.
Deployment adalah proses penerapan atau penempatan suatu aplikasi, sistem, solusi, atau teknologi ke dalam lingkungan operasional yang sesungguhnya setelah melalui tahap pengembangan (development). Proses deployment melibatkan penempatan aplikasi atau sistem ke dalam lingkungan produksi atau operasional yang biasanya berbeda dari lingkungan pengembangan atau pengujian.
đź’» Mulai Belajar Pemrograman
Belajar pemrograman di Dicoding Academy dan mulai perjalanan Anda sebagai developer profesional.
Daftar SekarangTujuan Deployment
Secara keseluruhan, tujuan utama dari deployment adalah membuat aplikasi atau sistem tersedia untuk pengguna akhir (end-user) sehingga mereka dapat memanfaatkannya sesuai dengan kebutuhan.Â
End-user di sini dapat beragam sesuai dengan tujuan awal dari pengembangan sistem tersebut. Misalnya, ada aplikasi yang hanya digunakan oleh bagian internal perusahaan, tetapi ada pula aplikasi yang harus dapat diakses oleh publik.Â
Deployment melibatkan serangkaian tindakan yang terencana dengan baik untuk memastikan bahwa aplikasi atau sistem yang telah dibuat dapat beroperasi dengan lancar dan memberikan nilai tambah yang signifikan bagi pengguna dan bisnis yang menggunakan sistem tersebut.
Proses Deployment
Proses deployment melibatkan serangkaian langkah yang harus diikuti dengan cermat untuk memastikan bahwa aplikasi atau sistem dapat digunakan dan beroperasi dengan baik untuk mencapai tujuan dan fungsi yang diharapkan. Berikut adalah beberapa langkah umum yang dilakukan pada proses deployment.
- Persiapan: persiapan adalah langkah awal dalam proses deployment yang melibatkan peninjauan final dari aplikasi atau sistem yang akan di-deploy. Pada tahap ini, kita harus menyiapkan kode sumber yang akan di-deploy dan memperhatikan library, file konfigurasi, serta resource lainnya yang dibutuhkan oleh aplikasi agar dapat bekerja sebagaimana mestinya. Tiap kasus mungkin dapat berbeda, misalnya ada bahasa pemrograman atau platform yang memerlukan compiling atau bundling, ada pula yang tidak memerlukan dan cukup menyiapkan source code saja.Â
- Pengujian: sebelum melakukan deployment ke lingkungan produksi, aplikasi atau sistem harus menjalani serangkaian pengujian pada lingkungan (environment) yang cukup identik untuk memastikan bahwa sistem berfungsi dengan baik. Pengujian ini dapat mencakup pengujian fungsional, pengujian integrasi, pengujian kinerja, dan lain-lain. Developer harus meninjau hasil pengujian dan memperbaiki bug atau kesalahan apa pun sebelum melanjutkan ke tahapan selanjutnya.Â
- Konfigurasi: konfigurasi lingkungan produksi dilakukan untuk memastikan bahwa semua komponen aplikasi atau sistem dikonfigurasi dengan benar sesuai dengan kebutuhan produksi. Ini termasuk memilih lingkungan database, server, jaringan, dan layanan terkait lainnya yang mendukung jalannya sistem sesuai skala bisnis yang diperlukan. Misalnya, kita memilih apakah akan menggunakan layanan shared hosting atau Virtual Private Server (VPS).Â
Pada tahap ini, kita juga perlu mempertimbangkan potensi kendala atau keterbatasan, seperti anggaran, sumber daya, atau kebutuhan infrastruktur. Jika menggunakan layanan pihak ketiga, kamu juga perlu mempertimbangkan skema pembayaran, dukungan konsumen, serta kebijakan-kebijakan (privasi, perpajakan, dan kepatuhan terhadap regulasi nasional ataupun internasional).
- Instalasi: setelah seluruhnya siap, langkah selanjutnya adalah instalasi yaitu menempatkan dan menjalankan aplikasi di environment yang telah direncanakan; tidak lupa mengintegrasikan seluruh layanan yang diperlukan. Untuk membantu melakukan proses instalasi, umumnya kita akan menggunakan beberapa tools untuk dapat mempermudah dan mempercepat proses deployment, seperti GitHub Action, Jenkins, TravisCI, dan sebagainya.
- Pemeliharaan: setelah aplikasi atau sistem di-deploy, pemeliharaan dan pemantauan secara rutin dilakukan untuk memastikan bahwa sistem tetap beroperasi dengan baik di lingkungan produksi. Ini termasuk pemantauan kinerja, penanganan masalah yang muncul, dan penerapan pembaruan atau perbaikan jika diperlukan. Di sini kita akan sering memperhatikan feedback dari end-user mengenai aplikasi atau sistem yang kemudian dapat dijadikan acuan untuk pengembangan atau perbaikan berikutnya.
- Pengukuran Kinerja: pengukuran kinerja dilakukan untuk mengevaluasi sejauh mana mereka memenuhi tujuan dan kebutuhan bisnis juga kepuasan dari pengguna akhir. Ini dapat mencakup pemantauan waktu respons, penggunaan sumber daya, dan key performance indicator (KPI) lainnya. Ini juga akan menjadi acuan untuk pengembangan dan perbaikan di kemudian hari.
- Dokumentasi: pembuatan dokumentasi yang komprehensif tentang aplikasi atau sistem yang telah di-deploy disiapkan untuk memberikan panduan kepada end-user ataupun tim teknis yang bertanggung jawab atas pemeliharaan dan pengembangan aplikasi untuk selanjutnya.
- Backup dan Disaster Recovery: langkah terakhir adalah membuat pengaturan pencadangan (backup) reguler dan rencana pemulihan bencana untuk melindungi data dan aplikasi dari kehilangan atau kerusakan yang tidak terduga termasuk juga kerusakan yang disebabkan oleh infrastruktur yang terganggu ataupun yang disebabkan serangan siber. Ini sangat penting terutama ketika aplikasi kita menyimpan data yang sangat penting atau melayani proses bisnis yang sangat kritikal dan berdampak besar.Â
Penting untuk diingat bahwa proses deployment dapat bervariasi tergantung pada jenis aplikasi atau sistem yang di-deploy, arsitektur infrastruktur, dan kebutuhan bisnis yang spesifik.Â
Jenis-jenis Deployment
Menurut lingkungannya, deployment dapat dibedakan menjadi seperti berikut.
1. On-Premises Deployment
Pada On-premise, deployment aplikasi atau sistem di-deploy di dalam infrastruktur lokal suatu organisasi atau perusahaan. Oleh karena itu, ia memerlukan perawatan infrastruktur hardware dan software secara langsung.
Keunggulannya ia memberikan kontrol penuh atas lingkungan dan data yang disimpan. Namun, memerlukan investasi awal yang signifikan. Contohnya, instalasi perangkat lunak di server fisik di pusat data internal perusahaan.
2. Cloud Deployment
Aplikasi atau sistem di-deploy di lingkungan cloud. Biasanya kita akan menyewa/membayar infrastruktur atau layanan yang disediakan oleh penyedia layanan cloud, seperti Amazon Web Services (AWS), Microsoft Azure, atau Google Cloud.
Keunggulannya, ia dapat menyediakan skalabilitas yang lebih besar dan dan tidak memerlukan perawatan infrastruktur fisik secara mandiri. Contohnya, hosting aplikasi web di Amazon EC2 atau Azure Virtual Machines.
3. Container Deployment
Aplikasi di-deploy di dalam container yang independen dan portabel sehingga dapat dijalankan secara konsisten di berbagai lingkungan yang berbeda, baik di lingkungan cloud maupun on-premises. Contohnya, deploying aplikasi microservices dalam wadah Docker di lingkungan Kubernetes.
4. Serverless Deployment
Aplikasi dijalankan tanpa perlu mengelola infrastruktur server secara eksplisit. Tujuannya adalah agar developer lebih fokus pada pengembangan dan implementasi fungsional kode tanpa memikirkan tentang infrastruktur di baliknya.
Umumnya pengguna hanya membayar berdasarkan penggunaan yang sebenarnya, bukan kapasitas server yang disediakan. Contohnya, menggunakan layanan FaaS (Function as a Service) seperti AWS Lambda atau Google Cloud Functions untuk mengeksekusi kode.
5. Hybrid Deployment
Kombinasi dari dua atau lebih jenis deployment dapat disebut juga sebagai hybrid deployment. Memungkinkan organisasi untuk memanfaatkan kelebihan dari setiap jenis deployment sesuai dengan kebutuhan mereka.
Misalnya, beberapa aplikasi dapat di-deploy di lingkungan cloud, sementara yang lain tetap dijalankan on-premises untuk alasan keamanan atau kepatuhan terhadap regulasi.
Strategi Deployment
Berdasarkan strategi atau pendekatan yang digunakan, terdapat beberapa jenis deployment yang umum digunakan dalam pengembangan perangkat lunak. Pemilihan strategi deployment yang tepat harus mempertimbangkan faktor-faktor seperti ketersediaan (availability), toleransi risiko (risk tolerance), skala dan kompleksitas, serta fleksibilitas dan reversibilitas terhadap deployment yang dilakukan. Berikut adalah penjelasan singkat tentang beberapa jenis deployment berdasarkan strategi.
1. Blue-Green Deployment
Strategi ini berjalan dengan dua environment identik atau bisa disebut “blue” dan “green” yang berjalan secara bersamaan. Satu lingkungan (biasanya “blue”) menerima lalu lintas normal dari pengguna, sementara lingkungan yang lain (“green”) menerima perubahan baru. Ini memungkinkan rilis fitur baru ke end-user lebih aman dan rollback (kembali ke versi sebelumnya) dapat dengan cepat dilakukan jika diperlukan.
2. Rolling Deployment
Perubahan akan diterapkan secara bertahap pada sekelompok mesin atau instance sehingga aplikasi tetap tersedia selama proses deployment atau update. Hal tersebut dapat meminimalkan dampak pada ketersediaan aplikasi dan mengurangi risiko kesalahan yang fatal.
Ilustrasi di atas menunjukan deployment yang dilakukan secara bertahap dengan warna biru menunjukan versi lama dan hijau adalah versi baru.
3. Canary Deployment
Versi baru dari aplikasi diperkenalkan ke sebagian kecil pengguna (grup canary) untuk menguji secara langsung di lingkungan produksi. Jika versi baru terbukti stabil, secara bertahap diperkenalkan kepada pengguna lain. Tujuannya adalah membatasi dampak perubahan pada sebagian kecil pengguna terlebih dahulu sebelum merilis secara luas ke semua pengguna.Â
Dari ilustrasi di atas, bisa dibilang canary deployment adalah gabungan dari Green-blue deployment dan rolling deployment.
4. A/B Testing
Pada strategi ini versi baru dari aplikasi diperkenalkan ke sebagian kecil pengguna (grup A) secara bersamaan dengan versi yang ada (grup B), kemudian kinerja dan respons pengguna terhadap kedua versi tersebut dipantau.
Biasanya digunakan untuk menguji fitur baru atau perubahan desain dengan mengumpulkan data dan umpan balik dari pengguna sebelum membuat keputusan penuh tentang penerapan perubahan secara luas dan permanen.
A/B testing ditujukan sebagai sebuah eksperimen terkontrol untuk dapat mendapatkan feedback mengenai fitur baru dari aplikasi sementara tiga strategi sebelumnya bertujuan untuk meminimalkan risiko.
5. Feature Toggle
Fitur baru atau perubahan yang masih eksperimental dikendalikan dengan toggle biasa disebut feature flags di dalam kode aplikasi. Fitur baru dapat diaktifkan atau dinonaktifkan secara dinamis melalui konfigurasi. Hal ini memungkinkan developer untuk menerapkan perubahan secara bertahap, menguji fitur baru dengan aman, dan mengurangi risiko kesalahan dengan memungkinkan untuk mengaktifkan atau menonaktifkan fitur secara fleksibel.
Continuous Integration / Continuous Delivery (CI/CD)
CI/CD adalah singkatan dari Continuous Integration/Continuous Deployment atau Continuous Delivery. Konsep ini mengacu pada praktik pengembangan perangkat lunak di mana perubahan kode yang dilakukan oleh developer secara terus-menerus diintegrasikan ke dalam repositori kode secara otomatis, dan perubahan tersebut diujikan dan di-deploy ke lingkungan produksi secara otomatis atau dengan sedikit campur tangan manusia.
Dengan menggunakan CI/CD, developer dapat mengurangi waktu siklus pengembangan, dan mengurangi risiko kesalahan karena perubahan yang lebih kecil dan lebih sering diintegrasikan dan di-deploy ke lingkungan produksi. Ini sangat membantu dalam meningkatkan responsivitas dan keandalan aplikasi atau layanan terutama bagi aplikasi atau sistem yang sering mengalami perubahan.Â
DevOps
DevOps adalah praktik pengembangan perangkat lunak yang menekankan kolaborasi antara tim pengembang (Development) dan tim operasional (Operations) dalam siklus hidup pengembangan perangkat lunak. Dalam praktik DevOps, pengembang perangkat lunak dan administrator sistem bekerja secara terintegrasi dan saling mendukung satu sama lain.Â
Mereka menggunakan alat otomatisasi dan menerapkan best practice untuk mengotomatiskan proses pengembangan, pengujian, dan penerapan perangkat lunak. DevOps adalah budaya kolaboratif di mana tim pengembang dan operasi berbagi tanggung jawab atas seluruh siklus hidup aplikasi, mulai dari pengembangan hingga pemeliharaan di lingkungan produksi.
Demikianlah pembahasan kita mengenai deployment pada bidang software engineering. Jika tertarik lebih jauh, kamu bisa mempelajari lebih lanjut pada learning path DevOps Engineer yang tersedia di Dicoding.