프로젝트

부동산 STO 토큰증권 플랫폼

회고

by HOON


Last updated on Dec. 18, 2024, 9:04 a.m.


random_image

개요

먼저 해당 프로젝트를 기획하게 된 계기는 아래와 같습니다.

  1. 주식시장에만 치중되어있는 투자 시장
  2. 블록체인 기반의 STO 토큰 시장을 타겟팅 하자
    → 실제 신한투자증권에서 최근 STO 토큰에 대하여 연내 기준 플랫폼 구축 계획이 있는것으로 보입니다.

따라서 우리팀은 다가올 시장에 맞춰 프로젝트 주제를 정했습니다.

이 프로젝트에서 제가 기획,설계,개발한 부분은 다음과 같습니다.



건물 상세 페이지

개요
건물의 상세 정보와 최근 시세를 제공하는 페이지입니다. 사용자 친화적인 UI와 데이터 연동을 통해 직관적으로 정보를 제공합니다.

주요 기능

  1. UI/UX 디자인: 건물 정보, 시세, 지도 등의 효율적 배치
  2. API 연동: 국토부 실거래가 및 건물 정보 API 활용
  3. 지도 표시: Daum 지도 API를 통한 위치 및 주변 환경 표시
  4. 이미지 갤러리: 대표 이미지와 추가 사진 제공

백엔드 작업

  1. API 연동 및 데이터 검증
  2. 데이터베이스 저장 및 캐싱
  3. 크론 작업을 통한 데이터 자동 업데이트

부동산 토큰 발행 페이지

개요

사용자가 부동산 정보를 입력하고 토큰화 과정을 진행할 수 있는 단계별 입력 페이지입니다.

주요 기능

  1. 입력 폼: 건물 정보, 시세, 사진 업로드, 상세 정보 입력
  2. 주소 입력: Daum API를 활용한 자동 완성 및 지도 선택 기능
  3. 진행 표시: 단계별 진행 상황과 네비게이션 제공
  4. 실시간 검증: 입력 데이터 형식 및 필수 항목 확인

백엔드 작업

  1. 데이터 수신, 검증, DB 저장
  2. 이미지/파일 저장 및 관리
  3. 라우팅 설정으로 완료 후 페이지 연결

구성도

전체적인 프로젝트 구성도는 아래와 같습니다.

사용 기술은 AWS EC2, Docker, Nginx, React, FastAPI, MySQL, redis 입니다.

개발

우선 제가 개발 한 내용은 크게 아래와 같습니다.

  1. 공공 API 포털 내 데이터 전처리
    1. 공공API 포털 내 국토교통부_건축HUB_건축물대장정보 서비스 (https://www.data.go.kr/data/15134735/openapi.do)
    2. 국토교통부_아파트 매매 실거래가 상세 자료 (https://www.data.go.kr/data/15126468/openapi.do)
    3. 카카오 지도 API
    4. 다음 맵 지도 API
  2. 아파트 실거래가 데이터 취합 (최대 5개)
  3. 부동산 토큰 발행시 데이터 전처리
  4. 등록 페이지 생성, 건물 별 디테일 페이지 생성
  5. 인프라 및 배포

API 구조는 다음과 같습니다.

건축물대장정보의 총괄표제부 데이터 내 대지면적,건폐율,연면적,용적률 등을 추출하고 해당 건물의 이름을 토대로 buildingcode를 생성하게됩니다.

그 다음 실거래가 상세 자료에 해당하는 아파트의 실거래가를 추출하여 건물정보 하위에 최신거래로 데이터를 추출 할 수 있습니다.

{
  "건물정보": {
    "대지면적": "41",
    "건폐율": "1249.11",
    "연면적": "803.123",
    "용적률": "41245.1",
    "건물명": "아크로서울포레스트",
    "주소": "서울 성동구 왕십리로 83-21",
    "이미지URL": [
      "https://newsimg.sedaily.com/2017/03/17/1ODEN68FO5_15.jpg"
    ]
  },
      "최신거래": [
        {
          "아파트명": "아크로서울포레스트",
          "거래금액": "1,100,000",
          "전용면적": "",
          "층": "35",
          "계약연도": "2024",
          "계약월": "7",
          "계약일": "10"
        },
        {
          "아파트명": "아크로서울포레스트",
          "거래금액": "1,450,000",
          "전용면적": "",
          "층": "35",
          "계약연도": "2024",
          "계약월": "7",
          "계약일": "4"
        },

인프라 및 배포

-인프라-

주어진 환경은 EC2 한개였지만, 만약 이 프로젝트를 실제 서비스를 낸다고 가정하고 아키텍쳐를 설계해봤습니다.

  • 사용자 트래픽 처리
    • Amazon Route 53: 사용자 도메인을 전 세계적으로 분산 처리.
    • AWS Global Accelerator: 지연 시간을 줄이고 최적의 네트워크 경로 제공.
    • AWS WAF: 웹 애플리케이션 방화벽으로 보안 강화.
  • 프론트엔드
    • Amazon S3 + CloudFront: 정적 콘텐츠(HTML, CSS, JS)를 저장 및 CDN을 통해 빠르게 제공.
  • 백엔드 서비스
    • Amazon EC2: AutoScailing을 설정 하여 트래픽 집중 시 자동 Scale Out 기대
    • Application Load Balancer(ALB): 백엔드 애플리케이션의 트래픽 로드밸런싱.
  • 데이터베이스
    • Amazon RDS (MySQL): 거래 내역, 자산 데이터, 사용자 정보 저장.
    • Amazon ElastiCache (Redis): WebSocket 데이터 및 캐싱 처리, 실시간 호가창, 토큰 거래 정보 저장.
  • 파일 및 이미지 관리
    • Amazon S3: 건물 이미지, 업로드 파일 저장.
    • Amazon S3 Transfer Acceleration: 빠른 업로드/다운로드 처리.

-배포-

배포과정은 CI/CD를 이용하기위해 GithubAction을 사용했습니다.

아래 사진과 같이 frontend, backend에 각각 deploy.yml을 구현했습니다.

먼저 백엔드 파일을 살펴보면, 저희는 docker-compose를 사용했기때문에 배포시,

docker-compose 명령어를 사용했습니다.

name: Backend CI/CD

on:
  push:
    branches:
      - main # main 브랜치로 푸시될  실행

jobs:
  deploy:
    name: Deploy Backend
    runs-on: ubuntu-latest

    steps:
      # 코드 체크아웃
      - name: Checkout Code
        uses: actions/checkout@v3

      # EC2 서버에 코드 배포  서비스 재시작
      - name: Deploy to EC2
        uses: appleboy/ssh-action@v0.1.8
        with:
          host: ${{ secrets.EC2_HOST }}
          username: ${{ secrets.EC2_USER }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          script: |
            cd ~/backend
            git pull
            sudo docker-compose down
            sudo docker-compose up --build -d

fastapi react redis mysql ec2


Leave a Comment:

🤖 AI Chat 🤖