Sprint 5— Rayza

Rayza Arasj M.
Energizer AAA
Published in
5 min readApr 29, 2019
Source : https://www.moviedash.com/news/9554/avengers-endgame-title-set-production/ + Editan sendiri

“Part of the journey is the end”

— Tony Stark

Halo, ga kerasa ini udah individual review terakhir jadi ini adalah blog terakhir gua untuk PPL 2019 ini :” . Jadi gua tetep akan berbagi beberapa hal melalui blog ini, yaitu:

  • Software Environment
  • Stress & Penetration Testing
  • Software Architecture

Software Environment

“good news: it’s sysadmin day.
bad news, you’re still a sysadmin.”

— saddest server

Suatu software environment adalah luang linkup dengan tiap komponen yang mendukung berjalannya suatu software sehingga dalam environment dapat memiliki komponent seperti deployment environment, environment variable, dll. Pada pengembangan ConnectDot terdapat tiga environment yang kami gunakan, yaitu development, staging, dan production.

Agar software dapat digunakan, perlu di-deploy pada suatu deployment environment. Pada pengembangan ConnectDot kami menggunakan Docker untuk melakukan deploy. Dengan docker, source code dari software yang kami miliki akan diubah menjadi suatu Image, dimana image ini lah yang akan di-deploy pada suatu server.

Seperti yang gua bilang tadi bahwa di ConnectDot kami membagi environment menjadi tiga, yaitu development, staging, dan production. Hal ini kami lakukan untuk memisahkan versi-versi software yang kami kembangkan dalam tahap pengembangannya. Kegunaan dari masing-masing environment adalah :

  • Development : Environment dimana developer bereksperimen dalam masa pengembangan software
  • Staging : Environment dimana software sudah dapat berjalan, code sudah di-review, namun masih butuh persetujuan dari PO/Client untuk dipindahkan ke production environment
  • Production : Environment dimana software sudah berjalan sesuai dengan yang sudah di-approve oleh PO/Client.

Untuk mempermudah proses development, pada pengembangan ConnectDot menggunakan CI/CD (Continuous Integration Continuous Deployment) untuk unit test pada gitlab dan automatic deployment ke portainer. Namun pada saat ini, deployment masih perlu trigger manual pada gitlab untuk menjalankan scriptnya. Berikut adalah contoh code CI/CD beserta jobs yang terbentuk pada gitlab

Tahapan CI/CD pada gitlab
Contoh script deployment

Stress & Penetration Testing

“you cannot enjoy the light without enduring the heat.”

— Timothy F. Geithner

source : https://www.guru99.com/stress-testing-tutorial.html

Stress testing adalah i̶s̶t̶i̶l̶a̶h̶ ̶d̶i̶m̶a̶n̶a̶ ̶p̶r̶o̶g̶r̶a̶m̶m̶e̶r̶ ̶s̶t̶r̶e̶s̶s̶ ̶s̶a̶a̶t̶ ̶t̶e̶s̶t̶i̶n̶g̶ tipe testing dimana menguji stabilitas dan realibitas dari suatu software. Saat software sudah di-deploy dan digunakan langsung oleh user, banyak sekali kejadian error yang mungkin terjadi mulai dari server down gara gara terlalu banyak yang akses software (cough cough SIAK War), hingga perilaku user yang tidak mudah ditebak. Oleh karena itu diperlukan stress testing.

Dalam suatu software stress testing dapat juga dikenal sebagai endurance testing, dimana software di test dengan dilakukan pemanggilan beribu-ribu kali dimana memastikan software dapat terus menjawab pemanggilan tersebut tanpa rusak. Contoh endurance testing ini dapat dilakukan dengan script ataupun dengan postman.

source : https://www.imperva.com/learn/application-security/penetration-testing/

Selain menguji stabilitas dan realibitas dari suatu software dengan stress testing, developer perlu juga untuk menguji apakah software yang dibuatnya aman dari serangan hacker-hacker jahat. Hal ini lebih penting lagi jika software yang dibuat memiliki informasi yang sensitif seperti data diri dan password. Oleh karena itu diperlukan testing lain untuk masalah ini, yaitu penetration testing.

