Skip to content

Tomk2d/DonTouch-app-data-socket

 
 

Repository files navigation

한 발 앞선 생각 - Don Touch



주최 : 신한투자증권

주제 : 개인화된 금융 서비스를 제공하기 위한 클라우드 MSA 환경 구축 및 서비스 개발

서비스 : 웹앱

성과 : 최우수 프로젝트 수상



Team. DonTouch

신의진 박유진 이한슬
백엔드 테크리더 프론트엔드 테크리더 PM
허상진 박진언 이승택
서기 팀원 팀원


My Role (신의진)

  • 백엔드 테크리더 및 프로젝트 리딩
  • 배당주, 개별주식, 부동산, 에너지 거래체결
  • 실시간 소켓 통신
  • 비동기 객체 통신
  • MSA 설계 및 AWS 인프라 설계
  • 배포


Contents

4. ERD


About

donTouch 는 투자 상품 추천 및 모의투자, 배당 일정 관리 등의 통합형 자산관리 서비스 입니다.

' 제 2의 월급 만들기 ' 라는 목표로 유저를 개인화하고 배당주, p2p 상품 등의 조합을 추천합니다.
유저의 마이데이터(투자 성향, 총 자산, 투자 자산, 보유 주식) 를 통하여 유저를 개인화하고,
이에 적합한 상품들을 조합하여 모든 월에 수익을 창출 할 수 있게 합니다.

메인 기능

  • 주식 개별 종목 매매(한국/미국)
  • 배당주 조합 추천 및 조합 생성 구매
  • 부동산 p2p 종목 매매 및 추천
  • 에너지 p2p 종목 매매 및 추천
  • 캘린더를 통한 배당 일정 관리
  • 마이데이터를 활용한 개인화 및 통합적 자산 관리


Tech Stacks

Spring Boot Node.js

MariaDB MongoDB Redis

Apache Kafka socket Docker

AWS EC2 AWS RDS AWS S3



Project Architecture

user user

MSA 구조

  • 도메인 별 5개의 서버(Spring boot)와 5개의 데이터베이스(Maria DB) (repository) : 유저, 주식, 부동산p2p, 에너지p2p, 오더 서버
  • 소켓 서버(NodeJs)와 체결 및 거래 DB(Mongo DB) (repository): 실시간 데이터 통신, 이벤트 핸들링 최적화
  • Kafka 서버 : 비동기 통신. kafka 2.8.0, Zookeeper 등

서버 라우팅 & 로드 밸런싱

  • ELB : 서버의 탄력적인 확장성과 안정적인 운영을 위하여 
서로 다른 AZ의 서버로 로드밸런싱. 트래픽 분산
  • PM2 : 클러스터 모드를 활용하여 서버 클러스터링 (scale out 전략)
  • NginX : 로드밸런싱 configuration 을 활용하여
클러스터링 된 서버 로드 밸런싱. 클라이언트 - 서버, 서버 - 서버 라우팅

서버 간 결합도 감소

  • 일부 유저 정보 반정규화
  • Spring Security 를 활용한 인증/인가

통신

  • 동기적 통신(HTTP) : 신뢰성이 보장되어야 하는 로직 및 인증/검사 등의 선순위 로직
  • 비동기 통신(Kafka 메세지 큐잉) : 인증/검사 등의 순서가 완료된 단방향 로직
  • socket 통신(webSocket, Socket.io) : 실시간 렌더링, 실시간 호가 매매, 미체결 주문에 대한 체결


ERD

MSA 환경 구축을 위해 도메인 별로 DB를 나누어 구축하였습니다.

user stock order estate energy

Main Features

배당주 조합 추천 및 매매

imageimageimage

개별 주식 조회 및 매매

imageimageimage

P2P 조회 및 매매

imageimageimage

캘린더 및 메인 페이지

imageimageimage


Project Structure

Backend:


