NODEJS DASAR


01. Pengenalan NodeJS

  • NodeJS diperkenalkan pertama kali oleh Ryan Dahl pada tahun 2009
  • NodeJS merupakan teknologi yang bisa digunakan untuk menjalankan kode JavaScript diluar Web Browser
  • NodeJS dibuat dari V8 Engine, yaitu Engine untuk Google Chrome
  • NodeJS merupakan project yang Free dan OpenSource
  • https://nodejs.org/ 

Kenapa Belajar NodeJS
  • NodeJS mempopulerkan paradigma JavaScript Everywhere, dimana dengan menggunakan NodeJS, kita bisa membuat aplikasi berbasis server side dengan bahasa pemrograman JavaScript
  • Hal ini membuat kita hanya butuh belajar bahasa pemrograman JavaScript untuk membuat aplikasi web misalnya, sehingga tidak butuh belajar bahasa pemrograman lain seperti PHP atau Java untuk server side web nya
  • Saat ini NodeJS sangat populer dan banyak sekali digunakan di perusahaan teknologi, terutama untuk membantu pengembangan Web Frontend

Yang Tidak Bisa Dilakukan di NodeJS
  • Pada kelas JavaScript, kita sudah membahas banyak sekali fitur JavaScript yang berjalan di Browser
  • Karena NodeJS tidak berjalan di Browser, jadi tidak semua fitur JavaScript bisa dilakukan di NodeJS
  • Fitur seperti Document Object Model dan banyak Web API tidak bisa dilakukan di NodeJS, hal ini karena DOM dan beberapa Web API berjalan membutuhkan Browser

Text Editor
  • NodeJS menggunakan bahasa pemrograman JavaScript, oleh karena itu kita bisa menggunakan Text Editor apapun untuk membuat aplikasi menggunakan NodeJS, misal :
  • Visual Studio Code
  • JetBrains WebStorm
  • Sublime
  • Atom
  • NodePad++
  • Dan lain-lain

02. Web Application
  • Web Application adalah aplikasi yang berjalan di Server dan ditampilkan di Browser Client
  • Saat kita membuat Web Application, biasanya akan dibagi menjadi 3 bagian, Client, Server dan Database

Diagram Web Application


Client
  • Client merupakan user interface atau bagian frontend dari web application, yang digunakan oleh pengguna web application
  • Client digunakan untuk berinteraksi dengan Server, baik itu mengirim data atau menerima data
  • Frontend biasanya dibuat menggunakan HTML, CSS dan JavaScript

Server
  • Server bertanggung jawab untuk menerima request dari Client, mengerjakan request yang dikirim dan membalas request berupa response ke Client
  • Server bertugas sebagai backend untuk web application, dimana semua logic aplikasi akan dilakukan di Server
  • Biasanya Server dibuat menggunakan PHP, Pythton, Java, .NET dan banyak bahasa pemrograman lainnya
  • Dengan adanya NodeJS, sekarang kita bisa membuat Server menggunakan JavaScript

Database
  • Database adalah tempat untuk menyimpan data web application
  • Data disimpan dan diambil oleh Server. 
  • Client tidak bisa langsung mengambil atau menyimpan data ke Database secara langsung, oleh karena itu perlu penengah untuk melakukannya, yaitu Server
  • Database biasanya menggunakan aplikasi sistem basis data seperti misalnya MySQL, PostgreSQL, MongoDB dan lain-lain

03. Concurrency dan Parallel
Sejarah
  • Dahulu, komputer hanya menjalankan sebuah program pada satu waktu. Contoh: hanya bisa menjalankan spotify tidak bisa sambil ngoding.
  • Karena hanya bisa menjalankan satu program pada satu waktu, hal ini tidak efisien dan memakan waktu lama karena hanya bisa mengerjakan satu tugas pada satu waktu
  • Semakin kesini, sistem operasi untuk komputer semakin berkembang, sekarang sistem operasi bisa menjalankan program secara bersamaan dalam proses yang berbeda-beda, terisolasi dan saling independen antar program. 

