HOTLINE

(0275) 2974 127

CHAT WA 24/7
0859-60000-390 (Sales)
0852-8969-9009 (Support)
Blog

Apa Itu Software Architecture? Ini Fondasi yang Menentukan Masa Depan Aplikasi

Ketika aplikasi semakin berkembang, jumlah fitur, pengguna, dan integrasi membuat sistem menjadi lebih kompleks. Karena itu, diperlukan rancangan yang mengatur bagaimana komponen aplikasi disusun, berkomunikasi, dan menangani beban sistem.

Software architecture adalah struktur tingkat tinggi yang menggambarkan komponen utama, hubungan antar-komponen, serta keputusan teknis dalam membangun dan mengembangkan sebuah sistem perangkat lunak. Arsitektur yang tepat dapat memengaruhi performa, keamanan, skalabilitas, reliability, maintainability, hingga biaya operasional aplikasi.

Apa Itu Software Architecture?

Software architecture adalah rancangan struktur dan organisasi sebuah sistem perangkat lunak yang menentukan bagaimana berbagai komponen dibentuk, ditempatkan, dan saling berinteraksi.

Konsep ini berada pada tingkat yang lebih tinggi dibandingkan implementasi kode individual. Jika kode berfokus pada bagaimana suatu fungsi dijalankan, software architecture membahas bagaimana berbagai bagian aplikasi disusun agar dapat bekerja sebagai satu kesatuan.

Sebagai contoh, sebuah aplikasi e-commerce dapat terdiri dari antarmuka pengguna, authentication service, product catalog, shopping cart, order management, payment service, database, notification service, hingga sistem monitoring.

Arsitektur perangkat lunak membantu menentukan pembagian tanggung jawab setiap komponen, cara komponen saling berkomunikasi, bagaimana data diproses, serta bagaimana sistem dapat dikembangkan ketika kebutuhan dan jumlah pengguna meningkat.

Dengan demikian, software architecture dapat dianggap sebagai blueprint atau cetak biru teknis yang menjadi dasar dalam membangun dan mengembangkan sebuah sistem perangkat lunak.

Rancangan yang tepat dapat membantu sistem menjadi lebih terstruktur, mudah dipelihara, dan lebih siap menghadapi perubahan kebutuhan di masa mendatang.

Mengapa Software Architecture Penting?

Software architecture menjadi semakin penting ketika sistem mulai memiliki kompleksitas tinggi. Tanpa rancangan arsitektur yang baik, aplikasi dapat tetap berjalan, tetapi semakin sulit dikembangkan dan dipelihara. Beberapa alasan mengapa software architecture penting antara lain sebagai berikut.

1. Membantu Mengelola Kompleksitas

Aplikasi modern dapat terdiri dari banyak komponen yang saling berhubungan. Arsitektur membantu membagi sistem menjadi bagian-bagian yang lebih mudah dipahami dan dikelola.

Sebagai contoh, fitur pembayaran tidak harus bercampur langsung dengan kode untuk mengelola katalog produk. Pemisahan tersebut membuat masing-masing bagian memiliki tanggung jawab yang lebih jelas.

2. Memudahkan Pengembangan Sistem

Arsitektur yang terstruktur membuat developer lebih mudah memahami lokasi dan fungsi setiap komponen.

Ketika ingin menambahkan fitur baru, tim dapat mengetahui bagian sistem mana yang perlu diperbarui tanpa harus memahami seluruh kode aplikasi dari awal.

3. Mendukung Skalabilitas

Aplikasi yang awalnya hanya digunakan oleh ratusan pengguna mungkin suatu saat harus menangani jutaan request.

Software architecture membantu menentukan apakah sistem dapat ditingkatkan kapasitasnya secara horizontal maupun vertikal, serta bagian mana yang perlu diskalakan terlebih dahulu.

4. Meningkatkan Maintainability

Sistem yang memiliki pemisahan tanggung jawab dengan baik biasanya lebih mudah dipelihara.

Ketika terjadi perubahan atau bug pada satu komponen, dampaknya dapat dibatasi sehingga tidak selalu mengharuskan perubahan besar pada bagian sistem lainnya.

5. Membantu Meningkatkan Keamanan

