brunch

샤리아 뱅킹 PLS 프로그램 설계

Backend process

by 김은생 Samuel

샤리아 뱅킹 시스템에서 Profit Loss Sharing(PLS, 수익-손실 분배)은 이슬람 금융의 핵심 원칙 중 하나로, 무다라바(Mudaraba)와 무샤라카(Musharaka)와 같은 계약 구조에서 사용됩니다. 이를 처리하기 위한 백엔드 프로그램을 설계할 때는 다음과 같은 요소를 고려해야 합니다:

계약 관리: PLS 계약의 생성, 수정, 종료를 관리합니다.

수익-손실 계산: 투자 결과에 따른 수익 또는 손실을 계산합니다.

분배 비율 관리: 사전에 합의된 비율에 따라 수익 또는 손실을 분배합니다.

거래 기록: 모든 거래와 분배 내역을 기록합니다.

샤리아 규정 준수: 모든 계산과 분배가 샤리아 규정을 준수하는지 확인합니다.

아래는 이러한 요구사항을 반영한 PLS 처리 프로그램의 설계 예시입니다.

1. 시스템 아키텍처

프레임워크: Spring Boot (Java) 또는 Django (Python)

데이터베이스: MySQL, PostgreSQL (트랜잭션 관리 및 데이터 무결성 보장)

메시지 큐: RabbitMQ 또는 Kafka (비동기 작업 처리)

API: RESTful API 또는 GraphQL (클라이언트와의 통신)

2. 주요 모듈

2.1. 계약 관리 모듈 (Contract Management)

기능: PLS 계약 생성, 수정, 종료 계약 조건(분배 비율, 투자 기간 등) 저장 계약 상태 관리 (활성, 종료, 중단 등)

데이터 구조:
CREATE TABLE pls_contracts ( id SERIAL PRIMARY KEY, customer_id INT NOT NULL, bank_id INT NOT NULL, contract_type ENUM('Mudaraba', 'Musharaka') NOT NULL, profit_sharing_ratio DECIMAL(5, 2) NOT NULL, start_date DATE NOT NULL, end_date DATE, status ENUM('active', 'terminated', 'completed') DEFAULT 'active', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );

2.2. 수익-손실 계산 모듈 (Profit Loss Calculation)

기능: 투자 결과에 따른 수익 또는 손실 계산 외부 데이터(시장 데이터, 환율 등)와 연동하여 계산 계산 결과를 데이터베이스에 저장

데이터 구조:
CREATE TABLE pls_calculations ( id SERIAL PRIMARY KEY, contract_id INT NOT NULL, period_start DATE NOT NULL, period_end DATE NOT NULL, total_profit DECIMAL(15, 2), total_loss DECIMAL(15, 2), net_result DECIMAL(15, 2), calculated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (contract_id) REFERENCES pls_contracts(id) );

2.3. 분배 비율 관리 모듈 (Distribution Management)

기능: 사전에 합의된 비율에 따라 수익 또는 손실 분배 분배 결과를 고객 및 은행 계좌에 반영 분배 내역 기록

데이터 구조:
CREATE TABLE pls_distributions ( id SERIAL PRIMARY KEY, calculation_id INT NOT NULL, customer_share DECIMAL(15, 2), bank_share DECIMAL(15, 2), distributed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (calculation_id) REFERENCES pls_calculations(id) );

2.4. 거래 기록 모듈 (Transaction Logging)

기능: 모든 PLS 관련 거래 내역 기록 감사 및 보고를 위한 데이터 제공

데이터 구조:
CREATE TABLE pls_transactions ( id SERIAL PRIMARY KEY, contract_id INT NOT NULL, transaction_type ENUM('profit_distribution', 'loss_distribution', 'contract_settlement'), amount DECIMAL(15, 2), transaction_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (contract_id) REFERENCES pls_contracts(id) );

2.5. 샤리아 규정 준수 모듈 (Sharia Compliance)

기능: 모든 계산과 분배가 샤리아 규정을 준수하는지 확인 샤리아 위원회와의 연동을 통한 승인 프로세스

데이터 구조:
CREATE TABLE sharia_approvals ( id SERIAL PRIMARY KEY, contract_id INT NOT NULL, approval_status ENUM('pending', 'approved', 'rejected'), approved_by INT, approved_at TIMESTAMP, FOREIGN KEY (contract_id) REFERENCES pls_contracts(id) );

