/street-drop-server

StreetDrop 🎶 Location based music sharing social service

Primary LanguageJava

Street Drop - 스트릿 드랍

Hits codecov Github Action

📚 Quick Link

💁‍♂️ Introduction

intro-main

intro-description home let's-go

💁‍♀️ Documents

🚎 Architecture

server-architecture

  • 비용 절감을 위해서 Test(Dev), Admin 서버는 홈서버를 통해서 운영하고 있으며, Prod 서버는 서비스의 안정성을 위해서 AWS EC2를 사용하여 운영하고 있습니다.
  • 네트워크 IO가 주된 작업이고, 외부 API만 연동되고 데이터 베이스에 의존성이 없는 검색 서버는 별도로 분리하여 구성하였습니다.
  • 유저 레벨 업데이트, 예약 푸시 발송등을 위하여, 배치서버, 알림 서버를 분리하여 구성하였습니다.

🗄️ Directory Structure and Multi Module

📂 Directory Structure

├── .github
├── backend
│   ├── streetdrop-admin  # 관리자 웹 어플리케이션
│   │   ├── streetdrop-admin-server  # 관리자 웹 API 서버
│   │   ├── streetdrop-admin-web # 관리자 웹 프론트엔드
│   │   └── streetdrop-admin-web-server # 관리자 웹 프론트엔드 정적 배포용 서버
│   ├── streetdrop-api  # API 서버
│   ├── streetdrop-batch  # 배치 서버
│   ├── streetdrop-common  # 공통 모듈
│   ├── streetdrop-domain  # 도메인 모듈
│   ├── streetdrop-notification  # 알림 서버
│   └── streetdrop-search  # 검색 서버
├── docs # 문서관리용 폴더
└── infra # 인프라 관리용 폴더 - Grafana, Prometheus, Jenkins
  • 어드민의 경우 프론트 엔드를 Spring Boot로 정적 배포할 경우, 빌드 시간이 오래걸려 Node.js로 정적파일을 배포하고 있습니다.

🧩 Multi Module

multi-module

  • 멀티 모듈을 적용하여 역할에 따라 모듈을 분리하였습니다.
  • Common 모듈은 Validation등의 순수 자바 코드, Domain 모듈은 엔티티 정보를 담고 있는 모듈로 구성되어 있습니다.
  • 각 API, 배치, 알림, 검색 서버는 Domain 모듈을 의존성으로 가지고 있으며, 모듈간의 의존성은 상위 모듈이 하위 모듈만을 의존하도록 구성하였습니다.

📈 Dependency and Quick Start

📦 Dependency

  • 기본적인 의존성입니다. 자세한 의존성은 각 모듈별 build.gradle 파일과 문서를 참고해주세요.
    • Java 19
    • Gradle 7.6.1
    • MySQL 8.0.33
    • Spring Boot 3.0.6

🚀 Quick Start

  • 모듈 별로 빌드하기 위해서는 backend 디렉토리에서 ./gradlew :{모듈명}:build 명령어를 사용합니다.
  • 예를 들어, streetdrop-api 모듈을 빌드하기 위해서는 backend 디렉토리에서 ./gradlew streetdrop-api:build 명령어를 사용합니다.
  • 프로파일은 dev, prod, local로 구성되어 있으며, 각 환경별로 Swagger 지원, API 테스트용 헤더등이 다르게 구성되어 있으므로 적절한 프로파일을 선택해서 사용해야 합니다.

🖥️ Tech Stack

Framework -

ORM -

Authorization -

Test -

Database -

AWS -

Monitoring -

Admin Web Page -

Other -

📈 DataBase Schema

MySQL Schema

ERD

👥 Contributors

👜 Repository

🧑‍💻 Server Engineers

YunYoung Seonghun Siyeon