Keamanan juga merupakan bagian dari keputusan arsitektur. Contohnya, sistem dapat dirancang dengan memisahkan authentication service, database, API gateway, dan komponen internal sehingga akses terhadap data penting dapat dikontrol dengan lebih baik.

6. Mendukung Reliability

Arsitektur dapat menentukan bagaimana sistem menghadapi kegagalan. Misalnya, sebuah layanan dapat dibuat redundant sehingga ketika salah satu instance mengalami masalah, instance lainnya masih dapat melayani request.

7. Mempermudah Kolaborasi Tim

Pada proyek besar, banyak developer dapat bekerja pada bagian sistem yang berbeda. Arsitektur yang jelas membantu tim memahami batas tanggung jawab masing-masing komponen sehingga pekerjaan dapat dilakukan secara lebih terorganisasi.

Komponen Utama Software Architecture

Software architecture dapat memiliki bentuk yang berbeda tergantung kebutuhan sistem. Namun, beberapa komponen umum biasanya perlu diperhatikan.

1. Components

Components merupakan bagian utama yang menjalankan tanggung jawab tertentu dalam sistem. Contohnya:

  • user service;
  • payment service;
  • order service;
  • authentication service;
  • database;
  • message broker;
  • frontend application.

Setiap komponen idealnya memiliki tanggung jawab yang jelas.

2. Relationships

Komponen dalam sistem tidak berdiri sendiri. Mereka perlu berkomunikasi dan bertukar data. Architecture menjelaskan hubungan tersebut, misalnya:

  • Frontend → API → Application Service → Database.
  • Order Service → Message Broker → Notification Service.

3. Interfaces

Interface menentukan bagaimana suatu komponen dapat berinteraksi dengan komponen lainnya. Dalam aplikasi modern, interface dapat berupa:

  • REST API;
  • GraphQL;
  • gRPC;
  • event;
  • message queue;
  • atau protokol komunikasi lainnya.

4. Data

Arsitektur juga perlu mempertimbangkan bagaimana data disimpan, diproses, dan dipindahkan. Hal yang dapat dipertimbangkan meliputi:

  • jenis database;
  • struktur data;
  • konsistensi data;
  • caching;
  • data replication;
  • backup;
  • dan mekanisme sinkronisasi.

5. Infrastructure

Infrastructure mencakup lingkungan tempat aplikasi berjalan. Contohnya:

  • server;
  • container;
  • virtual machine;
  • cloud infrastructure;
  • load balancer;
  • network;
  • storage;
  • dan sistem monitoring.

6. Architectural Constraints

Setiap sistem memiliki batasan tertentu. Batasan tersebut dapat berasal dari kebutuhan bisnis, teknologi, regulasi, anggaran, maupun infrastruktur. Misalnya, sebuah aplikasi harus:

  • memenuhi persyaratan keamanan tertentu;
  • berjalan pada cloud tertentu;
  • mendukung jumlah pengguna tertentu;
  • menggunakan teknologi yang sudah tersedia;
  • atau memiliki batas biaya operasional.

Batasan tersebut dapat memengaruhi keputusan arsitektur.

Prinsip Penting dalam Software Architecture

Membangun arsitektur perangkat lunak bukan hanya memilih teknologi. Ada beberapa prinsip yang dapat digunakan sebagai dasar dalam membuat keputusan arsitektur.

1. Separation of Concerns

Setiap bagian sistem sebaiknya memiliki fokus dan tanggung jawab yang jelas. Misalnya, komponen yang menangani autentikasi tidak seharusnya sekaligus menangani seluruh proses pembayaran dan pengiriman email. Pemisahan tanggung jawab membuat sistem lebih mudah dipahami dan dipelihara.

2. Modularity

Sistem sebaiknya dibagi menjadi modul atau komponen yang memiliki batas tanggung jawab yang jelas. Modularitas membantu tim melakukan perubahan pada bagian tertentu tanpa selalu memengaruhi seluruh sistem.

3. Loose Coupling

Komponen sebaiknya tidak terlalu bergantung secara langsung satu sama lain. Semakin erat ketergantungan antar-komponen, semakin besar kemungkinan perubahan pada satu bagian menyebabkan masalah pada bagian lainnya.

4. High Cohesion

Sebuah komponen sebaiknya memiliki fungsi-fungsi yang masih berkaitan erat dengan tanggung jawab utamanya. Dengan begitu, struktur sistem menjadi lebih terorganisasi.

