Skip to content

hsjni0110/ReservationSystem

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

58 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

고속버스 예약 시스템

Spring Boot 기반의 고속버스 예약 시스템입니다. 예약부터 결제까지의 흐름을 이벤트 기반 아키텍처로 처리하며, 동시성 제어, 성능 최적화, 트랜잭션 안정성 확보, 도메인 분리 설계에 중점을 두고 구현한 프로젝트입니다.


프로젝트 구조

ReservationSystem
├── build.gradle
├── settings.gradle
├── README.md
├── docker/                       # DB, Redis 등 인프라 설정
│   └── docker-compose.yml
├── core/
│   └── core-api/                 # DTO, 인터페이스 등 외부 접근용 API
├── outbox-event/                 # Outbox 패턴 기반 이벤트 발행 및 처리
├── account/                      # 계좌 도메인
├── payment/                      # 결제 도메인
├── reservation/                  # 예약 관련 도메인
│   ├── reservation/              # 예약 처리
│   └── vehicle/                  # 버스 및 노선 관리
└── user/                         # 사용자 도메인
    ├── user/                     # 사용자 정보
    └── point/                    # 포인트 처리

기능 요약

  • 사용자 인증 및 계좌 관리
  • 버스 노선, 시간표, 좌석 조회
  • 예약 요청 → 좌석 점유 → 결제 진행 → 포인트 적립
  • 이벤트 기반 비동기 메시징 (Kafka)
  • 동시성 처리: Redis Lock, 비관적/낙관적 Lock
  • 캐시 적용 (Redis)으로 읽기 성능 향상
  • 트랜잭셔널 아웃박스 패턴 기반 정확히 한번 처리
  • 부하 테스트(k6 기반)
  • 멀티 모듈 기반

시스템 문서

문서명 설명
제약조건.md 예약, 결제, 좌석 점유 등의 주요 제약 사항 정의
ERD.md 데이터베이스 테이블 구조와 관계 도식
이벤트 시퀀스.md 예약 → 결제까지의 이벤트 흐름을 시퀀스 다이어그램으로 표현
동시성과 관련된 문제 해결.md Redis Lock, DB Lock 등 다양한 동시성 제어 기법 설명
인덱스를 통한 쿼리 성능 개선.md 주요 쿼리 튜닝 및 인덱스 적용 사례
캐시 적용을 통한 성능 개선.md Redis 캐시 전략과 개선된 응답 시간 분석
트랜잭셔널 아웃박스 패턴 적용.md 트랜잭셔널 아웃박스 패턴, 정확히 한 번 처리 보장 전략
API 부하 테스트 분석과 성능 개선.md 실 사용 시나리오 기반 부하 테스트 결과 정리
멀티 모듈 기반 구조 도입.md 단일 모듈 기반의 구조를 멀티 모듈로 전환하는 과정 정리

🛠 사용 기술 스택

  • Backend: Spring Boot 3.x, Spring Data JPA

  • Messaging: Apache Kafka

  • Database: MySQL 8.x

  • Cache: Redis

  • Infra: Docker, Docker Compose

  • Test & Load: JUnit5, k6

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •