본문 바로가기
BackEnd/Project

[Loan] Ch03. 대출 신청 도메인 테이블 정의

by 개발 Blog 2024. 9. 11.

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

 

대출 신청 도메인에서는 사용자가 대출을 신청할 때 필요한 정보를 관리하고, 신청 과정을 단계별로 처리한다. 각 단계는 분리하여 관리하고, 해당 도메인의 테이블 구조를 통해 신청 데이터를 저장한다.

 

대출 신청 도메인

  1. 신청서 작성
    • 사용자가 대출을 신청할 때 필요한 정보(이름, 전화번호, 이메일, 희망 금액 등)를 작성한다.
  2. 약관 등록
    • 약관은 별도로 등록하며, 이 과정은 분리하여 관리한다.
  3. 서류 제출
    • 대출 심사를 위해 필요한 서류들을 제출하는 단계이다.
  4. 신청 조건에 따른 신청 상태 변경
    • 신청 조건에 따라 신청 상태가 변경되며, 이 과정도 분리하여 구현한다.
  5. 파일 업로드 분리
    • 신청 정보 작성과 파일 업로드를 분리하여 관리한다.

테이블 정의

대출 신청과 관련된 정보를 저장하는 Application 테이블에 대해 설명한다. 이 테이블은 신청자의 정보부터 대출 금액 및 조건까지 다양한 데이터를 관리하며, 각 필드는 명확한 역할을 가진다.

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;
import java.time.LocalDateTime;

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

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(nullable = false, updatable = false)
    private Long applicationId;

    @Column(columnDefinition = "varchar(12) DEFAULT NULL COMMENT '신청자'")
    private String name;

    @Column(columnDefinition = "varchar(13) DEFAULT NULL COMMENT '전화번호'")
    private String cellPhone;

    @Column(columnDefinition = "varchar(50) DEFAULT NULL COMMENT '신청자 이메일'")
    private String email;

    @Column(columnDefinition = "decimal(5,4) DEFAULT NULL COMMENT '금리'")
    private BigDecimal interestRate;

    @Column(columnDefinition = "decimal(5,4) DEFAULT NULL COMMENT '취급수수료'")
    private BigDecimal fee;

    @Column(columnDefinition = "datetime DEFAULT NULL COMMENT '만기'")
    private LocalDateTime maturity;

    @Column(columnDefinition = "decimal(15,2) DEFAULT NULL COMMENT '대출 신청 금액'")
    private BigDecimal hopeAmount;

    @Column(columnDefinition = "datetime DEFAULT NULL COMMENT '신청일자'")
    private LocalDateTime appliedAt;

    @Column(columnDefinition = "decimal(15,2) DEFAULT NULL COMMENT '승인 금액'")
    private BigDecimal approvalAmount;

    @Column(columnDefinition = "datetime DEFAULT NULL COMMENT '약정일자'")
    private LocalDateTime contractedAt;
}

1. applicationId (Long)

  • 대출 신청의 고유 ID이다. @Id와 @GeneratedValue(strategy = GenerationType.IDENTITY)를 사용하여 자동으로 증가하며, 각 신청서를 고유하게 식별하는 역할을 한다. 이 값은 nullable하지 않으며, 업데이트할 수 없는 필드이다.

2. name (String)

  • 대출을 신청하는 신청자의 이름을 저장하는 필드이다. 최대 12자의 문자열을 저장할 수 있으며, 데이터베이스에는 '신청자'라는 코멘트와 함께 저장된다.

3. cellPhone (String)

  • 신청자의 전화번호를 저장하는 필드이다. 최대 13자의 전화번호 형식을 가진 문자열을 저장하며, '전화번호'라는 코멘트가 추가된다.

4. email (String)

  • 신청자의 이메일 주소를 저장하는 필드로, 최대 50자까지 입력할 수 있다. 이 필드는 신청자의 연락처 정보 중 하나로, 대출 진행 상태에 대한 알림 등을 보내는 데 사용될 수 있다.

5. interestRate (BigDecimal)

  • 대출 금리를 저장하는 필드이다. 소수점 네 자리까지 저장할 수 있으며, 대출이 승인되면 적용될 금리 정보를 나타낸다.

6. fee (BigDecimal)

  • 대출 취급 수수료를 저장하는 필드이다. 금리와 마찬가지로 소수점 네 자리까지 저장되며, 대출 취급에 따른 수수료 정보를 저장한다.

7. maturity (LocalDateTime)

  • 대출 만기일을 저장하는 필드로, 대출 상환 기한을 나타낸다. 이 필드를 통해 대출 계약의 만기일을 관리할 수 있다.

8. hopeAmount (BigDecimal)

  • 신청자가 희망하는 대출 금액을 저장하는 필드이다. 소수점 두 자리까지 입력할 수 있으며, 사용자가 신청 시 원하는 금액을 나타낸다.

9. appliedAt (LocalDateTime)

  • 대출 신청일을 저장하는 필드로, 사용자가 실제로 대출을 신청한 날짜와 시간을 기록한다.

10. approvalAmount (BigDecimal)

  • 대출이 승인된 금액을 저장하는 필드이다. 희망 금액과는 별도로, 심사 후 최종적으로 승인된 금액을 기록한다.

11. contractedAt (LocalDateTime)

  • 약정일자를 저장하는 필드이다. 대출 계약이 체결된 날짜를 기록하며, 이 값을 통해 대출 계약이 완료된 시점을 확인할 수 있다.

Application 테이블은 대출 신청에 필요한 다양한 정보를 체계적으로 관리할 수 있도록 구성된다. 각 필드는 신청자의 기본 정보부터 대출 조건 및 상태까지 모두 포함하여, 대출 신청 프로세스의 핵심 역할을 한다. 이러한 구조는 향후 유지보수 및 확장성 측면에서도 유용하게 활용될 수 있다.