5. Scalability

Arsitektur perlu mempertimbangkan bagaimana sistem menangani peningkatan jumlah pengguna, request, data, atau transaksi.

6. Reliability

Sistem perlu dirancang agar dapat tetap bekerja atau pulih dengan baik ketika terjadi kegagalan pada sebagian komponennya.

7. Security by Design

Keamanan sebaiknya dipertimbangkan sejak tahap perancangan, bukan hanya setelah aplikasi selesai dibuat.

8. Observability

Sistem modern juga perlu memiliki kemampuan untuk diamati melalui log, metrics, traces, dan mekanisme monitoring lainnya. Observability membantu tim memahami kondisi sistem dan menemukan sumber masalah ketika terjadi gangguan.

Jenis-Jenis Software Architecture

Tidak ada satu jenis arsitektur yang cocok untuk seluruh aplikasi. Pilihan architecture bergantung pada kebutuhan, skala, kompleksitas, kemampuan tim, dan berbagai constraint lainnya. Berikut beberapa pendekatan software architecture yang umum digunakan.

1. Layered Architecture

Layered architecture membagi aplikasi menjadi beberapa lapisan berdasarkan tanggung jawab. Contoh sederhana:

Presentation Layer
        ↓
Business Logic Layer
        ↓
Data Access Layer
        ↓
Database

Setiap layer memiliki fungsi tertentu.

Layer Fungsi
Presentation Menangani tampilan dan interaksi pengguna
Business Logic Menjalankan aturan bisnis
Data Access Mengelola akses terhadap data
Database Menyimpan data

2. Client-Server Architecture

Pada client-server architecture, sistem dibagi menjadi client dan server. Client bertanggung jawab menyediakan antarmuka atau mengirim request, sedangkan server menangani pemrosesan dan penyediaan data.

Contoh sederhananya adalah aplikasi mobile yang berkomunikasi dengan backend melalui API.

Mobile App
     ↓
   API
     ↓
Backend Server
     ↓
 Database

3. Monolithic Architecture

Dalam arsitektur monolithic, berbagai fungsi aplikasi biasanya dikemas sebagai satu kesatuan aplikasi. Misalnya, satu aplikasi menangani:

  • authentication;
  • product;
  • order;
  • payment;
  • reporting.

Keuntungan monolith adalah struktur awalnya relatif sederhana dan deployment dapat lebih mudah. Namun, ketika aplikasi berkembang sangat besar, codebase dan proses deployment dapat menjadi semakin kompleks.

4. Microservices Architecture

Microservices memecah aplikasi menjadi sejumlah service yang relatif independen. Contohnya:

             ┌─ Product Service
             │
Client → API Gateway ─ Order Service
             │
             ├─ Payment Service
             │
             └─ User Service

Setiap service menangani domain atau tanggung jawab tertentu.

Aspek Monolith Microservices
Struktur Satu aplikasi utama Banyak service
Deployment Umumnya sebagai satu unit Service dapat dideploy secara independen
Kompleksitas awal Lebih sederhana Lebih tinggi
Skalabilitas Dapat dilakukan, tetapi bisa kurang granular Dapat dilakukan per service
Operasional Relatif sederhana Membutuhkan pengelolaan distributed system
Komunikasi Banyak komunikasi internal Melibatkan komunikasi antarlayanan

Microservices dapat memberikan fleksibilitas, tetapi juga memperkenalkan kompleksitas seperti service discovery, distributed tracing, network failure, observability, dan deployment banyak service. Karena itu, microservices bukan otomatis pilihan yang tepat untuk setiap aplikasi.

5. Event-Driven Architecture

Event-driven architecture menggunakan event sebagai mekanisme penting untuk menghubungkan komponen sistem. Sebagai contoh:

Order Service
      ↓
  Order Created
      ↓
 Message Broker
   ↙       ↘
Email     Inventory
Service     Service

Ketika order dibuat, sistem menghasilkan event tertentu. Komponen lain dapat menerima event tersebut dan menjalankan proses masing-masing.

Pendekatan ini dapat membantu membangun sistem yang lebih loosely coupled dan cocok untuk workflow yang membutuhkan komunikasi asynchronous.

6. Serverless Architecture