Thread
  • Program biasanya berjalan dalam sebuah proses, dan proses akan memiliki resource yang independen dengan proses lain. Misalnya, saat membuka aplikasi browser yang memakan memori 500MB maka memori itu tidak akan digunakan oleh aplikasi lain. Jadi tiap program berjalan independen.
  • Sekarang, sistem operasi tidak hanya bisa menjalankan multiple proses, namun dalam proses kita bisa menjalankan banyak pekerjaan sekaligus, atau bisa dibilang proses ringan atau lebih dikenal dengan nama Thread. Contohnya, dalam satu browser bisa membuka beberapa tab sekaligus, artinya kita bisa mengerjakan beberapa some proses (proses yang lebih kecil dari program) / proses ringan / thread.
  • Thread membuat proses aplikasi bisa berjalan tidak harus selalu sequential, kita bisa membuat proses aplikasi berjalan menjadi asynchronous atau parallel.

Concurrency vs Parallel
  • Kadang banyak yang bingung dengan concurrency dan parallel, sebenarnya kita tidak perlu terlalu memusingkan hal ini
  • Karena saat ini, kita pasti akan menggunakan keduanya ketika membuat aplikasi
  • Concurrency artinya mengerjakan beberapa pekerjaan satu persatu
  • Parallel artiya mengerjakan beberapa pekerjaan sekaligus pada satu waktu

Diagram Concurrency

Misalkan kita punya thread A, dia mengerjakan pekerjaan A, lalu mengerjakan pekerjaan B, lalu balik lagi mengerjakan pekerjaan A (berpindah-pindah).

Diagram Parallel

Misalkan ada 2 thread: A dan B. Kedua thread berjalan bareng-bareng dalam waktu bersamaan.

Contoh Concurrency dan Parallel
  • Browser adalah aplikasi yang concurrent dan parallel
  • Browser akan melakukan proses concurrent ketika membuka web, browser akan melakukan http request, lalu mendownload semua file web (html, css, js) lalu merender dalam bentuk tampilan web
  • Browser akan melakukan proses parallel, ketika kita membuka beberapa tab web, dan juga sambil download beberapa file, dan menonton video dari web streaming 

Synchronous vs Asynchronous
  • Saat membuat aplikasi yang concurrent atau parallel, kadang kita sering menemui istilah synchronous dan asynchronous
  • Tidak perlu bingung dengan istilah tersebut, secara sederhana
  • Synchronous adalah ketika kode program kita berjalan secara sequential, dan semua tahapan ditunggu sampai prosesnya selesai baru akan dieksekusi ke tahapan selanjutnya
  • Sedangkan, Asynchronous artinya ketika kode program kita berjalan dan kita tidak perlu menunggu eksekusi kode tersebut selesai, kita bisa lanjutkan ke tahapan kode program selanjutnya

Diagram Synchronous

Diagram Asynchronous

04. Threadpool Web Model

Threadpool
  • Pada materi sebelumnya sudah dijelaskan bahwa thread adalah proses ringan yang biasa dibuat saat membuat aplikasi
  • Walaupun bisa dibilang ringan, namun jika terlalu banyak membuat thread, maka tetap akan memberatkan sistem operasi kita
  • Oleh karena itu, biasanya kita akan menggunakan threadpool untuk melakukan management thread
  • Threadpool merupakan tempat dimana kita menyimpan thread, ketika kita butuh kita akan ambil dari threadpool, ketika sudah selesai, kita akan kembalikan thread nya ke threadpool
  • Dengan threadpool, kita bisa memanfaatkan thread yang sama berkali-kali, tanpa harus membuat thread baru terus menerus

Diagram Threadpool

Threadpool Queue
  • Apa yang terjadi ketika semua thread sedang bekerja? Bagaimana jika kita ingin meminta thread ke threadpool untuk mengerjakan sesuatu?
  • Jika semua thread penuh, kita tidak bisa meminta lagi thread ke threadpool. Kita harus menunggu sampai ada thread yang tidak sibuk
  • Dimana kita harus menunggu sampai ada thread tersedia untuk digunakan?
  • Biasanya threadpool memiliki tempat untuk menyimpan tugas yang belum dikerjakan oleh thread di tempat bernama queue (antrian)
  • Ketika kita mengirim perintah ke threadpool, perintah tersebut akan dikirim ke queue, lalu perintah-perintah itu akan dieksekusi satu per satu oleh thread yang tersedia di threadpool

Diagram Threadpool Queue

Threadpool Web Model
  • Dahulu pembuatan web application sangat populer menggunakan threadpool model
  • Setiap request yang masuk ke web server akan diproses oleh satu buah thread
  • Dengan demikian ketika banyak request masuk, semua bisa diproses secara paralel karena akan ditangani oleh thread masing-masing
  • Namun threadpool model ini memiliki kekurangan, ketika thread sedang sibuk semua, secara otomatis request selanjutnya harus menunggu sampai ada thread yang selesai melakukan tugas sebelumnya
  • Contoh web server yang menggunakan threadpool model, seperti Apache HTTPD, Apache Tomcat, dan lain-lain

