Arsitektur Perangkat Lunak

Pendahuluan

Software architecture merupakan struktur atau kerangka software yang merepresentasikan komponen-komponen penyusun software, properti yang melekat pada setiap komponen tersebut, serta hubungan antar komponen-komponen yang ada. Komponen software yang dimaksud di sini dapat berupa beberapa service yang menyusun software. Software architecture idealnya cukup mudah untuk dipahami karena menggambarkan software pada level abstraksi yang masih high level.

Mengapa peduli dengan software architecture?

Software architecture merupakan sesuatu yang diskusikan dan ditentukan pada fase awal dari desain software. Hal ini karena software architecture merepresentasikan struktur fundamental dari software yang akan dibangun. Dengan demikian, software architecture tentu memegang peranan penting pada keseluruhan proses pengembangan software. Apabila tidak ditentukan dengan hati-hati, keseluruhan pengembangan software akan terkena dampaknya. Karena alasan inilah software architecture harus diperhatikan.

Perspektif terhadap software architecture

  • Developer menginginkan software architecture yang memberikan gambaran kepada implementasi nantinya. Maka, software architecture harus jelas dan menggambarkan struktur software dari sisi teknis.
  • Customer menginginkan software architecture yang logis dan masuk akal sehingga dapat dipahami, serta mampu memenuhi kebutuhan bisnis.
  • Software architect menginginkan software architecture yang dapat menonjolkan poin penting mengenai software architecture itu sendiri, karena mereka memahami software architecture secara mendalam.

Beberapa software architectural styles

  • Data-centered architecture
    Arsitektur dengan database yang berada di tengah arsitektur dan komponen lain seperti client software mengakses database tersebut.
  • Data flow architecture
    Arsitektur dengan serangkaian komponen yang dilewati oleh suatu data. Jadi, data bergerak melalui rangkaian komponen dari awal hingga akhir.
  • Layered architecture
    Arsitektur yang terdiri atas beberapa layer dari “dalam” hingga ke “luar” yang melakukan hal yang berbeda-beda. Layer yang paling dalam melakukan operasi yang semakin dekat kepada mesin (disebut core layer), lalu yang lebih luar adalah utility layer, selanjutnya application layer, barulah user interface layer yang melayani pengguna secara langsung.
  • Client-server architecture
    Arsitektur yang terbagi atas dua bagian yang disebut client dan server. Client mengirim request kepada server lalu server memberi response kepada client. Client bertanggung jawab terhadap presentation logic, server bertanggung jawab terhadap data access logic, dan application logic bisa di client / di server / sebagian di client dan sebagian di server. Karena adanya beberapa kemungkinan tersebut untuk application logic, maka terdapat istilah fat client dan thin client. Fat client artinya sisi client menyediakan fungsionalitas application logic, sedangkan thin client tidak.

Monolitik vs Microservice

Kami memilih arsitektur microservice daripada monolitik karena beberapa keunggulan yang ditawarkannya. Arsitektur microservice, yang pada aplikasi kami dipisah menjadi front end dan back end, mendukung separation of concern sehingga di back end bisa fokus terhubung ke database dan mengurusi application logic. Sedangkan front end memperoleh data dari back end kemudian bisa fokus mengurusi tampilan antarmuka kepada pengguna.

Berikut adalah beberapa keunggulan microservice:

  • Front end dan back end masing-masing dapat di-scale
  • Loosely coupled, low coupling antara front end dan back end
  • High cohesion, service front end dan back end menjadi lebih kohesif
  • Language neutral, service-service yang ada dapat ditulis dengan bahasa pemrograman yang berbeda dan berkomunikasi melalui sebuah REST API

Sebenarnya microservice juga memiliki downside yaitu lebih kompleks dan perlu usaha tambahan untuk membagi aplikasi menjadi beberapa service. Kalau monolitik lebih sederhana karena tidak terbagi dalam beberapa service. Namun, dengan trade-off yang ada tersebut, kami mempertimbangkan bahwa microservice worth it untuk dipakai karena mendukung separation of concern.

Artikel ini ditulis untuk Individual Review PPL CS Universitas Indonesia 2021

Pada perkuliahan PPL, aplikasi kami merupakan sebuah aplikasi yang berbasis web. Arsitektur aplikasi kami dapat dipandang sebagai client-server dimana pengguna (client) akan mengakses aplikasi kami (server). Namun, untuk aplikasi kami sendiri berupa microservice yang terbagi menjadi dua dua service yaitu front end dan back end. Bagian front end kami kembangkan menggunakan React sedangkan bagian back end menggunakan Django.

Client mengirim request ke URL front end, dimana tampilan aplikasi front end dibuat menggunakan React. Front end mengirim request ke API di back end, baik itu untuk mengirim data yang diperoleh dari user untuk kemudian disimpan di database, maupun untuk memperoleh data dari server dan ditampilkan kepada user. API back end dibuat menggunakan Django REST Framework. Back end mengambil data dari database postgreSQL. Adapun Django menggunakan software design pattern model-view-controller (MVC).

Orkestrasi Docker

Untuk deployment, kami menggunakan Gitlab CI. Job CI/CD dapat dijalankan pada sebuah Docker Container dengan menspesifikan Docker Image yang ingin digunakan pada .gitlab-ci.yml. Secara default, Docker executor mem-pull image yang dispesifikasikan tersebut dari Docker Hub. Docker Hub merupakan suatu repository yang berisi berbagai Docker Image.

Sebagai contoh, pada front end, kami menggunakan Docker Image node:latest. Docker Image tersebut diperlukan untuk menjalankan stages mulai dari lint, test, dan seterusnya. Alasannya karena untuk melakukan stages tersebut, diperlukan dependencies yang diinstall menggunakan npm (node package manager). Oleh karena itu memerlukan Docker Image = node. Dependencies yang dimaksud misalnya Jest (JavaScript Testing Framework) untuk stage “test”. Adapun latest berarti pakai versi terbaru.

--

--

Computer Science Student at University of Indonesia

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store