Serverless architecture menggunakan layanan cloud yang memungkinkan developer menjalankan fungsi atau workload tanpa mengelola server secara langsung pada level infrastruktur. Contohnya adalah function yang dijalankan ketika:

  • API menerima request;
  • file di-upload;
  • event tertentu terjadi;
  • atau proses terjadwal berjalan.

Serverless dapat membantu mengurangi beban pengelolaan infrastruktur, tetapi tetap memiliki pertimbangan seperti vendor dependency, cold start pada skenario tertentu, observability, dan desain workload.

7. Hexagonal Architecture

Hexagonal architecture atau Ports and Adapters memisahkan core business logic dari detail eksternal. Secara sederhana:

        Database
           ↑
Adapter → Port
           ↓
     Business Logic
           ↑
Adapter ← Port
           ↓
      External API

Business logic berada di bagian inti, sedangkan database, API, framework, atau sistem eksternal berada di luar. Tujuannya adalah membuat core aplikasi tidak terlalu bergantung pada detail teknologi tertentu.

8. Clean Architecture

Clean Architecture mengorganisasi sistem dengan menempatkan business rules pada bagian yang lebih inti dan menjaga agar detail teknis berada di bagian luar.

Salah satu prinsip pentingnya adalah dependency rule, yaitu ketergantungan seharusnya mengarah ke bagian yang lebih inti.

Pendekatan ini sering digunakan untuk membuat aplikasi lebih mudah diuji, dipelihara, dan dikembangkan dalam jangka panjang.

Perbedaan Software Architecture dan Software Design

Software architecture dan software design sering dianggap sama karena keduanya membahas bagaimana software dibangun. Namun, keduanya memiliki fokus yang berbeda.

Aspek Software Architecture Software Design
Fokus Struktur sistem secara keseluruhan Detail implementasi komponen
Level Tingkat tinggi Lebih detail
Membahas Service, database, komunikasi, deployment Class, function, module, algorithm
Dampak perubahan Biasanya besar Lebih lokal
Contoh Monolith atau microservices Design pattern, class structure

Software Architecture vs Framework

Framework juga berbeda dari software architecture. Framework merupakan fondasi atau kumpulan tools, library, aturan, dan mekanisme yang membantu developer membangun aplikasi. Contohnya:

  • Laravel;
  • Django;
  • Spring;
  • .NET;
  • React;
  • Angular.

Sementara itu, architecture menentukan bagaimana berbagai komponen aplikasi disusun dan berinteraksi.

Satu framework dapat digunakan untuk berbagai pendekatan arsitektur. Sebaliknya, sebuah architecture dapat diimplementasikan menggunakan berbagai framework.

Bagaimana Cara Memilih Software Architecture?

Pemilihan arsitektur sebaiknya tidak dilakukan hanya karena sebuah pendekatan sedang populer. Beberapa faktor yang perlu dipertimbangkan adalah:

  • Kebutuhan Bisnis

Pahami terlebih dahulu masalah yang ingin diselesaikan. Aplikasi internal dengan pengguna terbatas tentu memiliki kebutuhan yang berbeda dengan platform digital yang melayani jutaan pengguna.

  • Kompleksitas Sistem

Semakin kompleks domain dan workflow bisnis, semakin besar kebutuhan untuk memisahkan tanggung jawab komponen secara jelas.

  • Jumlah Pengguna dan Traffic

Perkirakan jumlah pengguna, request, transaksi, dan pertumbuhan traffic. Data tersebut membantu menentukan kebutuhan scalability.

  • Kemampuan Tim

Arsitektur yang sangat kompleks membutuhkan tim yang memiliki kemampuan untuk mengelolanya. Memilih architecture yang jauh lebih kompleks daripada kemampuan operasional tim dapat menimbulkan masalah baru.

  • Kebutuhan Availability

Jika aplikasi harus tersedia hampir sepanjang waktu, architecture perlu mempertimbangkan redundancy, failover, health check, monitoring, dan recovery.

  • Kebutuhan Keamanan

Aplikasi yang memproses data sensitif membutuhkan pertimbangan security yang lebih ketat dibandingkan aplikasi sederhana.

  • Biaya

Setiap architectural decision dapat memiliki konsekuensi terhadap biaya infrastruktur, development, maintenance, dan operasional.

  • Kebutuhan Integrasi

