ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2] 가계 대출 상품 설명서 분석 - MVP 기능
    프로젝트/대출금 상환 프로젝트 2026. 5. 17. 14:11

     

     

     

    은행 웹사이트의 금융 상품 페이지에서 대출을 검색하면, 가계대출 상품 설명서를 찾아볼 수 있습니다. 이 설명서는 대출을 처음 접하는 고객도 쉽게 이해할 수 있도록 은행이 직접 검수하고 정제한 문서입니다.

     

    대출 도메인에 익숙하지 않은 개발자 입장에서, 대출금 상환 프로그램을 구현하는 일은 생각보다 낯설고 막막한 작업이었습니다. 그때, 이 상품 설명서가 뜻밖에 훌륭한 기술 명세서 역할을 해줬습니다. 비즈니스 요구사항에 대한 힌트가 잘 정리되어 있었고, 구현에 필요한 핵심 로직의 단서들도 곳곳에 담겨 있었습니다.

     

    이 시리즈는 두 편으로 나뉩니다.

    1편(이 글)에서는 MVP 기능에 해당하는 요구사항을 먼저 정리합니다. 대출 금리, 상환 방법, 연체 이자율, 연체금 결정, 채무변제충당순서가 그 대상입니다.  이를 바탕으로 핵심 기능을 빠르게 구현한 뒤, 

     

    2편에서 중도 상환, 대출 계약 철회, 금리인하 요구, 채무변제충당순서 변경, 대환 등 추가 요구사항을 이어서 다룰 예정입니다.


    1. 대출 금리

     

     

     

    약관해석 

     

     

    (1) 금리 유형 3가지 

     

    고정금리 대출 실행 시 결정된 금리가 만기까지 유지
    변동금리 일정주기(3/6/12개월)마다 기준금리 변동에 따라 대출금리 변동
    혼합금리 고정금리 + 변동금리 결합 형태

     

    (2) 최종 금리 계산 구조

     

    최종금리 = 대출기준금리
             + 가산금리 (리스크프리미엄 + 유동성프리미엄 + 신용프리미엄 + 자본비용 + 업무원가 + 법적비용 + 목표이익률)
             ± 가감조정 전결금리 (부수거래 감면 + 본부조정 + 영업점장 전결 조정)

     

    아이디어

     

    (1) 금리 유형에 따른 상환 금액 결정

     

    금리 유형에 따라 상환 금액이 달라져야 합니다. 

    if 고정금리:
        만기까지 최초 약정금리 그대로 적용
    
    if 변동금리:
        변동주기(3/6/12개월)마다 기준금리 재조회 후 금리 갱신
    
    if 혼합금리:
        고정기간 동안은 고정금리 적용
        고정기간 종료 후 변동금리로 전환

     

     

    (2) 금리 저장 방식

     

    최종 금리를 하나의 값만으로 저장하면 추적이 불가능 합니다.

    금리의 각 요소를 분리해서 저장해야 합니다. 

     

    (3) 기준 금리 변동 이력 관리

     

    변동 금리 및 혼합 금리 상품의 경우 , 기준 금리가 바뀔 때마다 변경 이력을 쌓아야 합니다.

    특정 시점의 금리를 조회할 수 있어야 이자 계산 및 분쟁 대응이 가능 합니다. 

     


    2. 상환 방법

     

     

    약관해석 

     

    원리금 균등상환 매월 원금 + 이자 합계가 동일 초기엔 이자 비중이 높고, 갈수록 원금 비중 증가
    원금 균등상환 매월 원금이 동일 이자는 잔여 원금 기준으로 계산되어 매월 납입액이 줄어듦
    만기 일시상환 대출기간 중 이자만 납부, 만기에 원금 전액 상환 총 이자 부담이 가장 크지만 중도 월 납입 부담은 가장 적음

     

     

    아이디어 

     

    금리 유형(고정/변동) X 상환방법(3가지) 에 따라 스케줄 원금 , 이자 금액 계산 로직이 달라져야 합니다. 

     

    ① 고정금리 + 원리금 균등상환

     

    대출 실행 시점에 갚아야 하는 돈을 계산하여 확정할 수 있습니다.

    r = 연이자율 / 12  (월 이자율)
    n = 총 납입 횟수
    
    월 납입액 = P × [r(1+r)^n] / [(1+r)^n - 1]
    
    매월 이자 = 잔여원금 × r
    매월 원금 = 월 납입액 - 매월 이자
    잔여원금  = 전월 잔여원금 - 매월 원금

     

    ② 고정금리 + 원금 균등상환

     

    원금은 고정이지만 이자는 매달 잔여 원금 기준으로 줄어듭니다. 역시 갚아야 하는 돈을 미리 확정 가능합니다.

    r = 연이자율 / 12  (월 이자율)
    n = 총 납입 횟수
    
    매월 원금  = P / n
    매월 이자  = 잔여원금 × r
    월 납입액  = 매월 원금 + 매월 이자
    잔여원금   = 전월 잔여원금 - 매월 원금

     

    ③ 고정금리 + 만기 일시상환

     

    중도에는 이자만, 만기에는 원금 전액을 상환 합니다.

    r = 연이자율 / 12  (월 이자율)
    
    매월 이자        = P × r
    월 납입액 (중도) = P × r
    월 납입액 (만기) = P + (P × r)
    잔여원금         = 만기 전까지 유지

     

    ④ 변동금리 + 원리금 균등상환

     

    금리가 변동주기마다 바뀌기 때문에 변동 시점마다 잔여 원금 기준으로 월 납입액을 재계산 해야 합니다. 

    변동주기 도래 시:
      1. 새 기준금리 조회
      2. 현재 잔여원금 확인
      3. 잔여 납입횟수 기준으로 월 납입액 재계산
      4. 이후 스케줄 전체 업데이트
    
    → 변동주기마다 스케줄 재생성 필요
    → 이전 스케줄 이력은 보존 (분쟁 대응)

     

    ⑤ 변동금리 + 원금 균등상환

     

    매월 원금은 고정이지만, 이자 계산에 쓰이는 금리가 변동 주기마다 바뀝니다.

    변동주기 도래 시:
      1. 새 기준금리 조회
      2. 매월 원금은 그대로 유지
      3. 이자 = 잔여원금 × 새 월 이자율 로 재계산
      4. 이후 스케줄 이자 항목만 업데이트
    
    → ④보다 재계산 범위가 작음 (원금 행은 건드리지 않아도 됨)

     

    ⑥ 변동금리 + 만기 일시상환

     

    매월 이자만 납부하는데 , 금리가 변동될 때마다 납입 이자액이 바뀝니다.

    변동주기 도래 시:
      1. 새 기준금리 조회
      2. 매월 이자 = 대출원금 × 새 월 이자율 로 재계산
      3. 만기 원금 상환은 변동 없음
    
    → 6가지 중 재계산이 가장 단순
    → 원금은 항상 고정이므로 만기 회차만 별도 관리

    3. 연체 이자율 결정

     

     

    약관해석

     

    연체 이자율 = 대출이자율 + 연체가산이자율(3%) 
    상한선 : 최고 연 15% (단 , 대출 이자율이 이미 15% 이상이면 대출 이자율 + 2%)

     

    아이디어 

     

    연체가산이자율 = 0.03  # 연 3% 고정
    
    if 대출이자율 >= 0.15:
        연체이자율 = 대출이자율 + 0.02
    else:
        연체이자율 = min(대출이자율 + 연체가산이자율, 0.15)

     


    4. 연체금 결정

     

     

     

    약관해석

     

    1,2,3,6 항을 정리하면 아래와 같습니다. 

     

     

     

    연체금의 결정은 상환방법 , 연체금 종류 , 연속 연체 횟수 , 경과 기간에 따라 분기 되어 결정 됩니다. 

    빨간 박스에 해당하는 경우 , 기한 이익 상실이 발동 되어 원금 잔액 전체가 연체 이자 계산의 기준이 됩니다. 

    단 , 계약시 대출 원금이 5천만원 미만 이라면 , 기한 이익 상실이 되어도 원금 잔액에 연체 이자를 부과 하지 않습니다. 

     

     

    아이디어

     

    약관의 플로우를 코드로 옮기면 아래와 같은 형태가 됩니다.

     

    if 상환방법 == 만기일시상환:
        if 연체금 종류 == 이자:
            if 경과기간 < 1개월:
                연체이자 = 미납이자 × 연체이자율
            else:  # 1개월 이상 경과 → 기한이익 상실
                연체이자 = 원금잔액 × 연체이자율  (5천만원 미만 예외 제외)
        else:  # 원금 연체
            연체이자 = 원금잔액 × 연체이자율
    
    elif 상환방법 in [원금균등, 원리금균등]:
        if 연속연체횟수 == 1:
            연체이자 = 분할상환금 × 연체이자율
        else:  # 2회 이상 → 기한이익 상실
            연체이자 = 원금잔액 × 연체이자율  (5천만원 미만 예외 제외)

     

     

    (1) 상환 스케줄 - 금액 항목 분리 저장 

     

    상환 스케줄에서 매달 갚아야 하는 금액을 단일 컬럼으로 저장하면, 연체가 발생했을 때 어떤 항목이 미납인지 특정할 수 없습니다.

    약관에서 연체이자 부과 기준이 미납이자, 원금잔액, 분할상환금 세 가지로 나뉘는 만큼, 상환 스케줄도 항목별로 분리해서 저장해야 합니다.

    분리해야 "이자는 납부했지만 원금은 미납"이거나, "연체이자 일부만 납부"한 상황을 정확히 추적할 수 있습니다.

     

     

    (2) 연체이자 부과 기준 - 3가지 케이스 분리

     

    연체 이자율을 적용하는 기준 금액은 상황에 따라 달라집니다. 

     

    세 케이스는 계산 기준이 완전히 다르기 때문에 하나의 로직으로 처리하면 분기가 뒤엉킵니다. 케이스별로 계산 책임을 분리해두는 것이 좋습니다.

     

     

    (3) 상환 스케줄 상태 → 대출 계좌 상태 전이 → 연체 이자 계산 

     

    연체 이자를 계산할 때 , 매번 연체금 종류 , 경과 기간 , 연속 연체 횟수를 판단 할 수는 없습니다.  

    대신 상환 스케줄의 상태가 대출 계좌의 상태를 바꾸고, 연체 이자 계산은 대출 계좌 상태만 보고 동작하도록 흐름을 분리하는 것이 자연스럽습니다. 

    상환 스케줄 상태 변화 (정상 납부 / 1개월 미납 / ...) 
      → 대출 계좌 상태 전이 (NORMAL / OVERDUE / ...)
      → 계좌 상태 기준으로 연체이자 부과 케이스 결정

    5. 채무변제충당순서

     

     

     

    약관해석

     

    채무변제충당순서란 ? 

     

    대출 상환 시, 납부한 돈을 어느 항목에 먼저 적용할지의 순서 입니다. 

    고객이 그달에 갚아야 하는 돈을 전부 갚지 못하고 일부만 갚을 경우 , 어느 항목에 대한 돈 부터 먼저 충당 되는지 순서를 나타냅니다. 

     

    대출 상환 시 발생하는 항목에는 3가지가 있습니다. 

    • 비용 : 연체 관련 비용
    • 이자 : 약정 이자
    • 원금 : 실제 빌린 돈

     

     

    이러한 채무변제충당순서는 기한이익이 상실된 대출(대출 잔여 원금에 대해 연체이자가 부과되는 상태)에 한하여 변경을 신청할 수 있습니다. 

     

     

    아이디어

     

    (1) 상환 시 차감 순서를 코드로 표현 

     

    납입금이 들어왔을 때, 비용 -> 이자 -> 원금 혹은 비용 -> 원금 -> 이자 순으로 잔액을 차감하는 로직이 필요 합니다. 

     

    (2) 대출 상태 구분 

     

    정상 상태 , 단순 연체 상태 , 기한 이익 상실 상태를 구분하여 대출 계좌의 상태를 관리해야 합니다. 

    기한이익상실 상태일 때만 충당 순서 변경을 허용하는 조건이 필요합니다. 

     

    (3) 충당 순서 변경 처리 

     

    순서가 바뀌면 같은 납입금이라도 원금이 먼저 줄어드는 방식으로 동작해야 합니다.

    두 가지 충당 방식을 전환할 수 있는 구조가 필요합니다.

Designed by Tistory.