공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다.
대출 신청 도메인에서는 사용자가 대출을 신청할 때 필요한 정보를 관리하고, 신청 과정을 단계별로 처리한다. 각 단계는 분리하여 관리하고, 해당 도메인의 테이블 구조를 통해 신청 데이터를 저장한다.
대출 신청 도메인
- 신청서 작성
- 사용자가 대출을 신청할 때 필요한 정보(이름, 전화번호, 이메일, 희망 금액 등)를 작성한다.
- 약관 등록
- 약관은 별도로 등록하며, 이 과정은 분리하여 관리한다.
- 서류 제출
- 대출 심사를 위해 필요한 서류들을 제출하는 단계이다.
- 신청 조건에 따른 신청 상태 변경
- 신청 조건에 따라 신청 상태가 변경되며, 이 과정도 분리하여 구현한다.
- 파일 업로드 분리
- 신청 정보 작성과 파일 업로드를 분리하여 관리한다.
테이블 정의
대출 신청과 관련된 정보를 저장하는 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 테이블은 대출 신청에 필요한 다양한 정보를 체계적으로 관리할 수 있도록 구성된다. 각 필드는 신청자의 기본 정보부터 대출 조건 및 상태까지 모두 포함하여, 대출 신청 프로세스의 핵심 역할을 한다. 이러한 구조는 향후 유지보수 및 확장성 측면에서도 유용하게 활용될 수 있다.
'BackEnd > Project' 카테고리의 다른 글
[Loan] Ch03. 대출 신청 조회 기능 구현 (0) | 2024.09.11 |
---|---|
[Loan] Ch03. 대출 신청 등록 기능 구현 (0) | 2024.09.11 |
[Loan] Ch02. 대출 상담 삭제 기능 구현 (0) | 2024.09.11 |
[Loan] Ch02. 대출 상담 수정 기능 구현 (0) | 2024.09.11 |
[Loan] Ch02. 대출 상담 조회 기능 구현 (0) | 2024.09.11 |