3. 플로우 차트

계약 생성: 고객과 은행이 PLS 계약을 체결. 계약 조건을 데이터베이스에 저장.

수익-손실 계산: 투자 결과를 기반으로 수익 또는 손실 계산. 계산 결과를 데이터베이스에 저장.

분배 실행: 사전 합의된 비율에 따라 수익 또는 손실 분배. 분배 결과를 고객 및 은행 계좌에 반영.

거래 기록: 모든 거래 내역을 데이터베이스에 기록.

샤리아 규정 준수 확인: 샤리아 위원회의 승인을 받아 거래 완료.

4. API 엔드포인트 예시

POST /api/pls/contracts: 새로운 PLS 계약 생성

PUT /api/pls/contracts/{id}: 기존 계약 수정

POST /api/pls/calculations: 수익-손실 계산 실행

POST /api/pls/distributions: 분배 실행

GET /api/pls/transactions: 거래 내역 조회

5. 보안 및 규제 준수

데이터 암호화 (AES-256 등)

사용자 인증 및 권한 관리 (OAuth 2.0, JWT)

감사 로그 기록

샤리아 규정 및 현지 금융 규제 준수

이 설계는 샤리아 뱅킹 시스템에서 PLS를 처리하기 위한 기본적인 구조를 제공합니다. 실제 구현 시에는 추가적인 요구사항과 규제를 반영하여 확장해야 합니다.



아래 설계안은 이슬람 금융의 무다라바(Mudarabah), 무샤라카(Musharakah) 등과 같은 Profit & Loss Sharing(PLS) 구조를 코어뱅킹 백엔드 시스템에서 처리하기 위한 개략적인 설계 예시입니다. 실제 구현 시 은행의 비즈니스 정책, 회계 기준, 샤리아 위원회 규정 등에 따라 구체적인 로직이나 데이터 구조가 달라질 수 있습니다.

1. 전체 아키텍처 개요

┌───────────────────┐
│ Frontend/채널 │ (인터넷뱅킹, 모바일앱, 지점, ...) └─────────┬─────────┘


┌─────────────────────────────┐
│ Core Banking System (Backend) │
│------------------------------------------- │
│ 1) 고객/계좌/거래 모듈 │
│ 2) PLS 처리 모듈 (본 설계 대상) │
│ 3) 회계/GL/보고 모듈 │
│ 4) 샤리아 규정 준수/리스크 관리 모듈 │
│ ... │ └─────────────────────────────┘
│ (결과 반영, 계좌 업데이트)

┌──────────────────────────────┐
│ Data Warehouse / MIS / Reporting │ └──────────────────────────────┘

PLS 처리 모듈은 은행의 투자 계좌(무다라바, 무샤라카 등) 혹은 수익공유 상품에 대해, 은행이 실제 운용한 투자 또는 사업에서 발생한 이익/손실을 고객과 공유하여 배분하는 기능을 수행합니다.

이 모듈은 회계/GL 모듈과의 연동이 필수적이며, 이익·손실 계산 결과는 각 고객 계좌(투자 계좌)와 은행의 내부 계정(운용자 지분) 등에 반영됩니다.

2. 주요 기능 및 모듈 구조

PLS 처리 프로그램(모듈)을 구성하는 핵심 요소는 다음과 같습니다.

투자/자산 운용 정보 수집 실제 투자나 사업(예: 프로젝트 파이낸싱, 무라바하 거래 등)에서 발생한 수익·비용 정보를 정산용으로 취합 회계 모듈에서 산출된 투자 포트폴리오 별 손익 데이터 수신

계좌/상품별 배분 기준 관리 무다라바(Mudarabah): 은행(운용자)와 투자자(고객) 간의 이익분배 비율, 손실은 원칙적으로 투자자가 부담 무샤라카(Musharakah): 공동 출자 지분율에 따른 이익·손실 배분 매 상품(또는 계약)별로 약정된 이익배분율, 손실처리 방식 정의

계좌 잔액/투자 기간 계산 고객별로 실제 투자에 참여한 일자별 잔액, 운용 기간 등을 고려하여 “가중치” 산정 일/월/분기 등 특정 주기의 잔액 계산 로직 예: 일별 평균 잔액(ADF; Average Daily Balance), 가중 잔액(Weighted Balance) 등