Jika aplikasi harus berkomunikasi dengan banyak sistem eksternal, desain API, messaging, event, dan integration layer perlu dipertimbangkan sejak awal.

Tahapan Merancang Software Architecture

Perancangan architecture dapat dilakukan secara bertahap agar keputusan yang diambil memiliki dasar yang jelas.

1. Pahami Requirements

Mulailah dengan memahami functional requirements dan non-functional requirements.

Functional requirements menjelaskan apa yang harus dilakukan sistem, sedangkan non-functional requirements menjelaskan karakteristik yang perlu dimiliki sistem. Contohnya:

  • performance;
  • scalability;
  • availability;
  • security;
  • reliability;
  • maintainability.

2. Identifikasi Domain dan Komponen

Tentukan bagian utama sistem berdasarkan tanggung jawab dan domain bisnis. Misalnya aplikasi E-commerce dapat memiliki:

  • user;
  • catalog;
  • cart;
  • order;
  • payment;
  • inventory.

3. Tentukan Pola Komunikasi

Tentukan bagaimana komponen berkomunikasi. Apakah menggunakan:

  • synchronous API;
  • asynchronous messaging;
  • event;
  • database;
  • atau kombinasi beberapa pendekatan?

4. Tentukan Penyimpanan Data

Pilih strategi penyimpanan berdasarkan kebutuhan. Tidak semua sistem harus menggunakan jenis database yang sama. Pertimbangan dapat mencakup struktur data, consistency, transaction, performance, scalability, dan pola akses.

5. Pertimbangkan Deployment

Arsitektur juga harus mempertimbangkan bagaimana aplikasi akan dijalankan. Misalnya menggunakan:

  • virtual machine;
  • container;
  • Kubernetes;
  • cloud platform;
  • serverless;
  • atau infrastruktur lainnya.

6. Dokumentasikan Keputusan

Architectural decision sebaiknya didokumentasikan agar tim memahami alasan di balik keputusan tersebut. Dokumentasi dapat berupa:

  • architecture diagram;
  • decision record;
  • system documentation;
  • API documentation;
  • dan deployment diagram.

Dokumentasi juga membantu tim baru memahami sistem dengan lebih cepat.

Contoh Software Architecture pada Aplikasi E-Commerce

Untuk memahami konsepnya secara lebih konkret, bayangkan sebuah aplikasi e-commerce. Struktur sederhananya dapat dibuat seperti berikut:

                    User
                     │
                     ▼
              Web / Mobile App
                     │
                     ▼
                API Gateway
                     │
       ┌─────────────┼─────────────┐
       ▼             ▼             ▼
   User Service  Product Service  Order Service
                                     │
                           ┌─────────┴─────────┐
                           ▼                   ▼
                    Payment Service      Inventory Service
                           │
                           ▼
                     Payment Provider

Pada desain tersebut, setiap komponen memiliki tanggung jawab yang berbeda.

User Service menangani pengguna, Product Service mengelola katalog, Order Service menangani transaksi, Payment Service berhubungan dengan proses pembayaran, sedangkan Inventory Service mengelola stok.

Namun, diagram tersebut baru merupakan gambaran tingkat tinggi. Implementasi sebenarnya masih membutuhkan keputusan mengenai database, authentication, authorization, API contract, caching, monitoring, deployment, error handling, dan berbagai aspek lainnya.

Tantangan dalam Software Architecture

Merancang architecture bukan berarti semua masalah akan hilang. Justru semakin kompleks sebuah sistem, semakin banyak trade-off yang harus dipertimbangkan. Beberapa tantangan yang umum antara lain:

  • Architectural Complexity

Arsitektur yang terlalu kompleks dapat meningkatkan beban pengembangan dan operasional.

  • Technical Debt

Keputusan yang awalnya terlihat praktis dapat menjadi technical debt ketika sistem terus berkembang.

  • Scalability

Sistem yang bekerja dengan baik pada skala kecil belum tentu bekerja dengan cara yang sama ketika traffic meningkat secara signifikan.

  • Distributed System Complexity

Sistem yang terdiri dari banyak service menghadapi masalah seperti network failure, latency, partial failure, dan konsistensi data.

  • Changing Requirements

Kebutuhan bisnis dapat berubah. Karena itu, architecture sebaiknya cukup fleksibel untuk beradaptasi tanpa harus selalu dibangun ulang dari awal.

  • Team Coordination

