/wealth-marble-backend

투자의 시대. 부의 마블에서 휴양지 투자로 수익창출해보자! - Backend Repo

Primary LanguageJava

"부의마블" 백엔드

서비스 소개

우리가 어렸을 때 한 번 쯤은 부루마블 게임을 하면서 해외에 땅을 사고 집을 짓고 호텔을 지은 적이 많이 있습니다. 즐겁게 게임했던 그 순간을 현실에서 진행하며 꿈을 이루어 가는 것은 어떨까요? 휴양지에 투자하여 수익도 얻고 내가 원할 때는 휴양도 즐기는 YOLO의 삶을 저희와 함께 이루어가요.

부의 마블 기획서

배포 🖇

주요기능

  1. 부동산 공모 등록 기능
    • 해외에 휴양지를 짓고 싶은 사람이 부동산 공모를 등록할 수 있는 기능
  2. 부동산 공모 참여 기능
    • 해외 휴양지를 만드는 과정에 참여를 하고 싶은 투자자들이 돈을 넣을 수 있는 기능
  3. 지분 거래 기능
    • 해외 휴양지 지분을 가지고 있는 사람들과 일반 사용자들이 공모 후 풀린 지분을 구매하거나 판매 가능

팀원

김진성 권나영 김도형 권유리
권나영 김도형 권유리
Backend Backend Frontend Frontend

Backend Infra

서버 Architecture

image

  • AWS EC2, RDS, S3를 사용하고 있습니다.
  • EC2 인스턴스에서 API, WEBSOCKET, BATCH Docker Container가 구동되고 있습니다.
  • Redis는 Master와 Slave를 두고 Slave는 Master의 내용을 snapshot으로 가지고 있습니다.
  • Kafka는 zookeeper와 1개의 kafka가 운영되고 있으며 STOMP broker역할을 하고 있습니다.

자동 배포 Process

image

  • Github PR review 후 dev branch로 PR merge 되면, Github Actions workflow 가 시작됩니다.
  • Github actions에서 수정이 발생한 모듈을 확인하여 빌드 후 Docker Image화 하여 Docker hub로 올립니다.
  • EC2에 ssh로 접속하여 Docker hub에 올라간 Docker Image파일을 받아와 실행시킵니다.
  • 모든 과정이 완료되면 Discord를 통해 성공,실패 여부를 알립니다.

기술 스택

Java Spring Boot Spring Boot Websocket JUnit5

MySQL Redis Apache Kafka GitHub Actions Docker

AWS S3 AWS EC2 AWS RDS

기술적 도전

1. Batch System 구현하기

"부의마블" 프로젝트 상에는 존재하지 않는 휴양지 Owner의 행위를 대체하고 주식 거래 시스템과 같이 주기적으로 저장해야하는 거래 정보를 자동으로 생성하기 위하여 자동화 시스템을 도입하였습니다.

2. QueryDSL 도입

복잡한 쿼리가 필요한 경우나 날짜 비교, Pagination을 적용할 때 QueryDSL로 최적화를 진행하였습니다.

3. Redis 다양하게 활용해보기

Redis 를 도입하며 랭킹 시스템과 동시성 제어를 구현하였습니다.

4. 기타


Backend 주요 개발 사항

  • Spring Security를 사용한 Google OAuth 로그인
  • Redis Distribution Lock을 사용한 동시성 제어
  • Redis Sorted Set을 활용한 랭킹 시스템 구현
  • Kafaka 를 활용한 STOMP broker 연결
  • Websocket을 사용한 실시간 마켓 거래 기능 구현
  • Spring @Transactional 이용하여 주문 거래 로직 구현
  • Batch 및 Schedular를 활용한 휴양지 상태 변경 자동화 및 일일 거래 정보 통계화
  • Querydsl을 사용한 컴파일 시점에 SQL 오류 감지 및 동적 쿼리 작성.
  • S3 이미지 업로드 및 관리
  • POSTMAN을 통한 API Test 및 문서화
  • Service Layer 및 Repository Layer 단위 테스트 작성
  • Docker를 이용하여 CD 구현