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