이익·손실 산출 및 배분 로직 (운용 수익 - 운용 비용) = 순이익(또는 순손실) 배분 대상 이익 = (순이익 - 관리수수료 등)* 고객(투자자) 몫 vs 은행(운용자) 몫 계산 손실 발생 시 무다라바 계약의 경우 투자자(고객)가 손실 부담 등

배분 결과 정산 및 계좌 반영 매 주기별(일/월/분기/연)로 배분 금액 확정 후, 각 투자계좌에 반영(입금 또는 원금 축소 등) 샤리아 규정상 이자 명목이 아닌 **“이익금”**으로 표시 GL(총계정원장)에 자동 분개 처리: 고객 계좌(부채) 증가/감소 은행 자기자본(또는 별도 내부 계정) 증가/감소

샤리아 준수 및 보고 샤리아 감사(위원회)에서 승인한 계산 방식 준수 배분율, 수수료, 원금 보장 여부 등 점검 배분 내역에 대한 보고서(고객용, 내부 감사용, 외부 감사용) 제공

예외/에러 처리 배분 과정 중 일부 계좌 정보 불일치, 중도해지 발생, 계약조건 변경 등 예외 상황 처리 로그 및 재처리(rollback & re-run) 시나리오 마련

3. 프로세스 플로우 (예시: 월 단위 배분)

아래는 월별 결산 주기(월말 기준)로 PLS를 처리하는 예시 프로세스입니다.

(1) 손익 정보 확정
└─ (a) 회계모듈에서 해당 월의 투자/운용 손익 데이터를 취합
└─ (b) 관리수수료, 프로젝트 비용 등 분류

(2) 계좌 데이터 수집
└─ (a) 투자계좌별 기간 중 잔액, 입출금 기록
└─ (b) 일별 평균잔액 or 가중치 산정

(3) 이익/손실 배분 계산
└─ (a) PLS 모듈에서 (1)의 손익 vs (2)의 가중치 데이터 매칭
└─ (b) 계약별 배분율, 수수료율 등을 적용하여 고객별 배분금 확정
└─ (c) 은행 몫(운용자 지분), 고객 몫(투자자 지분) 분리

(4) 배분 결과 반영
└─ (a) 고객 계좌에 “이익금” 입금 or “원금 차감” 반영(손실 시)
└─ (b) GL 전표 발행(회계 분개) → 재무제표 반영

(5) 보고 및 샤리아 감사
└─ (a) 고객별 거래명세서, 배분 명세서 생성
└─ (b) 샤리아 위원회/내부감사보고서 생성
└─ (c) 외부 보고(감독당국 등)

4. 데이터 모델 개략 예시

PLS 처리를 위해 최소한으로 필요한 핵심 테이블(또는 도메인 객체) 구조 예시입니다. (실제 DB에선 좀 더 세분화되거나, NoSQL 기반 구조가 될 수도 있음)

Investment_Asset(투자 자산 테이블)
asset_id: 자산 식별자 asset_type: 자산 유형(무라바하, 프로젝트 파이낸싱, 주식, 부동산 등) start_date, end_date: 투자/운용 시작, 종료일 expected_return: 예상 수익률(예측용, 실제 계산 시 참고) actual_profit_loss: 실제 확정된 손익(회계모듈 연계)

PLS_Product(PLS 상품/계약 테이블)
product_id: 상품 식별자 product_name: 예) 무다라바 1년 투자, 무샤라카 단기 펀드 등 profit_sharing_ratio: 고객 vs 은행 간 이익분배율(예: 70:30) loss_sharing_rule: 손실 발생 시 부담 방식(무다라바: 투자자 100%, 무샤라카: 지분 비율) fee_policy: 관리수수료, 성과보수 등 정책

PLS_Account(투자계좌 테이블)
account_id: 계좌번호 customer_id: 고객 식별자 product_id: 연결된 투자 상품 opening_balance: 초기 투자금 current_balance: 현재 잔액(원금 + 이익 재투자분 등) status: 활성/해지/중도해지 등

Daily_Balance(일별 잔액 테이블)
account_id date daily_balance: 해당 일자의 마감 잔액 weighted_factor: 배분 계산에 사용될 가중치(예: 일수를 기반으로)

PLS_Calculation_Log(배분 계산 이력 테이블)
calc_id: 배분 계산 Batch 식별자 calc_date: 배분 실행일(예: 매월 말일) product_id / account_id (옵션) profit_amount / loss_amount distributed_amount: 고객에게 배분된 최종 금액 bank_share: 은행 몫 status: 완료/오류 등

