Refactoring Project pada Web App
Istilah “refactoring project” merujuk pada proyek yang fokus utamanya adalah melakukan refactoring terhadap kode atau sistem yang sudah ada — bukan menambah fitur baru atau membangun ulang dari nol.
Mari kita uraikan maknanya dengan sederhana dan lengkap
Apa Itu Refactoring?
Refactoring adalah proses memperbaiki struktur internal kode tanpa mengubah perilaku eksternalnya.
Tujuannya: membuat kode lebih bersih, mudah dipahami, dan mudah dirawat, tanpa mengubah fungsi yang terlihat oleh pengguna.
Contoh sederhana:
# Sebelum refactoring
def calc(x, y, z):
    return x*y + x*y*z - x
# Sesudah refactoring
def calculate_total(price, qty, discount):
    subtotal = price * qty
    total = subtotal + subtotal * discount - price
    return total
Hasilnya tetap sama, tapi struktur dan nama variabel lebih jelas.
Apa Itu Refactoring Project?
Sebuah refactoring project berarti proyek yang didedikasikan untuk:
- memperbaiki struktur kode lama (legacy code),
- menurunkan kompleksitas sistem,
- meningkatkan performa, keamanan, dan maintainability,
- dan sering kali dilakukan sebelum menambah fitur besar baru.
Contoh konteks:
Sebuah tim dev punya aplikasi yang sudah 5 tahun berjalan. Sebelum menambahkan fitur AI, mereka memutuskan untuk menjalankan refactoring project selama 2 bulan agar kode dasar lebih bersih dan stabil.
Tujuan Refactoring Project
- Meningkatkan keterbacaan kode
 → agar developer baru mudah memahami.
- Mengurangi duplikasi dan kompleksitas
 → kode yang berulang disatukan jadi satu fungsi.
- Memperbaiki arsitektur dan dependensi
 → misalnya memisahkan business logic dari UI layer.
- Meningkatkan kinerja dan keamanan
 → menghapus fungsi tidak efisien, memperbaiki query, dsb.
- Menurunkan risiko bug di masa depan
 → karena struktur lebih bersih dan modular.
Risiko dan Tantangan
- Membutuhkan waktu dan sumber daya (tanpa hasil “terlihat” oleh pengguna).
- Risiko munculnya bug jika tidak disertai unit testing dan CI/CD.
- Bisa menunda pengembangan fitur baru sementara waktu.
Ringkasnya
| Aspek | Penjelasan | 
|---|---|
| Tujuan | Menata ulang struktur kode tanpa mengubah fungsi | 
| Hasil | Kode lebih bersih, efisien, dan mudah dikembangkan | 
| Waktu Tepat | Sebelum ekspansi fitur besar atau saat kode mulai sulit dirawat | 
| Contoh Aktivitas | Rename variabel, pecah fungsi besar jadi kecil, migrasi arsitektur, hapus duplikasi | 
Berikut ini contoh nyata refactoring project pada web app, supaya kamu bisa membayangkan bentuk konkretnya di dunia kerja developer.
Kasus Nyata: Refactoring Project Web App
Kondisi Awal
Sebuah tim punya aplikasi web lama, misalnya:
- Dibangun 5 tahun lalu dengan PHP monolitik atau Node.js tanpa struktur yang jelas,
- Banyak inline SQL query, duplikasi kode, dan tidak ada unit testing,
- Performa mulai lambat, dan fitur baru sering bikin bug lama muncul lagi.
Tim ingin menambahkan fitur user analytics dashboard, tapi mereka sadar:
“Kalau langsung nambah fitur, sistem ini bisa makin berantakan.”
Jadi, mereka memutuskan untuk menjalankan Refactoring Project selama 1–2 bulan.
Tahapan Refactoring Project Web App
1. Audit & Identifikasi Masalah
Langkah pertama: tim menganalisis struktur kode saat ini.
Mereka mendapati:
- File app.jsberisi 4.000 baris kode bercampur antara routing, logic, dan query.
- Tidak ada error handling yang konsisten.
- Tidak ada testing dan dokumentasi API.
- Banyak kode duplikat seperti:
 tersebar di banyak file.db.query("SELECT * FROM users WHERE id = ?", [id])
2. Menetapkan Tujuan Refactoring
Tujuan yang disepakati:
- Pisahkan business logic dari routing.
- Terapkan arsitektur MVC (Model-View-Controller).
- Gunakan ORM (mis. Prisma atau Sequelize) untuk mengganti query mentah.
- Tambahkan unit test dengan Jest.
- Terapkan error handling middleware yang seragam.
3. Restrukturisasi Kode
Langkah-langkah teknis:
Sebelum refactoring:
/app.js
/routes.js
/database.js
Sesudah refactoring:
/src
  /controllers
  /models
  /routes
  /middlewares
  /services
/tests
Kode seperti ini:
// sebelum
app.get("/users/:id", (req, res) => {
  db.query("SELECT * FROM users WHERE id = ?", [req.params.id], (err, result) => {
    if (err) throw err;
    res.json(result);
  });
});
Menjadi:
// sesudah
router.get("/:id", userController.getUserById);
// controllers/userController.js
export const getUserById = async (req, res, next) => {
  try {
    const user = await userService.findById(req.params.id);
    res.json(user);
  } catch (err) {
    next(err);
  }
};
4. Menambahkan Testing dan CI/CD
- Tambah unit test untuk fungsi penting.
- Tambah GitHub Actions atau GitLab CI untuk otomatisasi testing tiap kali commit.
- Pastikan semua endpoint utama lulus uji.
5. Optimasi & Dokumentasi
- Gunakan Swagger/OpenAPI untuk dokumentasi endpoint.
- Tambahkan caching (misalnya Redis) di bagian tertentu.
- Optimalkan query lambat.
- Dokumentasikan arsitektur baru di README.md.
6. Deployment Bertahap
Refactoring besar tidak langsung di-merge ke production. Biasanya:
- Deploy ke staging server.
- Jalankan regression testing (pastikan fungsi lama masih jalan).
- Setelah stabil, baru merge ke production.
Hasil Setelah Refactoring
| Sebelum | Sesudah | 
|---|---|
| Kode campur aduk, sulit dipahami | Struktur modular dan rapi (MVC) | 
| Duplikasi kode banyak | Reusable service functions | 
| Sulit debugging | Logging dan error handling rapi | 
| Tidak ada test | Ada unit & integration test | 
| Deployment manual | CI/CD otomatis | 
Nilai Tambah Bisnis
Walau refactoring tidak menambah fitur baru, dampaknya besar:
- Waktu pengembangan fitur berikutnya berkurang hingga 40–60%.
- Bug berulang hampir hilang.
- Performa dan keamanan meningkat.
- Developer baru bisa langsung produktif karena kode jelas.


