The Model C4, yang dibuat oleh Simon Brown, adalah cara sederhana, hierarkis, dan ramah pengembang untuk memvisualisasikan arsitektur perangkat lunak. Model ini menggunakan empat tingkat abstraksi (mengapa disebut “C4”) untuk menggambarkan suatu sistem dari gambaran umum tingkat tertinggi hingga detail tingkat kode:
-
Konteks Sistem (Tingkat 1) – Gambaran besar: sistem dan pengguna/dependensi eksternalnya.
-
Kontainer (Tingkat 2) – Pilihan teknologi tingkat tinggi dan tanggung jawabnya.
-
Komponen (Tingkat 3) – Blok-blok logis utama di dalam suatu kontainer.
-
Kode (Tingkat 4) – Detail opsional tingkat kelas atau struktur kode.
Model ini didukung oleh tiga jenis diagram tambahan:
-
Lanskap Sistem
-
Dinamis
-
Penempatan
Model ini tidak terikat notasi (Anda dapat menggunakan alat diagram apa pun) dan berfokus pada kejelasan, konsistensi, serta detail yang sesuai dengan audiens. Model ini banyak diadopsi karena menghindari diagram arsitektur yang berantakan seperti ‘big ball of mud’ dan dapat berkembang dari sketsa papan tulis hingga dokumentasi otomatis.
Untuk ini studi kasus yang ditargetkan, kami menggunakan contoh standar dari situs web resmi C4: Sistem Perbankan Internet untuk bank fiksi “Big Bank plc”. Tujuan bisnisnya adalah memungkinkan pelanggan pribadi melihat rekening mereka dan melakukan pembayaran secara daring sambil terintegrasi dengan sistem inti bank yang sudah ada.
Kami akan membahas secara menyeluruh setiap tingkatan dengan:
-
Tujuan dan audiens
-
Elemen utama + tanggung jawab
-
Hubungan
-
Diagram C4 PlantUML siap pakai Diagram C4 PlantUML(PlantUML mendukung sintaks C4 dan tampilan yang indah di sebagian besar penampil Markdown)
-
Rasional dan keputusan utama
-
Bagaimana diagram ini membantu para pemangku kepentingan
Langkah 1: Tentukan Lingkup & Buat Diagram Konteks Sistem (Tingkat 1)
Tujuan: Menunjukkan bagaimana Sistem Perbankan Internet baru sesuai dengan dunia. Audiens: pemangku kepentingan bisnis, orang-orang non-teknis, anggota tim baru.
Elemen (dari contoh resmi):
-
Pelanggan Perbankan Pribadi (Person) – Seorang pelanggan dengan satu atau lebih rekening bank pribadi.
-
Sistem Perbankan Internet (Sistem Perangkat Lunak) – Sistem baru yang sedang kita bangun.
-
Sistem Perbankan Inti (Sistem Perangkat Lunak, yang sudah ada) – Mainframe yang menangani data pelanggan, rekening, dan transaksi.
-
Sistem Email (Sistem Perangkat Lunak, eksternal) – Amazon Web Services Simple Email Service (AWS SES) untuk mengirim konfirmasi.
Hubungan:
-
Pelanggan → menggunakan → Sistem Perbankan Internet (untuk melihat rekening dan melakukan pembayaran)
-
Sistem Perbankan Internet → menggunakan → Sistem Perbankan Inti (untuk data rekening & pembayaran)
-
Sistem Perbankan Internet → mengirim email melalui → Sistem Email
Berikut ini adalah Diagram Konteks C4 PlantUML:

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml
LAYOUT_TOP_DOWN()
LAYOUT_WITH_LEGEND()
title Diagram Konteks Sistem (Tingkat 1) untuk Sistem Perbankan Internet
Person(customer, "Pelanggan Perbankan Pribadi", "Seorang pelanggan dengan satu atau lebih rekening bank pribadi.")
System(internet_banking_system, "Sistem Perbankan Internet", "Sistem baru untuk melihat rekening dan melakukan pembayaran.")
System(core_banking_system, "Sistem Perbankan Inti", "Mainframe yang sudah ada menangani data pelanggan, rekening, dan transaksi.")
System_Ext(email_system, "Sistem Email", "Amazon Web Services Simple Email Service (AWS SES) untuk mengirim konfirmasi.")
Rel(customer, internet_banking_system, "Menggunakan")
Rel(internet_banking_system, core_banking_system, "Menggunakan")
Rel(internet_banking_system, email_system, "Mengirim email melalui")
Lay_D(customer, internet_banking_system)
Lay_D(internet_banking_system, core_banking_system)
Lay_U(email_system, internet_banking_system)
@enduml
Rasional & nilai: Diagram tunggal ini langsung menjawab pertanyaan “Apa yang sedang kita bangun dan siapa yang berinteraksi dengannya?” Diagram ini mencegah perluasan lingkup dengan membuat ketergantungan eksternal menjadi jelas. Pemangku kepentingan bisnis menyukainya karena belum ada detail teknologi.
Langkah 2: Diagram Kontainer (Tingkat 2)
Tujuan: Memperbesar fokus pada Sistem Perbankan Internet dan menunjukkan unit-unit utama yang dapat di-deploy/jalankan (kontainer) serta pilihan teknologinya. Audiens: arsitek, pengembang utama, operasional.
Wadah di dalam Sistem Perbankan Internet:
-
Aplikasi Halaman Tunggal (Browser Web – JavaScript + Angular) – Antarmuka penuh perbankan internet.
-
Aplikasi Seluler (Perangkat seluler – native iOS/Android atau React Native) – Fungsi terbatas untuk penggunaan saat bepergian.
-
Aplikasi API (Sisi server – Java + Spring Boot) – API JSON/HTTPS yang digunakan oleh kedua antarmuka depan.
-
Database (Database relasional – PostgreSQL) – Menyimpan data sesi, preferensi pengguna, ringkasan akun yang disimpan sementara (data inti tetap berada di mainframe).
Hubungan kunci (sistem eksternal yang sama seperti Tingkat 1):
-
SPA & Aplikasi Seluler → memanggil → Aplikasi API
-
Aplikasi API ↔ Database
-
Aplikasi API → Sistem Perbankan Inti & Sistem Email
Diagram Wadah PlantUML C4:
@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
!include https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons/angular.puml
!include https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons/java.puml
!include https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons/postgresql.puml
LAYOUT_ATAS_BAWAH()
LAYOUT_DENGAN_LEGENDA()
judul Diagram Wadah C4 untuk Sistem Perbankan Internet
Person(klien, “Pelanggan Perbankan Pribadi”, “Pelanggan dengan satu atau lebih rekening bank pribadi.”)
System_Boundary(sistem_perbankan_internet, “Sistem Perbankan Internet”, “Sistem baru untuk melihat rekening dan melakukan pembayaran.”) {
Container(spa, “Aplikasi Halaman Tunggal”, “JavaScript + Angular”, “Antarmuka penuh perbankan internet”, $sprite=”angular”)
Container(aplikasi_seluler, “Aplikasi Seluler”, “iOS/Android (React Native)”, “Fungsi terbatas untuk penggunaan saat bepergian”, $sprite=”react”)
Container(aplikasi_api, “Aplikasi API”, “Java + Spring Boot”, “API JSON/HTTPS yang digunakan oleh kedua antarmuka depan”, $sprite=”java”)
ContainerDb(database, “Database”, “PostgreSQL”, “Menyimpan data sesi, preferensi pengguna, ringkasan akun yang di-cache”, $sprite=”postgresql”)
}
System(core_banking_system, “Sistem Perbankan Inti”, “Mainframe yang ada menangani data pelanggan, rekening, dan transaksi.”)
System_Ext(email_system, “Sistem Email”, “Amazon Web Services Simple Email Service (AWS SES) untuk mengirim konfirmasi.”)
‘ Hubungan
Rel(customer, spa, “Menggunakan”, “HTTPS”)
Rel(customer, mobile_app, “Menggunakan”, “HTTPS”)
Rel(spa, api_app, “Memanggil”, “JSON/HTTPS”)
Rel(mobile_app, api_app, “Memanggil”, “JSON/HTTPS”)
Rel(api_app, database, “Membaca dari dan menulis ke”, “JDBC/SQL”)
Rel(api_app, core_banking_system, “Mengambil data / Memperbarui”, “JSON/HTTPS”)
Rel(api_app, email_system, “Mengirim email melalui”, “HTTPS”)
‘ Petunjuk tata letak (opsional – membantu PlantUML mengatur elemen dengan lebih baik)
Lay_D(customer, sistem_perbankan_daring)
Lay_D(sistem_perbankan_daring, core_banking_system)
Lay_U(sistem_email, sistem_perbankan_daring)
@enduml
Alasan: Kami memilih pola SPA modern + backend API untuk web, aplikasi mobile native untuk kinerja, dan menjaga basis data ringan (kebanyakan data berada di mainframe lama). Diagram ini merupakan satu-satunya sumber kebenaran untuk keputusan teknologi tingkat tinggi dan membantu tim DevOps merencanakan infrastruktur.
Langkah 3: Diagram Komponen (Tingkat 3)
Tujuan: Perbesar satu wadah (biasanya yang paling kompleks – Aplikasi API) dan tunjukkan komponen logis utamanya. Audiens: tim pengembangan.
Contoh: Komponen di dalam Aplikasi API:
-
Controller Akun (Spring MVC)
-
Controller Otorisasi
-
Controller Atur Ulang Kata Sandi
-
Komponen Keamanan (menangani otorisasi, JWT, dll.)
-
Komponen Manajemen Akun (mengkoordinasikan pemanggilan ke Perbankan Inti)
-
Komponen Pemberitahuan Email
Diagram Komponen PlantUML C4 (fokus pada Aplikasi API):

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
LAYOUT_WITH_LEGEND()
title Diagram Komponen untuk Sistem Perbankan Internet - Aplikasi API
Container(spa, "Aplikasi Halaman Tunggal", "javascript dan angular", "Menyediakan semua fungsi perbankan internet kepada pelanggan melalui peramban web mereka.")
Container(ma, "Aplikasi Mobile", "Xamarin", "Menyediakan subset terbatas dari fungsi perbankan internet kepada pelanggan melalui perangkat mobile mereka.")
ContainerDb(db, "Database", "Skema Basis Data Relasional", "Menyimpan informasi pendaftaran pengguna, kredensial otentikasi yang di-hash, log akses, dll.")
System_Ext(mbs, "Sistem Perbankan Mainframe", "Menyimpan semua informasi inti perbankan tentang pelanggan, rekening, transaksi, dll.")
Container_Boundary(api, "Aplikasi API") {
Component(accounts, "Controller Akun", "Spring MVC", "Menyediakan ringkasan dan saldo akun kepada pelanggan.")
Component(auth, "Controller Otentikasi", "Spring MVC", "Menangani login pengguna, manajemen sesi, dan generasi token.")
Component(reset, "Controller Atur Ulang Kata Sandi", "Spring MVC", "Memungkinkan pengguna mengatur ulang kata sandi mereka melalui email.")
Component(security, "Komponen Keamanan", "Spring Bean", "Menangani otentikasi, generasi token JWT, dan peng-hashan kata sandi.")
Component(accountmgmt, "Komponen Manajemen Akun", "Spring Bean", "Mengkoordinasikan panggilan ke sistem perbankan inti untuk operasi akun.")
Component(email, "Komponen Pemberitahuan Email", "Spring Bean", "Mengirim email atur ulang kata sandi dan email verifikasi akun melalui SMTP.")
Rel(accounts, security, "Menggunakan")
Rel(auth, security, "Menggunakan")
Rel(reset, security, "Menggunakan")
Rel(accountmgmt, mbs, "Menggunakan", "XML/HTTPS")
Rel(email, db, "Membaca", "JDBC")
}
Rel(spa, accounts, "Menggunakan", "JSON/HTTPS")
Rel(spa, auth, "Menggunakan", "JSON/HTTPS")
Rel(spa, reset, "Menggunakan", "JSON/HTTPS")
Rel(ma, accounts, "Menggunakan", "JSON/HTTPS")
Rel(ma, auth, "Menggunakan", "JSON/HTTPS")
Rel(ma, reset, "Menggunakan", "JSON/HTTPS")
@enduml
Alasan: Tingkat ini menunjukkan bagaimana tanggung jawab dibagi (pemisahan kepedulian) dan membuat onboarding pengembang baru jauh lebih cepat. Anda hanya menggambar diagram komponen untuk container yang cukup kompleks untuk membenarkan hal tersebut.
Langkah 4: Diagram Kode (Tingkat 4) – Opsional
Tujuan: Menunjukkan struktur internal dari satu komponen (diagram kelas, urutan, dll). Audiens: pengembang yang bekerja pada kode tersebut.
Contoh untukController Otentikasikomponen – diagram kelas UML sederhana dalam PlantUML:
@startuml
diagramKelas
skinparam {
roundcorner 8
WarnaPanah #444444
WarnaFontPanah #444444
WarnaBatas #444444
Kelas {
WarnaBatas #1A237E
WarnaLatarBelakang #E8EAF6
WarnaFont #1A237E
}
}
kelas “ControllerOtentikasi” {
+login(kredensial)
+refreshToken()
}
kelas “PenyediaTokenJwt” {
+generateToken(pengguna)
+validateToken(token)
}
class “UserRepository” {
+findByUsername()
}
AuthenticationController ..> JwtTokenProvider : “uses”
AuthenticationController ..> UserRepository : “uses”
@enduml
Dalam proyek nyata, Anda sering melewatkan Level 4 dan langsung mengarah ke kode sumber yang sebenarnya.
Langkah 5: Diagram Pendukung
Diagram Dinamis (contoh: alur “Lihat Ringkasan Akun”)

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Deployment.puml
judul Diagram Dinamis untuk Lihat Ringkasan Akun
Person(customer, “Pelanggan Perbankan Pribadi”) {
Container(spa, “Aplikasi Halaman Tunggal”) {
Container(api, “Aplikasi API”) {
ContainerDb(db, “Database”) {
System_Ext(coreBanking, “Sistem Perbankan Inti”)
}
}
}
}
Rel(customer, spa, “1. Klik ‘Akun’”, “”)
Rel(spa, api, “2. GET /accounts”, “JSON/HTTPS”)
Rel(api, db, “3. Baca ringkasan yang di-cache”, “”)
Rel(api, coreBanking, “4. Ambil data terbaru”, “”)
Rel(api, spa, “5. Kembalikan JSON”, “”)
TAMPILKAN_LEGENDA()
@enduml
Diagram Penempatan (pemetaan fisik tingkat tinggi):

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Deployment.puml
judul Diagram Penempatan untuk Sistem Perbankan Internet
Node_Penempatan(aws, “Amazon Web Services”, “Awam”) {
Node_Penempatan(ec2, “Kelompok Auto-Scaling EC2”, “Linux”) {
Kontainer(api, “Aplikasi API”, “Java Spring Boot”)
}
Node_Penempatan(rds, “RDS”, “PostgreSQL”) {
KontainerDb(db, “Database”)
}
}
Node_Penempatan(customerDevice, “Perangkat Pelanggan”, “Web/Mobile”) {
Kontainer(spa, “Aplikasi Halaman Tunggal”)
Kontainer(mobile, “Aplikasi Seluler”)
}
Sistem_Ext(coreBanking, “Sistem Perbankan Inti (mainframe lokal)”)
Rel(spa, api, “Melakukan pemanggilan API ke”, “HTTPS”)
Rel(mobile, api, “Melakukan pemanggilan API ke”, “HTTPS”)
Rel_U(api, spa, “Mengirimkan ke peramban web pelanggan”)
Rel_U(api, mobile, “Mengirimkan ke aplikasi seluler”)
TAMPILKAN_LEGENDA()
@enduml
Cara Menggunakan Studi Kasus Ini dalam Praktik
-
Mulai dengan lokakarya: gambar Konteks di papan tulis.
-
Iterasi ke Kontainer dan Komponen menggunakan PlantUML C4.
-
Simpan diagram-diagram di repositori kode (sebagai kode!) agar tetap diperbarui.
-
Hasilkan dokumentasi hidup secara otomatis.
Contoh Sistem Perbankan Internet ini adalah referensi resmi yang dibuat oleh Simon Brown dan digunakan di ribuan organisasi di seluruh dunia. Dengan mengikuti langkah-langkah ini, Anda kini memiliki deskripsi arsitektur yang lengkap dan siap produksi yang dapat dipahami oleh siapa saja—mulai dari CEO hingga pengembang pemula—pada tingkat detail yang tepat.
Artikel Diagram C4
- Panduan Utama untuk Visualisasi Model C4 Menggunakan Alat AI Visual Paradigm: Panduan ini menjelaskan cara memanfaatkan alat berbasis AI untuk mengotomatisasi dan meningkatkan visualisasi model C4 agar desain arsitektur perangkat lunak menjadi lebih cepat.
- Memanfaatkan AI C4 Studio Visual Paradigm untuk Dokumentasi Arsitektur yang Lebih Efisien: Artikel ini menjelaskan penggunaan studio yang ditingkatkan dengan AI untuk membuat dokumentasi arsitektur perangkat lunak yang bersih, dapat diskalakan, dan mudah dipelihara.
- Panduan Utama untuk C4-PlantUML Studio: Mengubah Desain Arsitektur Perangkat Lunak: Sumber ini mengeksplorasi penggabungan otomatisasi berbasis AI, kejelasan model C4, dan fleksibilitas PlantUML menjadi satu alat yang kuat.
- Panduan Komprehensif untuk C4 PlantUML Studio Berbasis AI dari Visual Paradigm: Panduan ini menjelaskan alat khusus yang dirilis pada akhir 2025 yang mengubah permintaan bahasa alami menjadi diagram C4 berlapis.
- C4-PlantUML Studio | Pembuat Diagram C4 Berbasis AI: Ringkasan fitur ini menyoroti alat berbasis AI yang dirancang untuk menghasilkan diagram arsitektur perangkat lunak C4 dari deskripsi teks sederhana.
- Membuat dan Memodifikasi Diagram Komponen C4 dengan Chatbot AI Visual Paradigm: Tutorial ini menunjukkan cara menggunakan chatbot berbasis AI untuk secara iteratif membuat dan menyempurnakan arsitektur tingkat komponen pada sistem yang kompleks.
- Pembuat Diagram C4 Berbasis AI: Tingkat Inti dan Tampilan Pendukung: Halaman ini menjelaskan bagaimana pembuat AI mendukung empat tingkat inti model C4—Konteks, Wadah, Komponen, dan Penempatan—untuk memberikan dokumentasi yang komprehensif.
- Pembuat Diagram AI: Rilis Dukungan Lengkap Model C4: Pembaruan ini menjelaskan integrasi fitur berbasis AI untuk pembuatan otomatis diagram model C4 berjenjang.
- Pembuat AI Model C4: Mengotomatisasi Seluruh Siklus Pemodelan: Sumber ini menyoroti bagaimana chatbot AI khusus menggunakan permintaan percakapan untuk memastikan konsistensi dalam dokumentasi arsitektur untuk tim DevOps.
- Ulasan Komprehensif: Chatbot AI Umum vs. Alat C4 Visual Paradigm: Perbandingan ini menjelaskan mengapa alat khusus seperti C4 PlantUML Studio memberikan hasil yang lebih terstruktur dan berkualitas profesional dibandingkan model bahasa umum.
This post is also available in Deutsch, English, Español, فارسی, Français, English, 日本語, Polski, Portuguese, Ру́сский, Việt Nam, 简体中文 and 繁體中文.













