티스토리 뷰
서론
빗썸 테크 아카데미 백엔드 과정으로 뽑히게 되어서 한달정도 교육을 듣고 다시 한달동안 팀 프로젝트 진행하는 방식으로 진행되었습니다.
프로젝트 소개
저희 팀은 프론트앤드 2명, 백엔드 4명으로 구성되었고 진행했던 프로젝트명은 클론코인으로 copy trading 플랫폼 입니다.
copy trading 이란 자신이 원하는 리더에게 원하는 금액만큼을 투자한뒤 리더가 코인을 매매하게 되면 리더를 따라 코인이 자동으로 매매되는 방식입니다.
DDD 설계와 EventStorming
저희는 MSA 방식으로 개발을 진행하기 위해서 DDD에 대해서 공부를 하였고 miro 서비스를 사용해 이벤트 스토밍을 진행하였습니다. 서비스 흐름에 따라 마이크로 서비스를 도출해 도메인을 나눴고, 서비스 간의 관계를 정의하였습니다.
서비스 구조도 및 아키텍처
MSA를 구성하기 위해 API Gateway는 spring cloud gateway를 사용하였고 service discovery는 eureka를 사용하였습니다.
각 서버 간의 통신은 동기 통신에는 api 통신 페인을 사용하였고, 비동기 통신에는 메세지 큐 카프카를 사용하였습니다.
고가용성 확보를 위해 주키퍼 3대로 주키퍼 앙상블을 구현하였고, 카프카 브로커 3대를 사용하여 카프카 클러스터를 구성하였습니다.
전체 서비스는 AWS의 EC2에 배포하였으며, jenkins를 통한 배포 자동화로 MSA의 장점을 살렸습니다.
각 백엔드 서버 간략 소개
User
- 회원가입 및 로그인
- 리더 신청 및 팔로우 관리
- Spring Security + JWT
Analysis
- 리더들의 보유 코인과 평단가 계산
- Wallet, Portfolio, Push 서버에 전달
- Scheduler를 통한 변화 감지, 비동기 메소드 데이터 처리
Wallet
- 매수, 매도 정보에 따라 코인 정보 갱신
- 특정 기간 단위로 수익률 계산
- CQRS 패턴 적용
Portfolio
- 일반 유저의 Copy정보를 관리
- 카피 정보, 수익률, 투자현황을 제공
- Feign client를 통해 WalletRead와 통신
Push
- 리더들의 시그널을 메시지 형식으로 전송하는 서버
- Webflux 사용한 비동기 서보로 구현
- R2DBC api를 통해 DB blocking 해결
시연 영상
메인화면
리더신청
Copy 기능
후기
빗썸 아카데미를 통해 좋은 팀원들과 처음으로 MSA를 사용하여 프로젝트를 해봐서 API Gateway, service discovery 등 몰랐던 부분에 대해서 공부해서 많이 배울 수 있었고 Docker와 kafka를 프로젝트에 사용하면서 익힐 수 있어서 좋은 경험이였던것 같습니다.
그리고 빗썸 오픈 API를 사용하면서 다른 여러가지 재밌는 프로젝트도 해볼 수 있다고 생각이 들어서 나중에 한번 자동매매등 다른 프로젝트를 해보고 싶다고 느꼈습니다.
github : https://github.com/CloneCoin-Project