05. Blocking dan Non-Blocking

Blocking
  • Saat kita membuat kode program, secara default kode program akan berjalan secara blocking atau synchronous
  • Artinya kita harus menunggu sebuah kode selesai sebelum kode selanjutnya dieksekusi
  • Contoh ketika kita membuat kode program untuk membaca file, jika kode kita blocking, maka kita harus menunggu program selesai membaca file, baru kita bisa melanjutkan kode program selanjutnya

Non-Blocling
  • Non-Blocking berbeda dengan Blocking, kode program Non-Blocking akan dieksekusi tanpa harus menunggu kode program tersebut selesai
  • Non-Blocking akan dijalankan secara asynchronous
  • Ketika memanggil kode Non-Blocking, biasanya kita perlu mengirimkan callback untuk dipanggil oleh kode Non-Blocking tersebut ketika kodenya susah selesai
  • Contoh-contoh Non-Blocking sudah kita bahas di kelas JavaScript Async, seperti AJAX, Fetch API, dan lain-lain
  • Di NodeJS, hampir semua fiturnya mendukung kode Non-Blocking

06. NodeJS Architecture


Event-Loop
  • Event-Loop merupakan single thread proses yang digunakan untuk mengeksekusi kode Non-Blocking
  • Karena Event-Loop hanya menggunakan single thread, maka kita harus berhati-hati ketika membuat blocking code, karena bisa memperlambat proses eksekusi kode kita
  • Event-Loop sendiri sebenarnya tugasnya hanya menerima dan mengirim eksekusi kode ke C++ Threadpool, oleh karena itu selalu usahakan menggunakan kode nonblocking agar proses blocking-nya dikerjakan di C++ threadpool
  • Event-Loop akan menerima response dari C++ threadpool yang di kirim via callback

C++ Threadpool
  • NodeJS Menggunakan C++ Threadpool untuk workernya, yaitu threadpool untuk melakukan pekerjaan
  • Libuv adalah library yang digunakan di NodeJS, dimana secara default libuv menggunakan 4 thread di dalam threadpool nya, hal ini menjadikan kita bisa melakukan 4 pekerjaan blocking sekaligus dalam satu waktu.
  • Jika terlalu banyak pekerjaan blocking, kita bisa mengubah jumlah thread di libuv dengan pengaturan environment variable UV_THREADPOOL_SIZE 
  • http://docs.libuv.org/en/v1.x/threadpool.html 

07. Menginstall NodeJS

Menginstall NodeJS Manual
  • Download versi NodeJS LTS (Long Term Support)
  • https://nodejs.org/en/download/ 

Menginstall NodeJS dengan Package Manager
  • https://github.com/nvm-sh/nvm 
  • https://community.chocolatey.org/packages/nodejs 
  • https://formulae.brew.sh/formula/node
     
Setting PATH NodeJS
  • Setelah menginstall NodeJS, disarankan melakukan setting PATH NodeJS pada sistem operasi kita
  • Hal ini agar mudah ketika kita mengakses program NodeJS menggunakan terminal / command prompt

Kode : Mengecek NodeJS

08. Hello World

Kode : Hello World

Menjalankan Kode JavaScript
  • Karena NodeJS tidak memerlukan Web Browser, jadi kita bisa langsung menjalankan program JavaScript kita menggunakan aplikasi NodeJS lewat terminal / command promt, dengan perintah : node namafile.js

Kode : Menjalankan Hello World

09. NodeJS REPL

REPL (Read Eval Print Loop)
  • REPL singkatan dari Read Eval Print Loop
  • Yaitu mekanisme dimana program bisa membaca langsung kode program yang diketikkan, lalu mengeksekusinya, menampilkan hasilnya, lalu mengulangi dari awal lagi
  • NodeJS mendukung REPL, sehingga lebih mudah ketika belajar
  • Namun tetap, saya menyarankan menyimpan kode program di file JavaScript, agar lebih mudah diubah ketika terjadi masalah
  • Untuk menggunakan NodeJS REPL, cukup jalankan aplikasi node saja

Kode : REPL


