핀테크(Fintech) 산업에서 개발자의 역할
1. 핀테크 (Fintech) 금융(Finance)과 기술(Technology)의 합성어 금융이란? 자본에 이자를 붙여 돈이 필요한 곳에 자본을 빌려주는 행위 돈에 여유가 있는 사람이 쉽게 빌려주는 과정이 반복되는 행위 은
hyeonju0121.tistory.com
이전 핀테크 산업에서 개발자의 역할을 조사하며, 금융의 본질이자 많은 부분을 차지하고 있는 대출 도메인을
개발자 관점에서 알아보기 위해 대출 도메인 프로젝트를 진행하게 되었다.
프로젝트를 시작하면서 대출 도메인을 이해하고 요구사항을 정리했다.
1. 대출 상담 기능
- 차주는 대출 상담을 등록/수정/조회/삭제할 수 있어야 한다.
- 상담 등록을 위한 이름, 전화번호, 이메일, 상담 내용, 주소, 상세주소, 우편번호 등이 포함되어야 한다.
2. 대출 신청 기능
- 대출 신청을 위해 약관 동의가 필요하다.
- 대출 신청을 위한 이름, 전화번호, 이메일, 대출 희망 금액 등이 포함되어야 한다.
- 대출 신청을 위해 입회 서류를 업로드할 수 있어야 한다.
- 대출 신청을 수정하고 삭제할 수 있어야 한다.
- 대출 신청서 작성 기능 (신청 등록, 신청 조회, 신청 수정, 신청 삭제)
- 심사에 필요한 서류 제출 기능 (서류 등록, 서류 조회, 서류 삭제)
3. 약관 관련 기능
- 서비스를 이용하고자 할 때, 약관 동의가 필요하다.
- (관리자) 시스템 상에서 어떤 약관을 내려주기 위해서는 약관을 등록하고 조회할 수 있는 기능이 필요하다.
3.1 이용 약관 등록 기능
최대한 간단하게 구현 -> 세부 내용은 URL로 제공
3.2 이용 약관 전체 조회
약관이 여러개 존재할 수 있을 수도 있기 때문에 List 형태로 반환
3.3 대출 신청 약관 등록 기능
관리자가 이용 약관을 등록, 조회하는 기능을 구현했다면 ,
사용자(대출 신청자)는 약관을 보고 동의를 하는 정보를 기록해야 한다.
- 신청 정보와 약관을 매핑해야 한다. (신청자가 이 신청 정보에 약관을 동의)
- 사용자가 "존재하는 모든 약관을 동의했는지"에 대한 검증이 필요하다.
- 약관 테이블에 약관에 대한 필드들이 있을 것이다. 약관을 동의할 때, 어떤 약관들을 동의했는지 리스트로 묶어서 해당 리스트를 저장해야 한다.
(ex. 약관이 3개가 있다면 -> 사용자가 3개 약관 동의를 했다면 그 3개를 서버에 넘겨준다.)
다음 사항이 발생하는 경우에는 실패 응답을 반환해야 한다.
- 대출 신청 정보가 존재하지 않는 경우, 에러 발생
- 약관이 존재하지 않는 경우, 에러 발생
- 약관 항목에 해당 약관들을 모두 동의하지 않은 경우, 에러 발생
4. 대출 신청 서류 기능
대출 신청시에 필요한 서류를 제출할 수 있어야 한다.
- 신청 건에 해당하는 서류를 업로드하는 api (파일 업로드 기능)
- 유효한 대출 신청 건인지 검증이 필요하다.
- 대출 신청 서류 조회 기능
- 파일을 단건으로 다운로드하고, 위치한 경로에 파일들이 있는지 확인이 필요하다.
- 신청 건에 해당하는 입회서류를 업로드, 다운로드, 삭제, 조회할 수 있어야 한다.
5. 대출 심사 기능
대출을 신청하고, 등록한 자료들을 토대로 심사가 진행된다.
신청한 정보를 기준으로 대출을 집행할지, 안 할지 심사를 해야 한다.
5.1 대출 심사 조회
- 대출 심사 아이디로 심사를 조회하는 기능
- 대출 신청 아이디로 심사를 조회하는 기능
5.2 대출 심사 금액 부여
대출 심사를 하고 승인된 금액을 실시간으로 반영되는 것이 아니고,
최종 결정권자가 승인하는 사람을 통해서 대출 심사 금액이 부여된다.
최종적으로 심사가 완료되면, 대출 심사 금액을 부여해주어야 한다.
6. 대출 집행 기능
대출 신청이 완료가 되었다면, 심사 승인 금액이 차주에게 부여가 된다.
그렇다면, 차주는 승인 결과를 보고 대출을 받을지 말지 결정을 해야 한다.
만약에, 조건을 수락한다면 계약을 체결하고, 대출이 집행된다.
만약에, 대출금을 500만 원 신청을 했을 때 계약을 맺고 계약 후에 차주에게 500만 원을 빌려준다.
차주는 정기적인 일정에 맞춰 이자와 상환금을 갚아야 한다.
집행을 할 때마다, 계약에 따라서 이율도 달라질 수 있고 처음에 집행할 때 대출집행금액이 N회차에 따라서 집행을 해주더라고 똑같이 1/N을 해서 집행해 주는 경우도 있고, 실제로 집행될 때마다 금액 비율이 달라짐으로써 대출금을 전달해 주는 경우도 있다.
그때마다 이율이 달라질 수도 있고, 부가적으로 집행할 때마다 세부적으로 해당 집행했을 때만 조건이 같이 붙을 수도 있다.
하지만, 이번 프로젝트에서는 대출 프로세스를 이해하기 위함이어서 최대한 심플하게 진행하려고 한다.
현재는 대출 잔고 도메인을 정의할 때, 대출금을 집행하고 차주가 돈을 상환하는 과정에서 남은 잔여 대출금을 확인할 수 있도록 정의했다.
즉, 얼마 대출을 집행했고, 실제로 남은 대출금은 얼마인지 까지만 관리할 수 있는 테이블이다.
사실은 금액을 언제 상환했는지에 대한 추적 같은 경우에는 여러 방식으로 관리할 수 있다.
이벤트 트리거를 심어놓고 그 테이블에 row 가 변경 작업이 일어났을 때 이력들을 쌓음으로써 관리하는 방식.. 등
하지만, 이번 프로젝트에서는 대출 프로세스를 이해하기 위함이어서 최대한 심플하게 진행한다.
계약한 대출이 잔여 대출금액이 얼마 남았는지에 대해서만 구현을 진행한다.
- 대출금을 집행했을 때, 해당 대출금이 잔여 대출 금액(balance)에 업데이트가 돼야 한다.
- 차주가 N회차에 거쳐서 대출금을 상환했을 때, 잔여 대출 금액(balance)에 업데이트가 되야 한다.
6.1 대출 계약 기능
- 대출금이 집행되기 전에, 최종적으로 신청한 대출 정보에 대해서 심사를 받고 계약을 체결해야 한다.
6.2 대출 집행 기능
- (등록) 대출금이 집행되기 전에, 최종적으로 신청한 대출 정보에 대해서 심사를 받고 계약을 체결해야 한다.
- (조회) 대출 신청 건에 해당하는 집행 정보를 조회할 수 있어야 한다.
- (수정) 대출금이 고객에게 전달되기 전 집행 금액이 잘못 입력된 경우에 수정할 수 있어야 한다. 응답으로는 수정 전 금액과 수정 후 집행 금액이 반환되어야 한다.
- (삭제) 집행 정보가 삭제됐을 때, 잔여 대출 금액(balance)도 0원으로 잔액 업데이트가 필요하다.
7. 대출 상환 기능
대출금이 집행되면 차주는 N회차에 거쳐서 상환금+이자를 상환해야 한다.
- 대출 잔액이 남았는지 조회할 수 있어야 한다.
- 언제, 몇 회에 거쳐서 대출금을 상환했는지 이력을 확인할 수 있어야 한다.