본문 바로가기
BackEnd/Project

[Loan] Ch04. 대출 심사 도메인 테이블 정의

by 개발 Blog 2024. 9. 13.

공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다.

 

대출 심사 시스템은 대출 신청 후 내부적으로 심사가 진행되는 중요한 단계이다. 심사 단계에서는 대출 신청자가 제출한 정보를 기반으로 심사자들이 대출 가능 여부와 승인 금액을 결정한다. 이를 위해 대출 신청서에 입력된 정보를 체계적으로 관리하고, 그 결과를 기록할 수 있는 데이터베이스 구조가 필요하다. 이번 장에서는 대출 심사를 관리하기 위한 도메인 테이블을 정의하고, 그에 따른 엔티티 클래스를 구현하는 방법을 다룬다.

 

대출 심사 도메인

대출 신청 시 입력하고 등록한 자료를 기반으로 내부 심사가 이루어진다. 이 심사 과정에서 승인 금액, 심사자 등의 정보가 저장되며, 이는 대출 승인과 관련된 중요한 역할을 한다. 심사 절차는 아래의 플로우 차트에서처럼, 신청자가 대출을 요청하고 이에 따른 서류가 접수되면 심사자가 대출 가능 여부를 판단하고 조건을 제시하는 방식으로 진행된다.

 

 

Ch3에서 대출 신청 절차는 신청서 작성, 서류 등록, 그리고 신청 조건 충족 여부 확인을 포함하며, Ch4에서는 신청 조건 충족 시 대출 조건이 제시된다.

 

실습 - 테이블 정의

대출 심사를 처리하는 Judgment 엔티티를 정의한다.

package com.example.loan.domain;

import lombok.*;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import org.hibernate.annotations.Where;

import javax.persistence.*;
import java.math.BigDecimal;

@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@DynamicInsert
@DynamicUpdate
@Where(clause = "is_deleted=false")
public class Judgment extends BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long judgmentId;

    @Column(columnDefinition = "bigint NOT NULL COMMENT '신청 ID'")
    private Long applicationId;

    @Column(columnDefinition = "varchar(12) NOT NULL COMMENT '심사자'")
    private String name;

    @Column(columnDefinition = "decimal(15,2) NOT NULL COMMENT '승인 금액'")
    private BigDecimal approvalAmount;
}
  • judgmentId: 대출 심사의 고유 ID이다.
  • applicationId: 대출 신청서와 연관된 ID이다.
  • name: 심사를 진행한 심사자의 이름이다.
  • approvalAmount: 심사 결과에 따라 승인된 금액이다.

Hibernate의 @DynamicInsert와 @DynamicUpdate를 사용하여 필요한 경우에만 SQL문이 동적으로 생성되도록 설정하였다. @Where 애노테이션을 사용하여 삭제된 항목은 조회되지 않도록 했다.