10. NodeJS Standard Library
  • Saat kita belajar JavaScript, di Web Browser, terdapat fitur-fitur yang bernama Web API
  • https://developer.mozilla.org/en-US/docs/Web/API 
  • Kebanyakan fitur Web API hanya berjalan di Web Browser, sehingga tidak bisa jalan di NodeJS
  • NodeJS sendiri hanya menggunakan bahasa pemrogaman JavaScript nya, namun tidak mengadopsi fitur Web API nya, karena itu hanya berjalan di Web Browser
  • NodeJS sendiri memiliki standard library yang bisa kita gunakan untuk mempermudah pembuatan aplikasi
  • https://nodejs.org/dist/latest-v16.x/docs/api/ 

Kode : Contoh Standard Library yang tidak jalan di NodeJS

11. Modules
  • Standard Library yang terdapat di NodeJS bisa kita gunakan seperti layaknya JavaScript Modules
  • Jika belum mengerti tentang JavaScript Modules, silahkan pelajari kelas saya tentang JavaScript Modules
  • Karena NodeJS menggunakan Modules, jika kita ingin menggunakan Modules, kita juga perlu memberi tahu bahwa file JavaScript kita menggunakan Modules, caranya dengan mengubah nama file dari .js menjadi .mjs

Kode : Contoh Standard Library menggunakan .js


Kode : Contoh Standard Library menggunakan .mjs


12. Require Function
  • Awal ketika NodeJS rilis, fitur JavaScript Modules belum rilis, namun sekarang JavaScript sudah banyak menggunakan JavaScript Modules
  • NodeJS pun awalnya tidak menggunakan JavaScript Modules, namun sekarang NodeJS sudah bisa menggunakan JavaScript Modules, dan sangat direkomendasikan menggunakannya
  • Namun awal sebelum Modules, NodeJS menggunakan function require() untuk melakukan import file 
  • Di materi ini saya sengaja bahas, agar tidak bingung ketika kita melihat tutorial yang masih menggunakan function require

Kode : Function Require


13. Global Async di Module
  • Saat kita belajar JavaScript, untuk menggunakan Async Await, biasanya kita perlu membuat terlebih dahulu function yang kita tandai sebagai async
  • Saat kita menggunakan Module, secara default, global code adalah Async, oleh karena itu kita bisa menggunakan Async Await 
  • Kecuali jika kita membuat function, maka function tersebut harus kita tandai sebagai Async jika ingin menggunakan Async Await

Kode : JavaScript

Kode : JavaScript Module

14. OS
  • OS merupakan standard library yang bisa digunakan untuk mendapatkan informasi tentang sistem operasi yang digunakan
  • https://nodejs.org/dist/latest-v16.x/docs/api/os.html 

Kode : OS


15. Path
  • Path merupakan standard library yang bisa kita gunakan untuk bekerja dengan lokasi file dan directory / folder
  • https://nodejs.org/dist/latest-v16.x/docs/api/path.html 

Kode : Path

16. File System
  • File System merupakan standard library yang bisa digunakan untuk memanipulasi file system
  • Dalam File System, terdapat 3 jenis library
  • Pertama library yang bersifat blocking atau synchronous (tidak disarankan)
  • Kedua library yang bersifat non-blocking atau asynchronous menggunakan callback
  • Ketika library yang bersifat non-blocking atau asynchronous tapi menggunakan promise (disarankan)
  • https://nodejs.org/dist/latest-v16.x/docs/api/fs.html 

Kode : File System menggunakan blocking

Kode : File System

Setelah dijalankan maka akan dibuatkan file baru yaitu tempt.txt yang berisi teks Hello NodeJS.

 17. Debugger
  • NodeJS memiliki fitur debugger, dimana kita bisa mengikuti tahapan eksekusi program di NodeJS
  • Hal ini sangat cocok ketika kita melakukan proses debugging, mencari sebab masalah yang terjadi di aplikasi kita
  • https://nodejs.org/dist/latest-v16.x/docs/api/debugger.html 

Breakpoint
  • Dalam debugging, terdapat istilah breakpoint, yaitu lokasi dimana kita ingin menghentikan sementara eksekusi kode program
  • Biasanya ini dilakukan untuk mengawasi data-data di sekitar lokasi berhentinya tersebut
  • Untuk menambahkan breakpoint, kita bisa menggunakan kata kunci: debugger

Menjalankan Mode Debug
  • Jika kita menjalankan file JavaScript hanya dengan menggunakan perintah node namafile.js, maka secara default dia tidak akan jalan dalam mode debug
  • Agar jalan dalam mode debug, kita harus menambahkan perintah inspect :
    node inspect namafile.js

