주최 : 신한투자증권
주제 : 개인화된 금융 서비스를 제공하기 위한 클라우드 MSA 환경 구축 및 서비스 개발
서비스 : 웹앱
성과 : 최우수 프로젝트 수상
신의진 | 박유진 | 이한슬 |
---|---|---|
백엔드 테크리더 | 프론트엔드 테크리더 | PM |
허상진 | 박진언 | 이승택 |
---|---|---|
서기 | 팀원 | 팀원 |
- 백엔드 테크리더 및 프로젝트 리딩
- 배당주, 개별주식, 부동산, 에너지 거래체결
- 실시간 소켓 통신
- 비동기 객체 통신
- MSA 설계 및 AWS 인프라 설계
- 배포
1. About
2. Tech Stacks
4. ERD
donTouch 는 투자 상품 추천 및 모의투자, 배당 일정 관리 등의 통합형 자산관리 서비스 입니다.
' 제 2의 월급 만들기 ' 라는 목표로 유저를 개인화하고 배당주, p2p 상품 등의 조합을 추천합니다.
유저의 마이데이터(투자 성향, 총 자산, 투자 자산, 보유 주식) 를 통하여 유저를 개인화하고,
이에 적합한 상품들을 조합하여 모든 월에 수익을 창출 할 수 있게 합니다.
- 주식 개별 종목 매매(한국/미국)
- 배당주 조합 추천 및 조합 생성 구매
- 부동산 p2p 종목 매매 및 추천
- 에너지 p2p 종목 매매 및 추천
- 캘린더를 통한 배당 일정 관리
- 마이데이터를 활용한 개인화 및 통합적 자산 관리
- 도메인 별 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) : 실시간 렌더링, 실시간 호가 매매, 미체결 주문에 대한 체결
MSA 환경 구축을 위해 도메인 별로 DB를 나누어 구축하였습니다.
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