Skip to content

효율적인 알고리즘으로 빠른 속도와 높은 데이터 정합성을 보장하는 주차장 예약 플랫폼

Notifications You must be signed in to change notification settings

final-project-teamB/ParkNav2

Repository files navigation

image image

ParkNav 🚌

주차장을 찾아가는 네비게이션과 같이 쉽게 주차장을 조회하고 예약할 수 있는 플랫폼입니다.

  • 빠르고 정확한 전국 주차장 조회 서비스
  • 편리하고 안정적인 주차장 예약 서비스
  • 효율적인 주차장 운영을 위한 주차장 입•출차 현황 관리 서비스

ParkNav 브로슈어 & 팀노션

📗 ParkNav 브로슈어
📙 ParkNav Notion

프로젝트 소개

  • 프로젝트 이름 : ParkNav
  • 프로젝트 소개 : 예약과 주차의 효율성을 높이는 주차장 예약 플랫폼
  • 프로젝트 목표
    • 데이터 수집 : 실제 주차장 데이터 수집으로 정확한 정보 제공 및 다양한 예약, 입차 출차 데이터 생성
    • 알고리즘 : 예약 안정성과 주차장 운영 효율성을 최대로 구현하는 알고리즘
    • 검색 성능 : 다양한 검색어에 대한 빠르고 정확한 검색 결과 제공
    • 동시성 제어 : 동시적으로 일어나는 다양한 입차, 출차 상황에 대하여 안전하고 정확하게 제어
  • 구현 기능
    • 주차장 검색 및 조회
    • 주차장 예약 기능
    • 마이페이지 기능
    • 차량 관리 기능
    • 관리자 페이지 주차현황 관리
  • 기간 :
    • 2023.03.10 ~ 2023.04.21
  • 팀원 :
이름 GITHUB
BE 김도연 https://github.com/dev-dykim
BE 오세영 https://github.com/osy9536
BE 이재훈 https://github.com/Gem-o-b

기술 스택





주요 기능 소개

주차장 조회 주차장 예약
조회 예약
- 예약하고 싶은 위치 혹은 현재 위치 주변의 주차장을 검색
- 장소 검색, 현위치 주변 검색 기능
- 필터 검색 기능(주차시간, 주차요금, 주차유형)
- 선택한 주차장의 예약 기능
- 선택한 시간별 예상요금 기능
- 현재 예약 가능 차량 수 확인 기능
- 예약이 불가능한 경우 불가능한 시간대 확인 기능
마이페이지 차량관리
마이페이지 차량관리
- 예약, 사용내역 확인 기능(주차장 이름, 차량번호, 예약일시, 주차요금, 관리)
- 예약 취소 기능
- 내 차량 등록 기능
- 대표차량 등록 기능
- 차량 삭제 기능
관리자페이지
관리자페이지
- 입 출차 차량 목록 기능
- 입차 기능
- 출차 기능

시연영상

시연영상 바로가기

서비스 아키텍처

image

기술선택 이유 펼쳐보기
요구 사항 기술 기술 선택 이유
동시성 제어 선택한 기술 :
- Lettuce 스핀락

선택지 :
- Pessimistic Locking
- Redisson 분산락
- Lettuce 스핀락
Lettuce 스핀락
- Version2에서 시간대별 예약 현황 테이블을 만듦으로써 성능적인 면의 상승이 있었지만, 동시성 제어가 실패하게 되면 코어 로직에서 이전 Version1보다 치명적인 문제가 발생할 수 있음
- Pessimistic Locking이 속도면에서 더 좋은 성능을 갖고 있지만, 다음과 같은 단점이 존재
• 동시에 많은 요청이오면 데드락(deadlock)이 발생할 가능성
• 특정 데이터에 락을거는 특성상 해당 로직의 추가적인 수정이 발생시 락의 위치를 바꾸거나 추가적인 락을 걸어야 함
• 완벽한 동시성 제어가 되지 않을 수 있음
→ 동시성 제어의 속도면에서는 Pessimistic Locking이 더 좋은 성능일지라도, 전체적인 프로젝트의 안정성을 위해 Lettuce의 스핀락 사용
CI/CD 선택한 기술 :
- GitHub Actions

선택지 :
- GitHub Actions
- Jenkins
GitHub Actions
- 무료이거나 비용이 저렴할 것
- 짧은 기간에 사용해야하기 때문에 러닝커브 및 예상 리소스가 낮을 것
- EC2에 배포가 가능해야하고 GIT과 연동이 될 것
Test 선택한 기술 :
- Jmeter, JUnit5
Jmeter:
- 대용량 트래픽을 시뮬레이션할 수 있는 테스트 도구로써 Jmeter를 선정:
- 이를 통해 시스템이 정상적으로 대량의 요청을 처리할 수 있는지 확인, 병목 현상 발견:
:
JUnit5:
- 자바 언어를 기반으로 하는 유닛 테스트 도구:
- 단위 테스트 : 단위테스트를 통해 해당 메서드가 정상 작동하는지 확인:
- 통합 테스트 : 동시성 제어 기능을 테스트하고 다중 스레드 환경에서 안정성을 확인
검색 성능 개선 선택한 기술 :
- Fetch Join
- QueryDSL
- Fulltext index
Fetch Join(N+1 문제)
- 부모 엔티티를 조회한 후 연관된 자식 엔티티를 조회하는 과정에서 부모 엔티티 수만큼 자식 엔티티를 조회하는 문제 해결

QueryDSL
- 자바 코드와 유사한 형태로 쿼리를 작성 가능
→ 가독성 향상, 코드 재사용성 향상, 컴파일시 문법 오류 확인 가능
- 런타임에 쿼리를 조건에 따라 다르게 생성하고 실행해야 하는 동적쿼리 생성 가능

Fulltext index(ngram)
- ParkInfo의 name 컬럼에 index를 걺으로써 검색 속도 향상
- 특정 단어, 구 검색 정확성 향상
API 선택한 기술 :
- Kakao map API

선택지 :
- Kakao map API
- Naver map API
Kakao map API
- 선택기준 : 검색 시 다양한 조건에 의해 검색이 가능해야함 ( 건물명, 도로명, 주소 등)
- Naver map API : 주소에 대한 위도, 경도만 검색가능 ( 강남구, 서울시 등 )
- Kakao map API : 검색어에 대한 위도, 경도를 검색가능( 63빌딩, 강남구 등 )

ERD 👨🏻‍

펼쳐보기

image

API

펼쳐보기

API 설계

성능개선

트러블슈팅

About

효율적인 알고리즘으로 빠른 속도와 높은 데이터 정합성을 보장하는 주차장 예약 플랫폼

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published