├─energy-server
│      └─src
│      ├─main
│      │  ├─java
│      │  │  └─donTouch
│      │  │      └─energy_server
│      │  │          ├─energy
│      │  │          │  ├─domain
│      │  │          │  ├─dto
│      │  │          │  └─service
│      │  │          ├─kafka
│      │  │          │  ├─dto
│      │  │          │  └─service
│      │  │          └─utils
│      │  └─resources
│      └─test
│          └─java
│              └─donTouch
│                  └─energy_server
├─estate-server
│      └─src
│      ├─main
│      │  ├─java
│      │  │  └─donTouch
│      │  │      └─estate_server
│      │  │          ├─estate
│      │  │          │  ├─domain
│      │  │          │  ├─dto
│      │  │          │  ├─service
│      │  │          │  └─utils
│      │  │          ├─kafka
│      │  │          │  ├─dto
│      │  │          │  └─service
│      │  │          └─utils
│      │  └─resources
│      └─test
│          └─java
│              └─donTouch
│                  └─estate_server
├─order-server
│      └─src
│      ├─main
│      │  ├─java
│      │  │  └─donTouch
│      │  │      └─order_server
│      │  │          ├─bankAccount
│      │  │          │  ├─domain
│      │  │          │  ├─dto
│      │  │          │  └─service
│      │  │          ├─holding
│      │  │          │  ├─domain
│      │  │          │  ├─dto
│      │  │          │  └─service
│      │  │          ├─kafka
│      │  │          │  ├─dto
│      │  │          │  └─service
│      │  │          ├─log
│      │  │          │  ├─domain
│      │  │          │  ├─dto
│      │  │          │  └─service
│      │  │          └─utils
│      │  └─resources
│      └─test
│          └─java
│              └─donTouch
│                  └─order_server
├─src
│  ├─main
│  │  └─java
│  │      └─donTouch
│  │          └─backend_server
│  └─test
│      └─java
│          └─donTouch
│              └─backend_server
├─stock-server
│  └─src
│      ├─main
│      │  ├─java
│      │  │  └─donTouch
│      │  │      └─stock_server
│      │  │          ├─dividend
│      │  │          │  ├─domain
│      │  │          │  ├─dto
│      │  │          │  └─service
│      │  │          ├─kafka
│      │  │          │  ├─dto
│      │  │          │  └─service
│      │  │          ├─krStock
│      │  │          │  ├─domain
│      │  │          │  ├─dto
│      │  │          │  └─service
│      │  │          ├─stock
│      │  │          │  ├─domain
│      │  │          │  ├─dto
│      │  │          │  └─service
│      │  │          ├─usStock
│      │  │          │  ├─domain
│      │  │          │  ├─dto
│      │  │          │  └─service
│      │  │          └─web
│      │  │              └─dto
│      │  └─resources
│      └─test
│          └─java
│              └─donTouch
│                  └─stock_server
├─user-server
│  └─src
│      ├─main
│      │  ├─java
│      │  │  └─donTouch
│      │  │      └─user_server
│      │  │          ├─kafka
│      │  │          │  ├─dto
│      │  │          │  └─service
│      │  │          ├─like
│      │  │          │  ├─domain
│      │  │          │  ├─dto
│      │  │          │  └─service
│      │  │          ├─oauth
│      │  │          │  ├─config
│      │  │          │  ├─domain
│      │  │          │  ├─dto
│      │  │          │  └─service
│      │  │          ├─user
│      │  │          │  ├─domain
│      │  │          │  ├─dto
│      │  │          │  ├─service
│      │  │          │  └─utils
│      │  │          ├─userEnergy
│      │  │          │  ├─domain
│      │  │          │  ├─dto
│      │  │          │  └─service
│      │  │          ├─userEstate
│      │  │          │  ├─domain
│      │  │          │  ├─dto
│      │  │          │  └─service
│      │  │          └─userStock
│      │  │              ├─domain
│      │  │              ├─dto
│      │  │              └─service
│      │  └─resources
│      └─test
│          └─java
│              └─donTouch
│                  └─user_server

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 99.2%
  • Other 0.8%