{"id":23522275,"url":"https://github.com/depromeet/street-drop-server","last_synced_at":"2025-04-07T10:29:14.340Z","repository":{"id":153899381,"uuid":"631033062","full_name":"depromeet/street-drop-server","owner":"depromeet","description":"StreetDrop 🎶 Location based music sharing social service","archived":false,"fork":false,"pushed_at":"2024-10-21T06:26:58.000Z","size":35323,"stargazers_count":89,"open_issues_count":19,"forks_count":0,"subscribers_count":3,"default_branch":"dev","last_synced_at":"2024-10-21T17:32:17.229Z","etag":null,"topics":["admin","geospatial","geospatial-data","multimodule","mysql","spring-boot","springboot3"],"latest_commit_sha":null,"homepage":"http://docs.street-drop.com","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/depromeet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-04-21T18:47:20.000Z","updated_at":"2024-10-21T06:27:00.000Z","dependencies_parsed_at":"2023-09-29T03:56:03.845Z","dependency_job_id":"2c9333a9-842e-49d5-a549-59f074e92164","html_url":"https://github.com/depromeet/street-drop-server","commit_stats":{"total_commits":204,"total_committers":4,"mean_commits":51.0,"dds":0.3480392156862745,"last_synced_commit":"e469d5e043a4b94301da47879cc097e326275228"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/depromeet%2Fstreet-drop-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/depromeet%2Fstreet-drop-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/depromeet%2Fstreet-drop-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/depromeet%2Fstreet-drop-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/depromeet","download_url":"https://codeload.github.com/depromeet/street-drop-server/tar.gz/refs/heads/dev","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247635108,"owners_count":20970671,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["admin","geospatial","geospatial-data","multimodule","mysql","spring-boot","springboot3"],"created_at":"2024-12-25T17:15:57.273Z","updated_at":"2025-04-07T10:29:14.315Z","avatar_url":"https://github.com/depromeet.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Street Drop - 스트릿 드랍 \u003ca href=\"https://apps.apple.com/kr/app/%EC%8A%A4%ED%8A%B8%EB%A6%BF%EB%93%9C%EB%9E%8D-street-drop/id6450315928\"\u003e\u003cimg src=\"https://github.com/siyeonSon/ReadmeImage/blob/main/street-drop-server/app-logo.png\" align=\"left\" width=\"100\"\u003e\u003c/a\u003e\n\n[![Hits](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Fdepromeet%2Fstreet-drop-server\u0026count_bg=%2328DBE6\u0026title_bg=%232D3540\u0026icon=\u0026icon_color=%23E7E7E7\u0026title=hits\u0026edge_flat=false)](https://hits.seeyoufarm.com)\n[![codecov](https://codecov.io/gh/depromeet/street-drop-server/branch/dev/graph/badge.svg?token=7EHWI73ZQU)](https://codecov.io/gh/depromeet/street-drop-server)\n[![Github Action](https://github.com/depromeet/street-drop-server/actions/workflows/coverage.yml/badge.svg)](https://github.com/depromeet/street-drop-server/actions)\n\n\n## 📚 Quick Link\n- #### 🏠 [Project Introduction](https://docs.street-drop.com/docs/service-intro)\n- #### 📚 [Server Documents](https://docs.street-drop.com/)\n- #### 📱 [Application App Store Download](https://apps.apple.com/kr/app/%EC%8A%A4%ED%8A%B8%EB%A6%BF%EB%93%9C%EB%9E%8D-street-drop/id6450315928)\n## 💁‍♂️ Introduction\n![intro-main](https://github.com/siyeonSon/ReadmeImage/blob/main/street-drop-server/intro-main.jpeg?raw=true)\n\n![intro-description](https://github.com/siyeonSon/ReadmeImage/blob/main/street-drop-server/intro-description.jpeg?raw=true)\n![home](https://github.com/siyeonSon/ReadmeImage/blob/main/street-drop-server/home.jpeg?raw=true)\n![let's-go](https://github.com/siyeonSon/ReadmeImage/blob/main/street-drop-server/lets-go.jpeg?raw=true)\n\n## 💁‍♀️ Documents\n- [Software Requirement Specification](https://docs.street-drop.com/docs/software-requirement-specification/Intrduction)\n- [Software Design Description](https://docs.street-drop.com/docs/software-design-description/Intrduction)\n- [Software Test Specification](https://docs.street-drop.com/docs/software-test-specification/Intrduction)\n- [Software Line Test Coverage Report](https://app.codecov.io/gh/depromeet/street-drop-server)\n- [Street Drop Dev Blog](https://docs.street-drop.com/blog)\n\n\n\n\n## 🚎 Architecture\n![server-architecture](https://github.com/seonghun-dev/ReadmeImage/blob/main/src/street-drop/architecture.jpg?raw=true)\n- 비용 절감을 위해서 Test(Dev), Admin 서버는 홈서버를 통해서 운영하고 있으며, Prod 서버는 서비스의 안정성을 위해서 AWS EC2를 사용하여 운영하고 있습니다.\n- 네트워크 IO가 주된 작업이고, 외부 API만 연동되고 데이터 베이스에 의존성이 없는 검색 서버는 별도로 분리하여 구성하였습니다.\n- 유저 레벨 업데이트, 예약 푸시 발송등을 위하여, 배치서버, 알림 서버를 분리하여 구성하였습니다.\n\n### 🗄️ Directory Structure and Multi Module\n\n#### 📂 Directory Structure\n```\n├── .github\n├── backend\n│   ├── streetdrop-admin  # 관리자 웹 어플리케이션\n│   │   ├── streetdrop-admin-server  # 관리자 웹 API 서버\n│   │   ├── streetdrop-admin-web # 관리자 웹 프론트엔드\n│   │   └── streetdrop-admin-web-server # 관리자 웹 프론트엔드 정적 배포용 서버\n│   ├── streetdrop-api  # API 서버\n│   ├── streetdrop-batch  # 배치 서버\n│   ├── streetdrop-common  # 공통 모듈\n│   ├── streetdrop-domain  # 도메인 모듈\n│   ├── streetdrop-notification  # 알림 서버\n│   └── streetdrop-search  # 검색 서버\n├── docs # 문서관리용 폴더\n└── infra # 인프라 관리용 폴더 - Grafana, Prometheus, Jenkins\n```\n- 어드민의 경우 프론트 엔드를 Spring Boot로 정적 배포할 경우, 빌드 시간이 오래걸려 Node.js로 정적파일을 배포하고 있습니다.\n\n#### 🧩 Multi Module\n\n![multi-module](https://github.com/seonghun-dev/ReadmeImage/blob/main/src/street-drop/multi-module.png?raw=true)\n\n- 멀티 모듈을 적용하여 역할에 따라 모듈을 분리하였습니다.\n- Common 모듈은 Validation등의 순수 자바 코드, Domain 모듈은 엔티티 정보를 담고 있는 모듈로 구성되어 있습니다.\n- 각 API, 배치, 알림, 검색 서버는 Domain 모듈을 의존성으로 가지고 있으며, 모듈간의 의존성은 상위 모듈이 하위 모듈만을 의존하도록 구성하였습니다.\n\n### 📈 Dependency and Quick Start\n#### 📦 Dependency\n- 기본적인 의존성입니다. 자세한 의존성은 각 모듈별 build.gradle 파일과 문서를 참고해주세요.\n  - Java 19\n  - Gradle 7.6.1\n  - MySQL 8.0.33\n  - Spring Boot 3.0.6\n\n#### 🚀 Quick Start\n- 모듈 별로 빌드하기 위해서는 backend 디렉토리에서 `./gradlew :{모듈명}:build` 명령어를 사용합니다.\n- 예를 들어, streetdrop-api 모듈을 빌드하기 위해서는 backend 디렉토리에서 `./gradlew streetdrop-api:build` 명령어를 사용합니다.\n- 프로파일은 `dev, prod, local`로 구성되어 있으며, 각 환경별로 Swagger 지원, API 테스트용 헤더등이 다르게 구성되어 있으므로 적절한 프로파일을 선택해서 사용해야 합니다.\n\n\n### 🖥️ Tech Stack\n#### Framework - \u003cimg src=\"https://img.shields.io/badge/Spring Boot-6DB33F?style=for-the-social\u0026logo=Spring Boot\u0026logoColor=white\"\u003e  \u003cimg src=\"https://img.shields.io/badge/Gradle-02303A?style=for-the-social\u0026logo=Gradle\u0026logoColor=white\"\u003e\n\n#### ORM - \u003cimg src=\"https://img.shields.io/badge/Spring Data JPA-6DB33F?style=for-the-social\u0026logo=Databricks\u0026logoColor=white\"\u003e\n\n#### Authorization - \u003cimg src=\"https://img.shields.io/badge/Spring Security-6DB33F?style=for-the-social\u0026logo=springsecurity\u0026logoColor=white\"\u003e  \u003cimg src=\"https://img.shields.io/badge/JSON Web Tokens-000000?style=for-the-social\u0026logo=JSON Web Tokens\u0026logoColor=white\"\u003e\n\n#### Test - \u003cimg src=\"https://img.shields.io/badge/JUnit5-25A162?style=for-the-sociak\u0026logo=junit5\u0026logoColor=white\"\u003e \u003cimg src=\"https://img.shields.io/badge/CodeCov-F01F7A?style=for-the-sociak\u0026logo=codecov\u0026logoColor=white\"\u003e\n\n#### Database - \u003cimg src=\"https://img.shields.io/badge/MySQL-4479A1.svg?style=for-the-social\u0026logo=MySQL\u0026logoColor=white\"\u003e  \u003cimg src=\"https://img.shields.io/badge/MongoDB-234ea94b.svg?logo=mongodb\u0026logoColor=white\u0026style=for-the-social\"\u003e\n\n#### AWS - \u003cimg src =\"https://img.shields.io/badge/AWS EC2-FF9900?style=for-the-social\u0026logo=amazonec2\u0026logoColor=white\"\u003e  \u003cimg src =\"https://img.shields.io/badge/AWS S3-69A31?style=for-the-social\u0026logo=amazons3\u0026logoColor=white\"\u003e  \u003cimg src=\"https://img.shields.io/badge/AWS RDS-527FFF?style=for-the-social\u0026logo=amazonrds\u0026logoColor=white\"\u003e  \u003cimg src =\"https://img.shields.io/badge/AWS Cloud Watch-FF4F8B?style=for-the-social\u0026logo=amazoncloudwatch\u0026logoColor=white\"\u003e  \u003cimg src =\"https://img.shields.io/badge/AWS Lambda-F9900?style=for-the-social\u0026logo=awslambda\u0026logoColor=white\"\u003e\n\n#### Monitoring - \u003cimg src=\"https://img.shields.io/badge/Prometheus-E6522C?style=for-the-social\u0026logo=prometheus\u0026logoColor=white\"\u003e  \u003cimg src=\"https://img.shields.io/badge/Grafana-F46800?style=for-the-social\u0026logo=grafana\u0026logoColor=white\"\u003e  \u003cimg src=\"https://img.shields.io/badge/Slack-4A154B?style=for-the-social\u0026logo=slack\u0026logoColor=white\"\u003e\n\n#### Admin Web Page - \u003cimg src=\"https://img.shields.io/badge/React-61DAFB?style=for-the-social\u0026logo=react\u0026logoColor=white\"\u003e  \u003cimg src=\"https://img.shields.io/badge/Node.js-339933?style=for-the-social\u0026logo=node.js\u0026logoColor=white\"\u003e\n\n#### Other - \u003cimg src=\"https://img.shields.io/badge/ Swagger-6DB33F?style=for-the-social\u0026logo=swagger\u0026logoColor=white\"\u003e \u003cimg src=\"https://img.shields.io/badge/Firebase Cloud Messaging-FFCA28?style=for-the-social\u0026logo=firebase\u0026logoColor=white\"\u003e\n\n## 📈 DataBase Schema\n### MySQL Schema\n\n![ERD](https://github.com/siyeonSon/ReadmeImage/blob/main/street-drop-server/ERD.jpeg?raw=true)\n\n\n## 👥 Contributors\n### 👜 Repository\n- [Street Drop IOS Repository](https://github.com/depromeet/street-drop-iOS)\n- [Street Drop Server Repository](https://github.com/depromeet/street-drop-server)\n- [Street Drop Design Behance](https://www.behance.net/gallery/175696753/Street-Drop-Location-based-music-community-services)\n\n### 🧑‍💻 Server Engineers\n|                                                                                                                                                                                                                                                YunYoung                                                                                                                                                                                                                                                 |                                                                                         Seonghun                                                                                          |                                                                                                                                                                                                                                                                  Siyeon                                                                                                                                                                                                                                                                  |\n|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|\n| \u003cimg src=\"https://avatars.githubusercontent.com/u/17813930?v=4\" width=\"100\" height=\"100\" style=\"border-radius: 50%;\"\u003e\u003cbr/\u003e\u003ca href=\"https://www.linkedin.com/in/young-yun-60aa94163\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/윤_영-%230077B5.svg?style=for-the-socail\u0026logo=linkedin\u0026logoColor=white\"/\u003e\u003c/a\u003e\u003cbr/\u003e\u003ca href=\"https://github.com/yunyoung1819\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/yunyoung1819-181717?style=for-the-social\u0026logo=github\u0026logoColor=white\"/\u003e\u003c/a\u003e | \u003cimg src=\"https://avatars.githubusercontent.com/u/80201773?v=4\" width=\"100\" height=\"100\" style=\"border-radius: 50%;\"\u003e\u003cbr/\u003e\u003ca href=\"https://www.linkedin.com/in/seonghun\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/정_성_훈-%230077B5.svg?style=for-the-social\u0026logo=linkedin\u0026logoColor=white\"/\u003e\u003c/a\u003e\u003cbr/\u003e\u003ca href=\"https://github.com/seonghun-dev\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/seonghun_dev-181717?style=for-the-social\u0026logo=github\u0026logoColor=white\"/\u003e\u003c/a\u003e |\u003cimg src=\"https://avatars.githubusercontent.com/u/87802191?s=400\u0026u=a046b207b40b564a97db82bd2264b81727b50b77\u0026v=4\" width=\"100\" height=\"100\" style=\"border-radius: 50%;\"\u003e\u003cbr/\u003e\u003ca href=\"https://www.linkedin.com/in/siyeonson\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/손_시_연-%230077B5.svg?style=for-the-social\u0026logo=linkedin\u0026logoColor=white\"/\u003e\u003c/a\u003e\u003cbr/\u003e\u003ca href=\"https://github.com/siyeonSon\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/siyeonSon-181717?style=for-the-social\u0026logo=github\u0026logoColor=white\"/\u003e\u003c/a\u003e|","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdepromeet%2Fstreet-drop-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdepromeet%2Fstreet-drop-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdepromeet%2Fstreet-drop-server/lists"}