[Project] 8 퍼센트 클론 프로젝트

[Ted's Log] 테드로그·2021년 11월 15일
1

Project Driven Study

목록 보기
6/6
post-thumbnail

👋   Prologue

  커머셜 웹사이트를 클론했던 첫 프로젝트에 이어, 두번째 프로젝트는 부동산 P2P 투자 플랫폼인 8 퍼센트 웹페이지를 클론하는 프로젝트를 진행했다. 투자와 관련된 사이트이다 보니 데이터베이스 Schema도 달라지는 부분이 많았고, 부동산 투자 상품에 대한 정보를 구조화할 때 고려할 데이터가 많아서 많은 것을 배울 수 있는 프로젝트였다. 백엔드 API 기능 구현 위주로 간략히 프로젝트를 소개하는 글을 적어보려 한다.

Git Repository
Demo Video


🔍   Project Overview (Team 111 Percent)

레퍼런스 사이트

레이아웃 디자인이 깔끔한 8퍼센트 부동산 P2P 투자 플랫폼을 클론 코딩하는 프로젝트를 진행했다.

작업 기간

2021.09.13 - 10.01 (14 Days)

구성원

F/E 3명, B/E 2명의 팀원들과 함께 프로젝트를 진행했다.

주요 기능

사용자가 회원가입 후, 하나의 상품에 투자까지 필요한 모든 API 기능을 구현했다. 마이페이지에서는 투자 및 거래내역, 수익률, 누적 수익 등을 확인할 수 있는 포트폴리오 API 기능 또한 구현했다.

  • Sign-up, Sign-in API : 회원가입 / 로그인
  • Social login API : 소셜로그인 (카카오)
  • Investment List API : 투자 상품 목록 정보 불러오기
  • Investment Detail API: 투자 상품 상세 정보 불러오기
  • Portfolio API : 투자 내역 및 수익률 정보
  • Transaction APIs : 입금, 출금, 투자하기 기능

기술 스택

  • Git & Github
  • Python, Django
  • MySQL

🧩   Database Schema

  111 Percent 백엔드 프로젝트는 총 3가지의 어플리케이션으로 구성된 장고 프로젝트이다. User, Transaction, Investment 앱이 있으며, 각각 회원 정보, 거래 정보, 상품 정보와 관련된 기능을 담당한다. 데이터베이스 스키마는 아래 이미지와 같이 설계했다.
 User 앱에는 특징적으로 유저 테이블에 소셜 로그인 기능을 위한 Column을 생성했다. 그리고 유저 별로 가상 계좌를 만들어서 할당해야 하기 때문에 예치금 Table을 정참조 하는 Column을 포함했다.
 Transaction 앱에는 상품 투자 및 입출금 거래를 위한 테이블로 구성되어 있다. 111 Percent에서 발생하는 모든 거래 활동은 transaction 객체를 생성해서 데이터베이스에 저장된다. 상품 투자 시에는 portfolio 객체 또한 생성하여 요약된 투자 정보를 확인하기 간편하게 스키마를 구성했다.
  Investment 앱에는 투자 상품을 제공하는데 필요한 정보를 나눈 테이블로 스키마를 구성했다. 하나의 투자 상품에는 상품에 대한 정보와, 투자 상세 정보, 대출자 정보, 담보 정보 등 여러 상세 정보가 필요하다 보니 각각의 특징 별로 테이블을 여러 개로 나누는 작업이 주효했다.


😎   Impressive Function

  아래 코드 블럭은 상품 투자 API Post 함수 코드의 일부이다. 1차 프로젝트를 진행하면서 새롭게 써봤던 장고 ORM이나 DB 트랜잭션을 모두 사용하여 만든 API이다. 상품 투자 시에 서로 다른 두 Table(거래 Table, 포트폴리오 Table)의 객체를 생성하고 칼럼의 정보를 변경해야 하는 사항이 있기에 트랜잭션 적용이 필수인 기능이었다.

  그 다음으로 프로젝트를 진행하면서 기억에 남는 코드는 투자 요약 정보를 제공하는 포트폴리오 API Get 함수이다. 나도 부동산 P2P 투자 사이트에서 투자를 실제로 하고 있고, 웹 페이지에서 가장 자주 확인하는 페이지가 수익률 및 투자 정보 요약이다. 그래서 실제로 이러한 API를 개발한다는 것이 흥미롭게 다가왔다. 투자 정보에 대한 다양한 수치를 제공하기 위해서 장고의 집계함수를 활용했다.


🍉   Refactoring

  2차 프로젝트에 했던 8퍼센트 클론 코딩을 원티드 프리 온보딩 코스에서 리팩토링을 할 수 있는 기회가 생겼다. 그 중 거래 내역 API Get 함수를 보완을 많이 하여서 그 부분에 대한 소개를 하겠다.
  이번 리팩토링을 진행하면서 기간별로 거래 내역을 조회할 수 있도록 적용했고, 한 페이지에서 최대 20건의 거래내역을 보여주도록 했다. 기간에 대한 Query Parameter가 입력되지 않았을 때는 기본으로 3개월 간의 거래내역을 보여준다.
  입력된 기간에 맞게끔 데이터를 조회할 수 있도록 하기 위해 yyyy-mm-dd 형태로 들어온 Query Parameter를 가공해야 했다. 보통 특정 시작일 부터 오늘날 까지의 거래 내역을 조회할 때 오늘 오후에 생성된 거래 내역도 조회가 되야 한다. 하지만 END_DATE2021-11-11을 넣고 조회하게 되면 11월 10일에 생성된 거래 내역만 조회가 된다. 따라서 들어온 값에 하루를 더해서 올바른 조회가 가능하도록 수정했다.


🍎   Project Review

  1차 프로젝트와 비교해서 데이터 스키마 구조, API 로직도 고려할 것이 많아 복잡했지만 새롭게 핀테크 관련 서비스의 API를 개발해볼 수 있어서 재미있게 할 수 있었다. 금융 데이터에 맞는 예외 처리를 어떻게 해야 하는지, 그리고 트랜잭션을 왜 활용해야 하는지에 대해 더 알게 된 시간이기도 했다. 앞으로 좀 더 다양한 분야의 API를 개발해보고 싶은 마음이 생기게 된 프로젝트이기도 하다.

profile
성장하는 개발자가 되기 위한 발자취 🧑🏻‍💻

0개의 댓글