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 diterapkan 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 tingkat 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 membantu 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, 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 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 Container (Tingkat 2)
Tujuan: Perbesar sistem perbankan internet dan tunjukkan unit-unit utama yang dapat di-deploy/jalankan (container) serta pilihan teknologinya. Audiens: arsitek, pengembang utama, operasional.
Container di dalam Sistem Perbankan Internet:
- Aplikasi Halaman Tunggal (Browser Web – JavaScript + Angular) – Antarmuka pengguna perbankan internet lengkap.
- Aplikasi Seluler (Perangkat seluler – native iOS/Android atau React Native) – Fungsi terbatas untuk penggunaan saat sedang dalam perjalanan.
- Aplikasi API (Sisi server – Java + Spring Boot) – API JSON/HTTPS yang digunakan oleh kedua antarmuka depan.
- Database (DB Relasional – PostgreSQL) – Menyimpan data sesi, preferensi pengguna, ringkasan akun yang di-cache (data inti tetap berada di mainframe lama).
Hubungan utama (sistem eksternal yang sama seperti Tingkat 1):
- SPA & Aplikasi Seluler → memanggil → Aplikasi API
- Aplikasi API ↔ Database
- Aplikasi API → Sistem Perbankan Inti & Sistem Email
Diagram Container C4 PlantUML:
@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_TOP_DOWN()
LAYOUT_WITH_LEGEND()
title Diagram Container C4 untuk Sistem Perbankan Internet
Person(customer, "Pelanggan Perbankan Pribadi", "Seorang pelanggan dengan satu atau lebih rekening bank pribadi.")
System_Boundary(internet_banking_system, "Sistem Perbankan Internet", "Sistem baru untuk melihat rekening dan melakukan pembayaran.") {
Container(spa, "Aplikasi Halaman Tunggal", "JavaScript + Angular", "Antarmuka pengguna perbankan internet lengkap", $sprite="angular")
Container(mobile_app, "Aplikasi Seluler", "iOS/Android (React Native)", "Fungsi terbatas untuk penggunaan saat sedang dalam perjalanan", $sprite="react")
Container(api_app, "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 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, internet_banking_system)
Lay_D(internet_banking_system, core_banking_system)
Lay_U(email_system, internet_banking_system)
@enduml
Alasan: Kami memilih pola SPA modern + backend API untuk web, aplikasi seluler native untuk kinerja, dan menjaga database tetap 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 container (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 Autentikasi
- Controller Atur Ulang Kata Sandi
- Komponen Keamanan (menangani otentikasi, JWT, dll.)
- Komponen Manajemen Akun (mengoordinasikan panggilan ke Sistem 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, akun, transaksi, dll.")
Container_Boundary(api, "Aplikasi API") {
Component(accounts, "Controller Akun", "Spring MVC", "Menyediakan ringkasan dan saldo akun kepada pelanggan.")
Component(auth, "Controller Autentikasi", "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 pengacakan kata sandi.")
Component(accountmgmt, "Komponen Manajemen Akun", "Spring Bean", "Mengoordinasikan panggilan ke sistem perbankan inti untuk operasi akun.")
Component(email, "Komponen Pemberitahuan Email", "Spring Bean", "Mengirim email pengaturan 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: Menampilkan struktur internal dari satu komponen (diagram kelas, urutan, dll.). Audiens: pengembang yang bekerja pada kode tersebut.
Contoh untukController Autentikasikomponen – diagram kelas UML sederhana dalam PlantUML:
@startuml
classDiagram
skinparam {
roundcorner 8
ArrowColor #444444
ArrowFontColor #444444
BorderColor #444444
Class {
BorderColor #1A237E
BackgroundColor #E8EAF6
FontColor #1A237E
}
}
class "AuthenticationController" {
+login(credentials)
+refreshToken()
}
class "JwtTokenProvider" {
+generateToken(user)
+validateToken(token)
}
class "UserRepository" {
+findByUsername()
}
AuthenticationController ..> JwtTokenProvider : "menggunakan"
AuthenticationController ..> UserRepository : "menggunakan"
@enduml
Dalam proyek nyata, Anda sering melewatkan Tingkat 4 dan langsung mengarahkan 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
title Diagram dinamis untuk Tampilan 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", "")
SHOW_LEGEND()
@enduml Diagram Penempatan (pemetaan fisik tingkat tinggi):

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Deployment.puml
title Diagram Penempatan untuk Sistem Perbankan Internet
Deployment_Node(aws, "Amazon Web Services", "Cloud") {
Deployment_Node(ec2, "Kelompok Penyesuaian Otomatis EC2", "Linux") {
Container(api, "Aplikasi API", "Java Spring Boot")
}
Deployment_Node(rds, "RDS", "PostgreSQL") {
ContainerDb(db, "Database")
}
}
Deployment_Node(customerDevice, "Perangkat Pelanggan", "Web/Mobile") {
Container(spa, "Aplikasi Halaman Tunggal")
Container(mobile, "Aplikasi Seluler")
}
System_Ext(coreBanking, "Sistem Perbankan Inti (mainframe lokal)")
Rel(spa, api, "Melakukan panggilan API ke", "HTTPS")
Rel(mobile, api, "Melakukan panggilan API ke", "HTTPS")
Rel_U(api, spa, "Mengirimkan ke browser pelanggan")
Rel_U(api, mobile, "Mengirimkan ke aplikasi seluler")
SHOW_LEGEND()
@enduml
Cara Menggunakan Studi Kasus Ini dalam Praktik
- Mulailah dengan lokakarya: gambar Konteks di papan tulis.
- Iterasi ke Container dan Komponen menggunakan PlantUML C4.
- Simpan diagram di repositori kode (sebagai kode!) agar tetap diperbarui.
- Hasilkan dokumentasi hidup secara otomatis.
Contoh Sistem Perbankan Internet ini persis seperti yang dibuat oleh Simon Brown sebagai referensi resmi dan digunakan oleh ribuan organisasi di seluruh dunia. Dengan mengikuti langkah-langkah ini, Anda kini memiliki deskripsi arsitektur lengkap dan siap produksi yang dapat dipahami oleh siapa saja—mulai dari CEO hingga developer junior baru—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 Studio C4 PlantUML Berbasis AI Visual Paradigm: Panduan ini menjelaskan alat khusus yang dirilis akhir 2025 yang mengubah permintaan bahasa alami menjadi diagram C4 berlapis.
- Studio C4-PlantUML | 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.
- Menghasilkan dan Memodifikasi Diagram Komponen C4 dengan Chatbot AI Visual Paradigm: Tutorial ini menunjukkan penggunaan chatbot berbasis AI untuk secara iteratif membuat dan menyempurnakan arsitektur tingkat komponen untuk 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, Container, 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 hierarkis.
- Pembuat AI Model C4: Mengotomatisasi Seluruh Siklus Pemodelan: Sumber ini menyoroti bagaimana chatbot AI khusus menggunakan petunjuk percakapan untuk memastikan konsistensi di seluruh dokumentasi arsitektur bagi 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 yang bersifat umum.
This post is also available in Deutsch, English, Español, فارسی, Français, English, 日本語, Polski, Portuguese, Ру́сский, Việt Nam, 简体中文 and 繁體中文.