Semakin banyak komponen dan tim yang terlibat, semakin penting adanya standar, dokumentasi, interface, dan ownership yang jelas.

Apa Itu Architectural Decision?

Dalam software architecture terdapat istilah architectural decision, yaitu keputusan teknis penting yang memiliki dampak terhadap struktur atau karakteristik sistem. Contohnya:

  • memilih monolith dibandingkan microservices;
  • memilih relational database;
  • menggunakan message broker;
  • menggunakan API gateway;
  • menerapkan caching;
  • memilih synchronous atau asynchronous communication;
  • menggunakan cloud tertentu.

Keputusan tersebut sebaiknya tidak hanya mencatat apa yang dipilih, tetapi juga mengapa pilihan tersebut dibuat.

Hal ini penting karena kondisi sistem dapat berubah. Keputusan yang tepat pada tahap tertentu belum tentu tetap tepat beberapa tahun kemudian.

Hubungan Software Architecture dengan Non-Functional Requirements

Salah satu hal penting dalam software architecture adalah non-functional requirements. Kebutuhan seperti performance, security, scalability, availability, dan maintainability dapat memengaruhi architecture secara langsung.

Sebagai contoh, jika sistem membutuhkan availability yang tinggi, architecture mungkin membutuhkan redundancy dan failover. Jika sistem harus menangani traffic yang sangat besar, scalability menjadi salah satu pertimbangan utama.

Non-Functional Requirement Contoh Dampak pada Architecture
Performance Caching, database optimization, asynchronous processing
Scalability Load balancing, horizontal scaling
Availability Redundancy, failover, health check
Security Authentication, authorization, network segmentation
Reliability Retry, timeout, circuit breaker, recovery
Maintainability Modularitas dan separation of concerns
Observability Logging, metrics, tracing

Dengan demikian, architecture bukan hanya mengenai bagaimana sistem terlihat dalam diagram, tetapi juga bagaimana sistem memenuhi kebutuhan kualitas tertentu.

Kesimpulan

Software architecture adalah rancangan tingkat tinggi yang mengatur struktur, hubungan, dan cara kerja berbagai komponen dalam sebuah sistem perangkat lunak. Arsitektur yang tepat dapat membantu aplikasi menjadi lebih mudah dikembangkan, dipelihara, aman, andal, dan mampu berkembang sesuai kebutuhan.

Beberapa pendekatan yang umum digunakan antara lain layered architecture, monolithic, microservices, event-driven, serverless, dan Clean Architecture. Setiap pendekatan memiliki kelebihan dan trade-off, sehingga pemilihannya perlu disesuaikan dengan kebutuhan sistem.

Untuk mendapatkan informasi seputar teknologi digital, website, cloud, hosting, dan perkembangan teknologi terkini, Blog Hosteko dapat menjadi salah satu referensi.

5/5 - (1 vote)
Fitri Ana

Recent Posts

Perbedaan GitLab dan GitHub, Kenali Fitur dan Kegunaannya Sebelum Memilih

Dalam pengembangan software modern, Git menjadi salah satu teknologi penting untuk mengelola perubahan kode. Dengan…

3 hours ago

Apa Itu Computer Vision? Begini Cara AI Memahami Gambar dan Video

Komputer selama ini dikenal mampu mengolah angka, teks, dan berbagai jenis data secara cepat. Namun,…

21 hours ago

Google Gemini Bisa Nonaktifkan Watermark, Ini Penjelasannya

Google kini menyediakan pengaturan yang memungkinkan pengguna mengaktifkan atau menonaktifkan watermark yang terlihat pada media…

21 hours ago

Google Gemini dan Watermark AI: Mengenal SynthID

Perkembangan fitur generative AI membuat Google Gemini tidak hanya digunakan untuk menghasilkan teks, tetapi juga…

24 hours ago

Function as a Service (FaaS): Cara Baru Menjalankan Aplikasi Tanpa Kelola Server

Perkembangan cloud computing membuat proses membangun dan menjalankan aplikasi menjadi semakin fleksibel. Jika sebelumnya developer…

1 day ago

Kenali Programmatic SEO, Rahasia Mengoptimalkan SEO dalam Skala Besar

Membuat halaman website satu per satu bisa memakan banyak waktu, terutama bagi bisnis yang memiliki…

1 day ago