Penetration testing adalah tipe testing dimana developer berusaha untuk mencari celah-celah keamanan yang mungkin dimiliki oleh software yang dikembangkannya. Terdapat 5 tahap dalam melakukan penetration testing, yaitu :

  • Planning dan Reconnaissance : Pada tahap ini developer menentukan goal dari penetration testing, mempelajari struktur software untuk melihat celah-celah keamanan, dan melakukan perencanaan serangan/penetration.
  • Scanning : Pada tahap ini developer menganalisis bagaimana software merespons penetration yang dilakukan. Hal ini biasanya dilakukan dengan dua cara yaitu secara static dimana developer menganalisa code secara langsung atau secara dynamic dimana developer menganalisa code selama code berjalan untuk melihat hasil penetration secara real-time.
  • Gaining Access : Pada tahap ini developer mencoba beberapa contoh serangan pada software, seperti contoh pada web application menggunakan cross-site scripting, SQL Injection, dll. Pada tahap ini juga developer melihat seberapa besar dampak dari serangan yang dilakukan.
  • Mainting Access : Pada tahap ini developer melihat apakah celah-celah keamanan yang ada dapat membuat penyerang memliki access yang lama pada sistem, dimana penyerang mendapatakan in-depth access.
  • Analysis : Pada tahap ini dibuat laporan dari hasil penetration testing yang berisi celah keamanan yang dapat dieksploitasi, data yang dapat diakses, dan berapa lama serangan dapat dilakukan sebelum ketahuan.

Pada pengembangan ConnectDot kami juga terus memperhatikan celah-celah yang mungkin ada pada pemanggilan API kami. Salah satu cara kami agar mencegah terjadinya serangan adalah dengan menggunakan JWT yang dikirim bersamaan dengan request API call. JWT ini yang akan dicek apakah valid dengan key yang kami punya atau tidak. Pada pengembangan ConnectDot kami menggunakan Decorator pada APIView untuk memastikan JWT ini sesuai. Berikut contoh salah satu decorator yang mengecek apakah JWT sesuai dengan key yang kami miliki.

Software Architecture

“everything is designed.
few things are designed well.”

— Brian Reed

Setelah dua sprint lalu gua cerita mengenai software architecture yang ada di ConnectDot, sekarang gua mau coba memperbaiki design yang gua tampilin pada 2 blog lalu.

Before
After

Dapat dilihat terdapat beberapa perubahan yang terjadi :

  • Back-End server sebeneranya dapat dibagi dua komponen yaitu API untuk data ConnectDot dan Endpoint untuk Authtentication User ConnectDot
  • Karena komponen sebelumnya berbeda, database yang digunakan juga berbeda jadinya.
  • Lalu untuk menggambil data gambar di image serving, sekarang menggunakan suatu micro service yaitu image resizer yang berguna untuk mengubah ukuran gambar yang diambil.
  • lalu untuk dapat dibagi menjadi dua, yaitu app dan server. App adalah komponen yang berinteraksi langsung dengan user dimana komponen app ini mengambil web page dari komponen server lalu ditampilkan ke user. Jika user melakukan suatu aksi komponen app lah yang akan berkomunikasi dengan komponen back-end, baik auth ataupun API.

Sehingga terdapat 9 komponen utama dari ConnectDot:

  • Frontend App yang bertugas untuk menampilkan web page dan berkomunikasi dengan backend.
  • Frontend Server yang bertugas untuk menyimpan code frontend dari ConnectDot yang nantinya akan dirender.
  • Image Serving yang bertugas untuk menyimpan gambar.
  • Image Resizer yang bertugas untuk mengbuah ukuran gambar saat dipanggil oleh frontend app.
  • Rest API yang bertugas untuk memberikan data ConnectDot kepada frontend app.
  • ConnectDot DB yang bertugas untuk menyimpan data ConnectDot.
  • JWT Auth Server yang bertugas untuk meng-autentikasi user ConnectDot.
  • Users DB yang bertugas untuk meyimpan data User dari ConnectDot.

Cukup sekian hal-hal yang mau gua ceritain di blog ini, Thaanks! :)

--

--