- Software Requirement Specification
- Software Design Description
- Software Test Specification
- Software Line Test Coverage Report
- Street Drop Dev Blog
- 비용 절감을 위해서 Test(Dev), Admin 서버는 홈서버를 통해서 운영하고 있으며, Prod 서버는 서비스의 안정성을 위해서 AWS EC2를 사용하여 운영하고 있습니다.
- 네트워크 IO가 주된 작업이고, 외부 API만 연동되고 데이터 베이스에 의존성이 없는 검색 서버는 별도로 분리하여 구성하였습니다.
- 유저 레벨 업데이트, 예약 푸시 발송등을 위하여, 배치서버, 알림 서버를 분리하여 구성하였습니다.
├── .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로 정적파일을 배포하고 있습니다.
- 멀티 모듈을 적용하여 역할에 따라 모듈을 분리하였습니다.
- Common 모듈은 Validation등의 순수 자바 코드, Domain 모듈은 엔티티 정보를 담고 있는 모듈로 구성되어 있습니다.
- 각 API, 배치, 알림, 검색 서버는 Domain 모듈을 의존성으로 가지고 있으며, 모듈간의 의존성은 상위 모듈이 하위 모듈만을 의존하도록 구성하였습니다.
- 기본적인 의존성입니다. 자세한 의존성은 각 모듈별 build.gradle 파일과 문서를 참고해주세요.
- Java 19
- Gradle 7.6.1
- MySQL 8.0.33
- Spring Boot 3.0.6
- 모듈 별로 빌드하기 위해서는 backend 디렉토리에서
./gradlew :{모듈명}:build
명령어를 사용합니다. - 예를 들어, streetdrop-api 모듈을 빌드하기 위해서는 backend 디렉토리에서
./gradlew streetdrop-api:build
명령어를 사용합니다. - 프로파일은
dev, prod, local
로 구성되어 있으며, 각 환경별로 Swagger 지원, API 테스트용 헤더등이 다르게 구성되어 있으므로 적절한 프로파일을 선택해서 사용해야 합니다.
YunYoung | Seonghun | Siyeon |
---|---|---|