5. PLS 모듈 내부 구성

PLS 모듈(혹은 서브시스템) 내부를 좀 더 세분화하면 다음과 같은 컴포넌트로 나눌 수 있습니다.

Data Aggregator 투자 자산(Investment_Asset) 및 회계 시스템에서 확정된 손익 데이터를 수집 계좌 잔액·일수·가중치 정보(예: Daily_Balance) 모으기 예외 데이터(누락, 불일치) 체크

PLS Rule Engine 상품별/계약별 이익분배율, 손실 부담 규칙, 수수료 로직 내장 실제 손익 금액 × 가중치 × 분배율 등을 계산 특정 조건(조기상환, 중도해지 등)이 있으면 해당 규칙도 처리

Calculation Processor 배치(Batch) 또는 실시간(Real-time) 방식으로 배분 작업 실행 (1) 손익 합산 → (2) 배분 기준 적용 → (3) 고객별 배분액 산출 결과를 PLS_Calculation_Log 등에 기록

Posting & GL Integration 배분 결과를 토대로 고객 계좌(PLS_Account) 잔액 업데이트 GL(회계) 시스템에 전표 전송(“이익배분금” 등으로 반영) Exception(오류) 발생 시 Rollback & 재실행

Reporting & Audit 샤리아 감사/준수 보고서: 배분 과정과 결과의 적합성(이자 금지 등) 고객통지(Statement, SMS, Email 등) 내부감사용 로그(누가 언제 어떤 로직으로 계산했는지)

6. 주의사항 및 Best Practice

샤리아 적합성 계약 단계에서 이익분배율, 손실 책임을 명확히 설정하여 운영 이자성 요소(Interest)는 사용되지 않으며, “이익금” 개념으로 회계처리 AAOIFI(회계·감사 기구) 표준 등을 준수하면 국제적 일관성 확보

가중치(Weighted Average) 계산 고객이 중간에 입출금, 중도해지 등을 하는 경우, 해당 기간만큼 일할 계산 필요한 경우 월 평균, 일 단위 등 은행 정책에 따라 계산 방법 정의

리스크/손실 처리 무다라바 계좌에서 손실 발생 시 은행이 원금 보장 불가(샤리아 원칙) 적절한 리스크 관리 프로세스(심사, 모니터링)를 통해 손실 최소화

투명한 보고 고객이 배분 결과를 쉽게 이해하고 확인할 수 있도록 상세내역 제공 고객 이익과 은행 몫이 어떻게 계산되었는지 명시

배치 vs 실시간 처리 일반적으로 이익배분은 주기별(월, 분기, 연) 진행이 많음 일부 상품(예: 단기 펀드)은 리얼타임 정산이 필요할 수도 있으므로, 설계 시 유연성 확보

회계 기준 연동 IFRS, AAOIFI 등 회계 기준 차이가 있을 수 있음 무다라바/무샤라카 계좌를 은행의 부채로 처리할지 별도 투자계정으로 처리할지 등 내부 회계정책 준수

7. 요약

PLS 처리 프로그램은 코어뱅킹 백엔드에서 투자∙운용 손익과 계좌별 이익배분 규칙을 종합해 고객에게 이익 또는 손실을 안분하는 역할을 합니다.

주요 단계는 손익 데이터 수집 → 배분 기준(계약/상품) 적용 → 배분 금액 산출 → 계좌 반영(회계 처리) → 보고/감사 순서로 진행됩니다.

샤리아 규정에 따라 이자를 금지하고, 원금 보장이 되지 않는 구조를 정확히 구현해야 합니다.

데이터 모델은 투자 자산, PLS 상품, 고객 투자 계좌, 일별 잔액, 계산 로그 등을 포함하며, 정확한 회계 연동과 배분 이력 추적이 중요합니다.

정기(배치) 또는 실시간(특수 상품) 방식으로 운영할 수 있으며, 각 은행의 비즈니스 정책과 샤리아 위원회 승인을 통해 세부 로직이 결정됩니다.

위 설계안을 기반으로 구체적인 구현(프로그래밍, DB 스키마, API 설계 등)을 진행하면, 코어뱅킹 시스템 내에서 투자계좌의 이익·손실을 효과적으로 처리하고, 샤리아 compliant 한 금융 서비스를 제공할 수 있습니다.

keyword
작가의 이전글샤리아 뱅킹 기능 분해도