Perintah Debugger
  • Saat masuk ke mode debug, ada beberapa perintah yang bisa kita gunakan dalam melakukan debugging
  • cont, c: Continue execution
  • next, n: Step next
  • step, s: Step in
  • out, o: Step out
  • pause: Pause running code

Kode : Debugger


18. DNS
  • DNS merupakan standard library yang bisa digunakan untuk bekerja dengan DNS (domain name server)
  • https://nodejs.org/dist/latest-v16.x/docs/api/dns.html 

Kode : DNS Callback

Kode : DNS Promise

19. Events
  • Events adalah standard library di NodeJS yang bisa digunakan sebagai implementasi Event Listener
  • Di dalam Events, terdapat sebuah class bernama EventEmitter yang bisa digunakan untuk menampung data listener per jenis event.
  • Lalu kita bisa melakukan emmit untuk mentrigger jenis event dan mengirim data ke event tersebut
  • https://nodejs.org/dist/latest-v16.x/docs/api/events.html 

Kode : Events


20. Global
  • Di dalam NodeJS, terdapat library berupa variable atau function yang secara global bisa diakses dimana saja, tanpa harus melakukan import
  • Kita bisa melihat detail apa saja fitur yang terdapat secara global di halaman dokumentasinya
  • https://nodejs.org/dist/latest-v16.x/docs/api/globals.html 

Kode : Globals

21. Process
  • Process merupakan standard library yang digunakan untuk mendapatkan informasi proses NodeJS yang sedang berjalan
  • Process juga merupakan instance dari EventEmitter, sehingga kita bisa menambahkan listener kedalam Process
  • https://nodejs.org/dist/latest-v16.x/docs/api/process.html 

Kode : Process

22. Readline
  • Readline merupakan standard library yang digunakan untuk membaca input 
  • Namun pada saat dibuat video ini, Readline hanya mendukung versi callback di versi NodeJS LTS 16. 
  • Di NodeJS 17 sudah mendukung Promise sehingga lebih mudah digunakan, namun itupun masih dalam tahap experimental
  • https://nodejs.org/dist/latest-v16.x/docs/api/readline.html 

Kode : Readline


23. Report
  • Report merupakan fitur yang terdapat di NodeJS untuk membuat laporan secara otomatis dalam file ketika sesuatu terjadi pada aplikasi NodeJS kita
  • https://nodejs.org/dist/latest-v16.x/docs/api/report.html 

Kode : Error pada Aplikasi NodeJS

Ketika dijalankan maka di console akan error dan report errornya akan dibuatkan file bernama report.json sesuai yang kita buat (nama file dan ekstensinya bebas).


24. Buffer
  • Buffer merupakan object yang berisikan urutan byte dengan panjang tetap.
  • Buffer merupakan turunan dari tipe data Uint8Array
  • https://nodejs.org/dist/latest-v16.x/docs/api/buffer.html 

Kode : Buffer


Buffer Encoding
  • Buffer juga bisa digunakan untuk melakukan encoding dari satu encoding ke encoding yang lain
  • Ada banyak encoding yang didukung oleh Buffer, misal utf8, ascii,  hex, base64, base64url dan lain-lain

Kode : Buffer Encoding


25. Stream
  • Stream adalah standard library untuk kontrak aliran data di NodeJS
  • Ada banyak sekali Stream object di NodeJS
  • Stream bisa jadi object yang bisa dibaca, atau bisa di tulis, dan Stream adalah turunan dari EventEmitter
  • https://nodejs.org/dist/latest-v16.x/docs/api/stream.html 

Kode : Stream


Ketika dijalankan maka akan membuat file baru bernama target.log dan file ini akan direplace jika kita ubah isi filenya.




Ketika dijalankan maka akan membaca isi file target.log di console:


26. Timer
  • Timer merupakan standard library untuk melakukan scheduling
  • Function di Timer terdapat di globals, sehingga kita bisa menggunakannya tanpa melakukan import, namun semua function Timer menggunakan Callback
  • Jika kita ingin menggunakan Timer versi Promise, kita bisa meng-import dari module timer/promise
  • https://nodejs.org/dist/latest-v16.x/docs/api/timers.html 

Kode : Timer


Kode : Timer Promise



27. Net
  • Net merupakan standard library yang bisa digunakan untuk membuat network client dan server berbasis TCP
  • Net Server dan Client merupakan object Stream, sehingga kita bisa baca datanya, tulis datanya dan juga menambahkan listener
  • https://nodejs.org/dist/latest-v16.x/docs/api/net.html 

