Fakultas Ilmu Komputer UI

Commit 6a25b357 authored by Tirta Abimanyu Purnomo's avatar Tirta Abimanyu Purnomo
Browse files

Add post about monorepo

parent 7102a323
---
layout: post
title: Monorepo
date: 2019-04-02 07.46.05 +0700
author: abi
---
Ada 2 tipe _repository_ yang saat ini sering diperdebatkan di industri. _Monolithic Repository_ (Monorepo) dan _Multiple Repository_ (Multirepo).
Di tulisan ini saya akan mencoba untuk membahas kelebihan dan kekurangan dari sistem monorepo.
<!--more-->
Monorepo adalah sebuah strategi dalam _software development_ dimana kode dari berbagai _project_ disimpan di satu _repository_ yang sama.
Ada beberapa kelebihan yang didapatkan dengan menggunakan metode ini, diantaranya yang paling sering menjadi argumen untuk menggunakan monorepo adalah:
**Ease of code reuse**
_Class_ atau _function_ yang memiliki kemiripan dapat dijadikan abstraksi di _shared library_ yang di _include_ masing-masing _project_ tanpa menggunakan _package manager_.
**Simplified dependency management**
Di sistem multirepo dimana ada beberapa _project_ yang membutuhkan _dependency_ _third party_ yang sama, _dependency_ tersebut seringkali di _download_ atau _build_ berulang kali di masing-masing _project_. Dengan menggunakan monorepo, semua _project_ dapat menggunakan _dependency_ yang sama tanpa perlu mengulang untuk setiap _project_.
**Large-scale code refactoring**
Karena developer memiliki akses ke semua _project_, ketika melakukan _refactor_ akan bisa dilakukan _test_ menyeluruh kepada semua _project_ untuk memastikan semua tetap berjalan.
**Collaboration across teams**
Sebuah tim dapat mengembangkan fitur dari _project_ tim lain dengan mudah.
Meskipun begitu ada beberapa kelemahan yang sering ditemukan ketika menggunakan monorepo, yaitu:
**Code Ownership**
Dengan monorepo, kemampuan untuk melakukan limitasi akses kode tidak didapatkan secara _out of the box_.
**CI/CD**
Diperlukan waktu _build_ yang lebih lama dengan monorepo. Perlu _build tool_ tambahan untuk melakukan perbaikan _build time_. (Google Bazel, Facebook Buck, Twitter Pants)
**Collaboration is a lie**
Dengan menggunakan multirepo, komunikasi antar developer tentang suatu fitur menjadi kejadian sehari-hari. Dengan monorepo, developer akan cenderung untuk membaca kode dibanding bertanya kepada tim yang bertanggungjawab.
**Coupling**
Karena semua orang bisa mengakses dan mengedit semua fitur. Akan mudah terjadi _coupling_ dan kode kehilangan modularitasnya.
Dalam pengalaman PPL kami, sistem monorepo yang diterapkan sekarang masih sesuai dengan cara kerja tim kami. Karena hanya terdiri dari 2 _project_ (_frontend_ dan _backend_) maka development menjadi lebih cepat dan versinya akurat.
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment