Setiap aplikasi yang menerima upload foto atau video cepat atau lambat akan sampai di pertanyaan yang sama: file-nya cukup disimpan di server yang menjalankan aplikasi, atau dipindah ke layanan seperti Amazon S3, Google Cloud Storage, atau Bunny Storage? Jawabannya tidak selalu sama. Sistem internal yang kecil bisa bertahun-tahun aman dengan file di disk server sendiri, sementara marketplace dengan ribuan foto produk atau platform belajar yang penuh video biasanya sudah kewalahan dalam hitungan bulan. Di artikel ini kami membandingkan kedua pendekatan, membahas provider yang umum dipakai, dan menghitung biayanya untuk satu contoh kasus.
Dua Cara Menyimpan File yang Sangat Berbeda
Menyimpan di disk server artinya aplikasi menulis file upload ke folder seperti storage/uploads, lalu web server (Nginx, Apache, atau framework-nya sendiri) mengirimkan file itu saat ada yang memintanya. Penyimpanan, pengiriman, dan backup sepenuhnya jadi tanggung jawab Anda, dan semuanya berbagi CPU, memori, disk, serta jaringan dengan aplikasi.
Cloud storage, tepatnya object storage, adalah layanan terpisah yang diakses lewat API. Aplikasi meng-upload file dan mendapat key, lalu pengguna mengunduh file dari layanan storage itu atau dari CDN di depannya. Urusan disk, replikasi, dan kapasitas ditangani provider. Anda membayar per gigabyte yang disimpan, per request, dan tergantung provider-nya, per gigabyte yang diunduh.
Perbandingan Langsung
| Aspek | Disk server | Cloud storage |
|---|---|---|
| Biaya awal | Sudah termasuk dalam harga VPS atau server | Bayar sesuai pemakaian, biasanya hanya beberapa dolar per bulan di awal |
| Kapasitas | Terbatas sesuai paket. Kalau disk penuh, upload gagal dan database pun bisa ikut berhenti | Bertambah otomatis, dan Anda membayar sebesar yang benar-benar disimpan |
| Ketahanan data | Satu disk atau satu RAID. Keamanannya bergantung pada backup Anda | Disalin ke beberapa disk atau lokasi, misalnya S3 dirancang dengan durability 11 angka sembilan |
| Bandwidth ke pengguna | Dibatasi port dan kuota server. Video besar berebut jalur dengan trafik API | Dikirim oleh provider atau CDN, terpisah dari server aplikasi |
| Lebih dari satu server | Butuh shared storage seperti NFS atau sinkronisasi file antar server | Semua server membaca dan menulis ke bucket yang sama |
| Backup dan restore | Ratusan gigabyte harus disalin tiap malam, dan restore-nya lama | Versioning, replikasi, dan lifecycle rule sudah tersedia |
| Tagihan bulanan | Mudah ditebak karena menjadi bagian dari biaya server | Berubah sesuai pemakaian, terutama trafik unduhan |
| Beban kerja tim | Sederhana di awal, makin repot saat file bertambah | Sedikit lebih repot di awal: kredensial, signed URL, CORS |
Kapan Disk Server Masih Pilihan yang Tepat
- Aplikasi internal dengan jumlah pengguna terbatas, misalnya sistem HR atau inventaris, yang file-nya sebagian besar PDF dan sedikit foto.
- Total file diperkirakan masih di kisaran puluhan gigabyte untuk satu sampai dua tahun ke depan.
- Aplikasi berjalan di satu server dan belum ada rencana menambah server dalam waktu dekat.
- Ada aturan atau kontrak yang mengharuskan data tetap berada di perangkat milik perusahaan, misalnya sistem on-premise di pabrik atau rumah sakit.
- Sudah ada backup yang teruji dan menyalin folder upload ke lokasi lain, bukan hanya ke server yang sama.
Meski begitu, tulis kodenya lewat lapisan abstraksi storage seperti Storage facade di Laravel, django-storages, atau interface storage buatan sendiri. Dengan begitu aplikasi menyimpan dan membaca file tanpa perlu tahu lokasinya, dan pindah ke S3 atau provider lain nanti cukup dengan mengubah konfigurasi, bukan menulis ulang kode.
Masalah yang Muncul Saat Foto dan Video Makin Banyak
- Disk penuh tanpa disadari. Log, database, dan file upload biasanya ada di partisi yang sama, jadi disk penuh menghentikan jauh lebih banyak hal daripada sekadar upload.
- Backup jadi lambat dan mahal. Folder upload 300 GB butuh berjam-jam untuk disalin, dan saat terjadi kerusakan, aplikasi ikut mati selama proses restore.
- Video memakan bandwidth yang seharusnya untuk aplikasi. Port VPS 100 Mbps, bahkan 1 Gbps, cepat penuh kalau puluhan pengguna menonton video bersamaan, dan respons API ikut melambat untuk semua orang.
- Worker aplikasi tersandera. Kalau file dikirim lewat PHP, Node.js, atau Python alih-alih langsung oleh Nginx, setiap unduhan menahan satu worker sampai transfer selesai.
- Menambah server kedua jadi rumit. File yang di-upload ke server A tidak ada di server B, kecuali Anda menyiapkan shared storage atau sinkronisasi.
- Celah keamanan lebih mudah terjadi. Folder upload di dalam web root yang mengizinkan script dijalankan adalah cara klasik penyerang menanam web shell.
Pilihan Cloud Storage yang Umum Dipakai
Sebagian besar layanan di bawah ini mendukung API S3, jadi SDK dan tool yang sama bisa dipakai di semuanya cukup dengan mengganti endpoint dan kredensial. Harga yang kami cantumkan adalah harga resmi dalam dolar AS per November 2026, belum termasuk pajak.
| Layanan | Harga penyimpanan | Unduhan ke internet | Catatan |
|---|---|---|---|
| Amazon S3 (Jakarta) | $0,025 per GB per bulan | $0,132 per GB setelah gratis 100 GB pertama tiap bulan | Fiturnya paling lengkap. Biasanya dipasangkan dengan CloudFront untuk pengiriman file |
| Google Cloud Storage (Jakarta) | $0,023 per GB per bulan (Standard) | Dihitung per GB, dan Indonesia masuk kelompok harga yang lebih mahal dibanding sebagian besar Asia | Pilihan wajar kalau aplikasi sudah berjalan di Google Cloud |
| Cloudflare R2 | $0,015 per GB per bulan, 10 GB pertama gratis | Gratis | Tetap ada biaya request: $4,50 per juta operasi tulis dan $0,36 per juta operasi baca |
| Bunny Storage | $0,01 per GB per bulan untuk satu region (HDD), $0,02 untuk SSD | Lewat Bunny CDN, $0,03 per GB untuk Asia di jaringan standar | Tanpa biaya API, minimum $1 per bulan, dan ada region storage di Singapura yang dekat dengan Indonesia |
| Backblaze B2 | $6,95 per TB per bulan | Gratis sampai 3 kali data yang disimpan, selebihnya $0,01 per GB | Harga penyimpanan rendah, cocok untuk arsip dan backup |
| Wasabi | $7,99 per TB per bulan | Tanpa biaya egress | Minimum tagihan 1 TB dan masa simpan minimum 90 hari. Baca ketentuan pemakaiannya sebelum dipakai untuk trafik publik yang besar |
| DigitalOcean Spaces | $5 per bulan sudah termasuk 250 GiB, selebihnya $0,02 per GiB | Termasuk 1 TiB, selebihnya $0,01 per GiB | Harga sederhana dan sudah ada CDN bawaan |
| Provider lokal Indonesia | Bervariasi tiap provider | Tergantung paket dan provider | Beberapa cloud provider lokal menyediakan storage yang kompatibel dengan S3, berguna kalau data wajib berada di Indonesia |
Biaya penyimpanan jarang jadi komponen termahal. Untuk foto dan video, tagihan ditentukan oleh berapa gigabyte yang diunduh pengguna setiap bulan. Itulah sebabnya koleksi 500 GB yang sama bisa berbiaya di bawah $10 atau di atas $250 per bulan, tergantung cara file itu dikirim.
Contoh Hitungan: 500 GB Media dan 2 TB Unduhan per Bulan
Misalkan sebuah marketplace atau platform belajar menyimpan 500 GB foto dan video pendek, dan penggunanya, yang mayoritas di Indonesia, mengunduh sekitar 2.000 GB per bulan. Tabel berikut hanya menghitung penyimpanan dan pengiriman. Biaya request tidak kami masukkan karena kecil di skala ini: sepuluh juta kali tampilan gambar sekitar $4 di S3 dan masih masuk kuota gratis R2.
| Skema | Penyimpanan | Pengiriman | Perkiraan total per bulan |
|---|---|---|---|
| Amazon S3 Jakarta, diakses langsung | $12,50 | $250,80 | sekitar $263 |
| Amazon S3 Jakarta + CloudFront pay-as-you-go | $12,50 | $120,00 (1 TB pertama gratis, selebihnya $0,12 per GB) | sekitar $133 |
| Amazon S3 Jakarta + CloudFront paket flat Pro | $12,50 | $15,00 (sudah termasuk 50 TB dan 10 juta request) | sekitar $28 |
| Bunny Storage + Bunny CDN jaringan standar | $5,00 | $60,00 | sekitar $65 |
| DigitalOcean Spaces | $9,30 (termasuk biaya dasar $5) | $8,40 | sekitar $18 |
| Backblaze B2 | $3,48 | $5,00 | sekitar $8,50 |
| Cloudflare R2 | $7,35 | $0 | sekitar $7,35 |
Ada beberapa hal yang tidak terlihat di tabel. Mengakses S3 langsung tanpa CDN adalah pilihan paling mahal sekaligus paling lambat bagi pengguna yang jauh dari Jakarta. Paket flat CloudFront punya batas kuota dan fitur, jadi cocokkan dulu dengan pola trafik Anda sebelum mengandalkannya. Bunny juga punya volume network yang lebih murah, $0,005 per GB, tetapi jumlah lokasinya jauh lebih sedikit, jadi latensi untuk pengguna di Indonesia sebaiknya diuji dulu. R2 dan B2 terlihat paling murah, tetapi lokasi penyimpanan terdekatnya tidak berada di Indonesia, dan ini berpengaruh pada kecepatan upload serta aturan lokasi data.
Bandingkan dengan disk server. Di atas kertas, VPS dengan disk 500 GB dan kuota bandwidth besar bisa lebih murah dari semua opsi di atas. Biaya sebenarnya muncul di tempat lain: server atau volume tambahan untuk backup, jam kerja yang habis saat disk penuh, dan aplikasi yang melambat ketika banyak video sedang diputar.
Foto dan Video Butuh Lebih dari Sekadar Tempat Simpan
Foto 6 MB dari kamera ponsel tidak seharusnya dikirim apa adanya ke halaman daftar produk. Buat beberapa ukuran yang lebih kecil dan format modern seperti WebP atau AVIF, entah sekali saat upload lewat background job, atau langsung saat diminta lewat layanan gambar. Bunny Optimizer berbiaya $9,50 per website per bulan, Cloudflare dan cloud besar lainnya punya layanan gambar sendiri, dan imgproxy adalah pilihan self-hosted yang cukup populer.
Video punya masalah yang sama dalam skala lebih besar. File MP4 mentah dari ponsel ukurannya besar dan tidak menyesuaikan dengan koneksi penonton. Platform video akan meng-encode ulang ke HLS dengan beberapa resolusi, sehingga pengguna dengan sinyal seluler yang lemah mendapat 480p alih-alih buffering terus. Bunny Stream tidak menarik biaya encoding dan menagih penyimpanan serta pengiriman mulai $0,01 dan $0,005 per GB. Cloudflare Stream menagih per menit video yang disimpan dan ditonton, sedangkan di AWS jalurnya biasanya MediaConvert dengan S3 dan CloudFront. Untuk aplikasi yang bertumpu pada video, layanan seperti ini umumnya lebih murah daripada membangun dan merawat server encoding sendiri.
Lokasi Data dan Regulasi
Foto wajah, KTP, dan dokumen medis termasuk data pribadi menurut UU Pelindungan Data Pribadi (UU PDP). Berdasarkan PP 71/2019, penyelenggara sistem elektronik lingkup privat pada umumnya boleh menyimpan data di luar Indonesia, tetapi regulator sektor seperti OJK untuk sektor keuangan bisa menetapkan aturan yang lebih ketat. Kalau data Anda wajib berada di dalam negeri, gunakan region Jakarta milik AWS atau Google Cloud, atau provider lokal. Di mana pun lokasinya, bucket yang berisi data pribadi harus tetap private dan file dibagikan lewat signed URL yang masa berlakunya singkat.
Pindah dari Disk Server ke Cloud Storage
- 1Pastikan aplikasi membaca dan menulis file lewat abstraksi storage, dan database menyimpan path relatif atau key, bukan URL lengkap.
- 2Buat bucket, biarkan tetap private, dan beri aplikasi kredensial yang hanya bisa mengakses bucket tersebut.
- 3Salin file yang sudah ada dengan tool seperti rclone atau perintah sync di AWS CLI, dengan struktur folder yang sama sebagai key.
- 4Arahkan upload baru ke bucket, dan untuk sementara biarkan aplikasi mencari ke disk lokal kalau file belum ditemukan di bucket.
- 5Jalankan sinkronisasi terakhir, bandingkan jumlah dan total ukuran file, lalu arahkan unduhan ke CDN.
- 6Simpan folder lama beberapa minggu sebagai cadangan sebelum dihapus untuk mengosongkan disk.
Patokan sederhananya begini: kalau file Anda masih muat dengan lega di satu disk dan sebagian besar hanya dibuka oleh staf internal, disk server dengan backup ke lokasi lain sudah cukup. Begitu file-nya didominasi foto dan video untuk pelanggan, cloud storage dengan CDN hampir selalu lebih murah dan lebih andal.
Poin penting
- Disk server masih layak untuk aplikasi internal kecil di satu server, asalkan file upload di-backup ke lokasi lain.
- Untuk koleksi foto dan video yang besar, cloud storage menghilangkan masalah disk penuh, memudahkan backup, dan menjauhkan trafik file dari server aplikasi.
- Yang menentukan tagihan adalah trafik unduhan, bukan penyimpanan. Selalu pasang CDN, atau pilih provider dengan egress gratis atau murah.
- Olah gambar ke ukuran yang lebih kecil dan video ke HLS, dengan bantuan layanan seperti Bunny Optimizer, Bunny Stream, atau Cloudflare Stream kalau video jadi inti aplikasi.
- Tulis kode lewat abstraksi storage sejak awal, supaya perpindahan antara disk dan provider cukup lewat konfigurasi.


