Membangun aplikasi untuk industri perbankan dan korporasi besar tidak sama dengan membangun aplikasi startup biasa. Pada sistem enterprise, fokus utama bukan hanya “fitur berjalan”, tetapi juga keamanan, reliabilitas, auditability, scalability, maintainability, compliance, dan performance.
Di lingkungan perbankan, satu kesalahan transaksi dapat menyebabkan kerugian finansial, audit finding, bahkan risiko hukum. Oleh karena itu, membangun aplikasi berbasis Spring Boot untuk enterprise harus menggunakan pendekatan arsitektur yang matang, standar coding yang ketat, dan infrastruktur yang siap produksi.
1. Apa Itu Aplikasi Enterprise untuk Bank dan Korporasi?
Aplikasi enterprise adalah aplikasi dengan skala besar yang digunakan untuk menjalankan proses bisnis penting perusahaan.
Contoh:
- Core Banking Supporting System
- Treasury Management
- Loan Management System
- Payment Gateway
- Enterprise Asset Management
- HRIS Enterprise
- Approval Workflow System
- ERP Integration
- Risk Management System
Karakteristik utama sistem enterprise:
Reliability
Sistem harus tetap berjalan 24/7.
Misalnya:
- transaksi tetap diproses
- approval tetap tersedia
- login tetap aktif
Target availability biasanya:
99.9% — 99.999% uptime
Security
Bank sangat sensitif terhadap keamanan data.
Harus memiliki:
- encryption
- audit trail
- access control
- MFA
- API protection
- logging
Auditability
Semua aktivitas user harus tercatat.
Contoh:
USER LOGIN
USER UPDATE TENOR
APPROVAL REJECT
ROLE CHANGED
PASSWORD RESET
Scalability
Harus mampu menangani jutaan request.
Contoh:
10.000 concurrent user
100 juta row data
ribuan transaksi per detik
2. Memilih Arsitektur yang Tepat
Kesalahan terbesar developer enterprise adalah langsung membuat CRUD tanpa architecture.
Sebelum coding, tentukan architecture.
Ada dua pendekatan utama:
Modular Monolith
Cocok untuk:
- internal banking system
- approval system
- HRIS
- enterprise asset
Kelebihan:
- lebih mudah maintain
- deployment sederhana
- lebih cepat develop
- transactional consistency tinggi
Struktur:
User Module
Approval Module
Notification Module
Audit Module
Asset Module
Microservice
Cocok untuk:
- payment
- high throughput
- distributed enterprise system
Contoh:
auth-service
transaction-service
approval-service
notification-service
audit-service
report-service
Namun microservice mahal:
- infra mahal
- monitoring kompleks
- tracing sulit
- deployment rumit
Untuk mayoritas korporasi:
Modular Monolith terlebih dahulu.
3. Arsitektur Spring Boot Enterprise
Gunakan Clean Architecture.
Struktur ideal:
src/main/java/com/company
├── config
├── controller
├── service
├── repository
├── entity
├── dto
├── mapper
├── security
├── audit
├── exception
├── scheduler
├── integration
├── kafka
├── notification
├── common
Penjelasan:
Controller
Tugas:
- menerima request
- validasi request
Jangan ada business logic.
Contoh buruk:
@PostMapping
public ResponseEntity<?> save() {
// query database di sini ❌
// business logic ❌
}
Benar:
@PostMapping
public ResponseEntity<?> save(
@RequestBody RequestDto dto) {
return ResponseEntity.ok(
service.save(dto)
);
}
Service Layer
Berisi:
- business logic
- orchestration
Contoh:
@Transactional
public ApprovalResponse approve(
Long id) {
Asset asset =
repository.findById(id)
.orElseThrow();
asset.setStatus(APPROVED);
auditService.log(
"APPROVAL SUCCESS"
);
notificationService.send();
return mapper.toResponse(asset);
}
Repository Layer
Hanya akses database.
Contoh:
@Repository
public interface UserRepository
extends JpaRepository<User, Long> {
Optional<User>
findByUsername(String username);
}
4. Security Standard Perbankan
Security adalah prioritas nomor satu.
Authentication
Gunakan:
- JWT
- OAuth2
- SSO
- LDAP/AD integration
Dependency:
spring-security
jjwt
oauth2-resource-server
Password Hashing
Jangan pernah:
password.equals()
Gunakan:
BCryptPasswordEncoder
Contoh:
@Bean
PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
Role Based Access Control
Gunakan permission matrix.
Contoh tabel:
| Role | Permission |
|---|---|
| Admin | ALL |
| Finance | VIEW_APPROVAL |
| Manager | APPROVE |
| User | VIEW |
Entity:
User
Role
Permission
RolePermission
Multi Factor Authentication
Implementasi:
Password
+
OTP Email
atau
OTP SMS
atau
Authenticator App
API Rate Limiting
Gunakan:
Bucket4J
Redis
Mencegah:
- brute force
- DDOS
- credential stuffing
Encryption
Sensitive data:
account_number
national_id
salary
token
Gunakan:
AES-256
RSA
Jangan simpan plaintext.
5. Database Enterprise Design
Bank tidak boleh asal desain tabel.
Gunakan Migration
Jangan manual query production.
Gunakan:
Flyway
Struktur:
V1__init.sql
V2__add_role.sql
V3__alter_user.sql
Keuntungan:
- versioning database
- rollback mudah
- audit schema
Connection Pool
Gunakan:
HikariCP
Config:
spring:
datasource:
hikari:
maximum-pool-size: 30
Indexing
Buruk:
SELECT *
FROM users
WHERE username='isma'
tanpa index.
Benar:
CREATE INDEX idx_username
ON users(username);
Soft Delete
Jangan delete data penting.
Salah:
DELETE FROM transaction
Benar:
status=DELETED
deleted_at
deleted_by
6. Transaction Management
Spring Boot mendukung:
@Transactional
Contoh:
@Transactional
public void transfer() {
debit();
credit();
audit();
}
Jika gagal:
rollback otomatis.
Konsep penting:
ACID
- Atomicity
- Consistency
- Isolation
- Durability
Bank wajib memahami ini.
Idempotency
Jangan sampai transaksi double.
Contoh buruk:
User klik 2x:
Transfer Rp10 juta
jadi Rp20 juta
Gunakan:
request_id
transaction_id
7. Logging dan Audit Trail
Gunakan:
SLF4J
Logback
ELK
Format log:
timestamp
request_id
username
ip
module
action
status
Contoh:
2026-05-24
isma
LOGIN SUCCESS
192.168.1.1
Audit table:
audit_log
kolom:
id
action
before_value
after_value
user_id
created_at
0 komentar:
Posting Komentar