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

  1. 계약 관리: PLS 계약의 생성, 수정, 종료를 관리합니다.
  2. 수익-손실 계산: 투자 결과에 따른 수익 또는 손실을 계산합니다.
  3. 분배 비율 관리: 사전에 합의된 비율에 따라 수익 또는 손실을 분배합니다.
  4. 거래 기록: 모든 거래와 분배 내역을 기록합니다.
  5. 샤리아 규정 준수: 모든 계산과 분배가 샤리아 규정을 준수하는지 확인합니다.

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


1. 시스템 아키텍처

  • 프레임워크: Spring Boot (Java) 또는 Django (Python)
  • 데이터베이스: MySQL, PostgreSQL (트랜잭션 관리 및 데이터 무결성 보장)
  • 메시지 큐: RabbitMQ 또는 Kafka (비동기 작업 처리)
  • API: RESTful API 또는 GraphQL (클라이언트와의 통신)

2. 주요 모듈

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

  • 기능:
    • PLS 계약 생성, 수정, 종료
    • 계약 조건(분배 비율, 투자 기간 등) 저장
    • 계약 상태 관리 (활성, 종료, 중단 등)
  • 데이터 구조:
  • sql
    Copy
    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)

  • 기능:
    • 투자 결과에 따른 수익 또는 손실 계산
    • 외부 데이터(시장 데이터, 환율 등)와 연동하여 계산
    • 계산 결과를 데이터베이스에 저장
  • 데이터 구조:
  • sql
    Copy
    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)

  • 기능:
    • 사전에 합의된 비율에 따라 수익 또는 손실 분배
    • 분배 결과를 고객 및 은행 계좌에 반영
    • 분배 내역 기록
  • 데이터 구조:
  • sql
    Copy
    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 관련 거래 내역 기록
    • 감사 및 보고를 위한 데이터 제공
  • 데이터 구조:
  • sql
    Copy
    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)

  • 기능:
    • 모든 계산과 분배가 샤리아 규정을 준수하는지 확인
    • 샤리아 위원회와의 연동을 통한 승인 프로세스
  • 데이터 구조:
  • sql
    Copy
    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. 플로우 차트

  1. 계약 생성:
    • 고객과 은행이 PLS 계약을 체결.
    • 계약 조건을 데이터베이스에 저장.
  2. 수익-손실 계산:
    • 투자 결과를 기반으로 수익 또는 손실 계산.
    • 계산 결과를 데이터베이스에 저장.
  3. 분배 실행:
    • 사전 합의된 비율에 따라 수익 또는 손실 분배.
    • 분배 결과를 고객 및 은행 계좌에 반영.
  4. 거래 기록:
    • 모든 거래 내역을 데이터베이스에 기록.
  5. 샤리아 규정 준수 확인:
    • 샤리아 위원회의 승인을 받아 거래 완료.

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 처리 프로그램(모듈)을 구성하는 핵심 요소는 다음과 같습니다.

  1. 투자/자산 운용 정보 수집
    • 실제 투자나 사업(예: 프로젝트 파이낸싱, 무라바하 거래 등)에서 발생한 수익·비용 정보를 정산용으로 취합
    • 회계 모듈에서 산출된 투자 포트폴리오 별 손익 데이터 수신
  2. 계좌/상품별 배분 기준 관리
    • 무다라바(Mudarabah): 은행(운용자)와 투자자(고객) 간의 이익분배 비율, 손실은 원칙적으로 투자자가 부담
    • 무샤라카(Musharakah): 공동 출자 지분율에 따른 이익·손실 배분
    • 매 상품(또는 계약)별로 약정된 이익배분율, 손실처리 방식 정의
  3. 계좌 잔액/투자 기간 계산
    • 고객별로 실제 투자에 참여한 일자별 잔액, 운용 기간 등을 고려하여 “가중치” 산정
    • 일/월/분기 등 특정 주기의 잔액 계산 로직
    • 예: 일별 평균 잔액(ADF; Average Daily Balance), 가중 잔액(Weighted Balance) 등
  4. 이익·손실 산출 및 배분 로직
    • (운용 수익 - 운용 비용) = 순이익(또는 순손실)
    • 배분 대상 이익 = (순이익 - 관리수수료 등)*
    • 고객(투자자) 몫 vs 은행(운용자) 몫 계산
    • 손실 발생 시 무다라바 계약의 경우 투자자(고객)가 손실 부담 등
  5. 배분 결과 정산 및 계좌 반영
    • 매 주기별(일/월/분기/연)로 배분 금액 확정 후, 각 투자계좌에 반영(입금 또는 원금 축소 등)
    • 샤리아 규정상 이자 명목이 아닌 **“이익금”**으로 표시
    • GL(총계정원장)에 자동 분개 처리:
      • 고객 계좌(부채) 증가/감소
      • 은행 자기자본(또는 별도 내부 계정) 증가/감소
  6. 샤리아 준수 및 보고
    • 샤리아 감사(위원회)에서 승인한 계산 방식 준수
    • 배분율, 수수료, 원금 보장 여부 등 점검
    • 배분 내역에 대한 보고서(고객용, 내부 감사용, 외부 감사용) 제공
  7. 예외/에러 처리
    • 배분 과정 중 일부 계좌 정보 불일치, 중도해지 발생, 계약조건 변경 등 예외 상황 처리
    • 로그 및 재처리(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 기반 구조가 될 수도 있음)

  1. Investment_Asset(투자 자산 테이블)
    • asset_id: 자산 식별자
    • asset_type: 자산 유형(무라바하, 프로젝트 파이낸싱, 주식, 부동산 등)
    • start_date, end_date: 투자/운용 시작, 종료일
    • expected_return: 예상 수익률(예측용, 실제 계산 시 참고)
    • actual_profit_loss: 실제 확정된 손익(회계모듈 연계)
  2. PLS_Product(PLS 상품/계약 테이블)
    • product_id: 상품 식별자
    • product_name: 예) 무다라바 1년 투자, 무샤라카 단기 펀드 등
    • profit_sharing_ratio: 고객 vs 은행 간 이익분배율(예: 70:30)
    • loss_sharing_rule: 손실 발생 시 부담 방식(무다라바: 투자자 100%, 무샤라카: 지분 비율)
    • fee_policy: 관리수수료, 성과보수 등 정책
  3. PLS_Account(투자계좌 테이블)
    • account_id: 계좌번호
    • customer_id: 고객 식별자
    • product_id: 연결된 투자 상품
    • opening_balance: 초기 투자금
    • current_balance: 현재 잔액(원금 + 이익 재투자분 등)
    • status: 활성/해지/중도해지 등
  4. Daily_Balance(일별 잔액 테이블)
    • account_id
    • date
    • daily_balance: 해당 일자의 마감 잔액
    • weighted_factor: 배분 계산에 사용될 가중치(예: 일수를 기반으로)
  5. PLS_Calculation_Log(배분 계산 이력 테이블)
    • calc_id: 배분 계산 Batch 식별자
    • calc_date: 배분 실행일(예: 매월 말일)
    • product_id / account_id (옵션)
    • profit_amount / loss_amount
    • distributed_amount: 고객에게 배분된 최종 금액
    • bank_share: 은행 몫
    • status: 완료/오류 등

