Skip to content

f-lab-edu/ward-study-reservation

Folders and files

NameName
Last commit message
Last commit date
Jan 3, 2024
Apr 21, 2022
Jan 1, 2023
Nov 27, 2022
Oct 21, 2022
Jan 1, 2023
Feb 26, 2023
Nov 28, 2022
Dec 28, 2022
Jan 1, 2023
Apr 21, 2022
Apr 21, 2022
Apr 21, 2022

Repository files navigation

👯‍♀️ ward-study-reservation

스터디모임 룸 예약 서비스 ward-study_image

언제 어디서든 소규모로 사용자들이 스터디모임을 활성화하기 위한 서비스로 도안하였습니다. 스터디를 형성하는 데 많은 갈증을 느끼는 사용자가 하나의 토픽을 중심으로 룸을 예약하여 “몰입의 경험”을 선사하는 것이 이 서비스의 취지입니다.


🔍 서비스 MVP(Minimum Valuable Product)

1. 사용자(리더)가 StudyGroup 등록/참여

2. 사용자(리더)가 Reservation 등록

3. 사용자가 참가한 StudyGroup의 Reservation 조회

4. 해당 Room의 Reservation 조회

5. Reservation의 해당 사용자들에게 Notification 이메일 정기알람


💡 프로젝트 목표

1. 객체 지향 원리를 적용하여 CleanCode를 목표로 유지보수가 용이한 코드 구현

  • 중복되는 코드들, 불필요하게 수정이 일어날 코드들을 최소화해 확장이 용이하게 노력합니다.
  • SOLID 원칙과 디자인패턴의 이해를 바탕을 하여 최대한 도메인 주도 설계를 하기 위해 노력합니다.

2. 단순 기능 구현만이 아닌 대용량 트래픽을 고려한 scale-out에 고려한 서버 구조 설계

  • 서비스가 성장하여 대량의 TPS 수치의 접속자수가 있다고 가정, 그 정도의 트래픽에도 견딜 수 있는 분산 데이터베이스 아키텍쳐를 설계하기 위해 노력했습니다.

3. 문서화를 통한 협업

  • 프론트엔드-백엔드 팀들이 협업하는 환경에서 API 문서를 통한 커퓨니케이션 호율성을 높이기 위해 노력합니다.
  • API 문서를 함께 작성하는 것은 비효율적이기 때문에 Swagger와 같은 툴을 활용하여 문서화와 테스트도 쉽게 처리할 수 있게 합니다.

4. 테스트코드를 통해 코드품질 향상, CI/CD를 통한 자동화 구현

  • 다수의 개발자가 하나의 서비스를 개발해나가는 환경에서는 각자의 코드가 쉽게 배포할 수 있도록 Jenkins를 활용해 배포 자동화하는 설계에도 많은 리소스를 소요하였습니다.
  • CI/CD를 직접 구축하여 애자일한 개발 프로세스를 실현하기 위해 노력합니다.

5. 성능 모니터링으로 프로젝트의 신뢰성을 높임

  • nGrinderJMeter 같은 툴을 사용해 TPS 같은 성능지수를 체크, 트래픽이 많이 발생하는 부분을 모니터링하여 개선점을 찾아냅니다.
  • 그외 로그수집을 하여 개발 오류 파트를 빠르게 찾기 위해 ELK 시스템을 구축하여, 애플리케이션 오류 진단, 인프라 모니터링에 최적화시키기 위해 노력합니다.

🛒 사용 기술 스택

  • Java11
  • SpringBoot2.6
  • Gradle7.4
  • MySQL8.0 / Redis
  • JPA / QueryDsl
  • JUnit5
  • Spring Batch
  • Docker
  • Jenkins
  • JMeter

🔗 CI/CD 구조도

image


🎡 서버 구조도

image


🗃 API 명세서

https://documenter.getpostman.com/view/14757100/2s8YzMY5fG


👁‍🗨 이슈 정리

Wiki Issues & Trouble shooting에서 확인할 수 있습니다!

등등 ...


🔖 Git-Flow 브랜치 및 PR 전략

✳ 참고문헌 : 우아한 형제들 기술블로그 우린 Git-flow를 사용하고 있어요

image

master : 제품으로 출시될 수 있는 브랜치를 의미합니다.

develop : 다음 출시 버전을 개발하는 브랜치입니다. feature에서 리뷰완료한 브랜치를 Merge하고 있습니다.

feature : 기능을 개발하는 브랜치

release : 이번 출시 버전을 준비하는 브랜치

hotfix : 출시 버전에서 발생한 버그를 수정하는 브랜치

  • master를 항상 최신 상태로 만들며, stable 상태로 Product에 배포되는 브랜치 (master = main) 로 삼습니다.
  • 신규개발 건은 develop 을 base로 feature/#이슈번호 or feature/작업명 의 브랜치명으로 생성 후 작업한 다음 PR을 날립니다.
  • 아직 개발 진행 중이라면 In Progress 라벨을 달고, 코드리뷰가 필요한 경우 Asking for Review 라벨을 답니다. 리뷰 후 리팩토링이 필요하다면 추가로 refactoring 라벨을 달아 진행합니다.
  • 모든 PR은 반드시 지정한 리뷰어에게 코드리뷰를 받아야만 합니다.
  • 코드리뷰어의 Approve 를 받아야 Merge pull request 를 할 수 있습니다.

🎞 ER 다이어그램

image


🎨 클라이언트 화면

image