Kode : Net Server

Saat kita jalankan maka aplikasi akan jalan terus menunggu koneksi dari client.


Kode : Net Client

Note: Port client harus sama dengan port servernya (disamakan)

Langkah-langkah:
Pertama, jalankan dulu net-server.mjs


Kedua, jalankan net-client.mjs


Ketiga, jalankan net-client.mjs dengan parameter misalnya Budi

Maka antara client dan server akan saling terkoneksi seperti berikut:


28. URL
  • URL merupakan standard library untuk bekerja dengan URL
  • https://nodejs.org/dist/latest-v16.x/docs/api/url.html 

Kode : URL


Kode : Mengubah URL




29. Util
  • Util adalah standard library yang berisikan utility-utility yang bisa kita gunakan untuk mempermudah pembuatan kode program di NodeJS
  • https://nodejs.org/dist/latest-v16.x/docs/api/util.html 

Kode : Util


30. Zlib
  • Zlib adalah standard library yang digunakan untuk melakukan kompresi menggunakan Gzip
  • https://nodejs.org/dist/latest-v16.x/docs/api/zlib.html 

Kode : Zlib Compress


Kode : Zlib Decompress


31. Console
  • Console adalah standard library yang sudah sering kita gunakan
  • Secara global, object console bisa kita gunakan tanpa harus melakukan import module, dan console melakukan print text nya ke stdout
  • Namun jika kita juga bisa membuat object Console sendiri jika kita mau
  • https://nodejs.org/dist/latest-v16.x/docs/api/console.html 

Kode : Console

Setelah dijalankan maka hasil console akan tampil di file bernama application.log

32. Worker Threads
  • Worker Threads adalah standard library yang bisa kita gunakan untuk menggunakan thread ketika mengeksekusi JavaScript secara paralel
  • Worker Threads sangat cocok ketika kita membuat kode program yang butuh jalan secara paralel, dan biasanya kasusnya adalah ketika kode program kita membutuhkan proses yang CPU intensive, seperti misalnya enkripsi atau kompresi
  • Cara kerja Worker Threads mirip dengan Web Worker di JavaScript Web API
  • https://nodejs.org/dist/latest-v16.x/docs/api/worker_threads.html 

Kode : Main Thread

Kode : Worker Thread



33. HTTP Client
  • NodeJS juga memiliki standard library untuk HTTP
  • Salah satu fitur di module HTTP adalah HTTP Client, dimana kita bisa melakukan simulasi HTTP Request menggunakan NodeJS
  • Terdapat 2 jenis module HTTP di NodeJS, HTTP dan HTTPS
  • https://nodejs.org/dist/latest-v16.x/docs/api/http.html 
  • https://nodejs.org/dist/latest-v16.x/docs/api/https.html 

Kode : HTTP Client



34. HTTP Server
  • Standard Library HTTP juga tidak hanya bisa digunakan untuk membuat HTTP Client, tapi juga bisa digunakan untuk membuat HTTP Server
  • Untuk kasus sederhana, cocok sekali jika ingin membuat HTTP Server menggunakan standard library NodeJS, namun untuk kasus yang lebih kompleks, direkomendasikan menggunakan library atau framework yang lebih mudah penggunaannya
  • https://nodejs.org/dist/latest-v16.x/docs/api/http.html 

Kode : Simple HTTP Server




Kode : Request Response HTTP Server

35. Cluster
  • Seperti yang dijelaskan di awal, bahwa NodeJS itu secara default dia berjalan single thread, kecuali jika kita membuat thread manual menggunakan worker thread, tapi tetap dalam satu process
  • NodeJS memiliki standard library bernama Cluster, dimana kita bisa menjalankan beberapa process NodeJS secara sekaligus
  • Ini sangat cocok ketika kita menggunakan CPU yang multicore, sehingga semua core bisa kita utilisasi dengan baik, misal kita jalankan process NodeJS sejumlah CPU core
  • https://nodejs.org/dist/latest-v16.x/docs/api/cluster.html 

Cluster Primary dan Worker
  • Di dalam Cluster, terdapat 2 jenis aplikasi, Primary dan Worker
  • Primary biasanya digunakan sebagai koordinator atau manajer untuk para Worker
  • Sedangkan Worker sendiri adalah aplikasi yang menjalankan tugas nya

Kode : Cluster Primary

Kode : Cluster Worker

Sumber: Youtube Programmer Zaman Now