5. PLS 모듈 내부 구성

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

  1. Data Aggregator
    • 투자 자산(Investment_Asset) 및 회계 시스템에서 확정된 손익 데이터를 수집
    • 계좌 잔액·일수·가중치 정보(예: Daily_Balance) 모으기
    • 예외 데이터(누락, 불일치) 체크
  2. PLS Rule Engine
    • 상품별/계약별 이익분배율, 손실 부담 규칙, 수수료 로직 내장
    • 실제 손익 금액 × 가중치 × 분배율 등을 계산
    • 특정 조건(조기상환, 중도해지 등)이 있으면 해당 규칙도 처리
  3. Calculation Processor
    • 배치(Batch) 또는 실시간(Real-time) 방식으로 배분 작업 실행
    • (1) 손익 합산 → (2) 배분 기준 적용 → (3) 고객별 배분액 산출
    • 결과를 PLS_Calculation_Log 등에 기록
  4. Posting & GL Integration
    • 배분 결과를 토대로 고객 계좌(PLS_Account) 잔액 업데이트
    • GL(회계) 시스템에 전표 전송(“이익배분금” 등으로 반영)
    • Exception(오류) 발생 시 Rollback & 재실행
  5. Reporting & Audit
    • 샤리아 감사/준수 보고서: 배분 과정과 결과의 적합성(이자 금지 등)
    • 고객통지(Statement, SMS, Email 등)
    • 내부감사용 로그(누가 언제 어떤 로직으로 계산했는지)

6. 주의사항 및 Best Practice

  1. 샤리아 적합성
    • 계약 단계에서 이익분배율, 손실 책임을 명확히 설정하여 운영
    • 이자성 요소(Interest)는 사용되지 않으며, “이익금” 개념으로 회계처리
    • AAOIFI(회계·감사 기구) 표준 등을 준수하면 국제적 일관성 확보
  2. 가중치(Weighted Average) 계산
    • 고객이 중간에 입출금, 중도해지 등을 하는 경우, 해당 기간만큼 일할 계산
    • 필요한 경우 월 평균, 일 단위 등 은행 정책에 따라 계산 방법 정의
  3. 리스크/손실 처리
    • 무다라바 계좌에서 손실 발생 시 은행이 원금 보장 불가(샤리아 원칙)
    • 적절한 리스크 관리 프로세스(심사, 모니터링)를 통해 손실 최소화
  4. 투명한 보고
    • 고객이 배분 결과를 쉽게 이해하고 확인할 수 있도록 상세내역 제공
    • 고객 이익과 은행 몫이 어떻게 계산되었는지 명시
  5. 배치 vs 실시간 처리
    • 일반적으로 이익배분은 주기별(월, 분기, 연) 진행이 많음
    • 일부 상품(예: 단기 펀드)은 리얼타임 정산이 필요할 수도 있으므로, 설계 시 유연성 확보
  6. 회계 기준 연동
    • IFRS, AAOIFI 등 회계 기준 차이가 있을 수 있음
    • 무다라바/무샤라카 계좌를 은행의 부채로 처리할지 별도 투자계정으로 처리할지 등 내부 회계정책 준수

7. 요약

  • PLS 처리 프로그램은 코어뱅킹 백엔드에서 투자∙운용 손익계좌별 이익배분 규칙을 종합해 고객에게 이익 또는 손실을 안분하는 역할을 합니다.
  • 주요 단계는 손익 데이터 수집 → 배분 기준(계약/상품) 적용 → 배분 금액 산출 → 계좌 반영(회계 처리) → 보고/감사 순서로 진행됩니다.
  • 샤리아 규정에 따라 이자를 금지하고, 원금 보장이 되지 않는 구조를 정확히 구현해야 합니다.
  • 데이터 모델은 투자 자산, PLS 상품, 고객 투자 계좌, 일별 잔액, 계산 로그 등을 포함하며, 정확한 회계 연동과 배분 이력 추적이 중요합니다.
  • 정기(배치) 또는 실시간(특수 상품) 방식으로 운영할 수 있으며, 각 은행의 비즈니스 정책과 샤리아 위원회 승인을 통해 세부 로직이 결정됩니다.

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

김은생 (金殷生) 개인 블로그