Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 89 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,89 @@
# nullnullTicket
내일배움캠프 티케팅사이트만들기(2025.05.16~2025.05.26)
# NullNull Ticket

인터파크 티켓을 벤치마킹한 **웹 기반 티켓 예매 서비스**입니다.
사용자는 공연 정보를 조회하고 원하는 좌석을 직접 선택하여 예매할 수 있으며,
관리자는 공연장, 공연 및 회차 정보를 등록 및 관리할 수 있습니다.

## 주요 기능

### 사용자 기능
- 공연 조회 및 회차 확인
- 좌석 선택 및 티켓 예매
- 예매 내역 조회 및 취소
- 카카오 소셜 로그인

### 관리자 기능
- 공연장 및 공연 등록
- 공연 회차 관리
- 좌석 정보 등록 및 수정

### 시스템 특징
- 동시성 제어: 낙관적 락(`@Version`)으로 안정적인 좌석 예매
- 캐싱 전략: Redis로 공연 정보 캐싱, 조회수 초기화 스케줄링
- 대기열 관리: Redis ZSet 기반 큐 시스템
- CI 자동화: GitHub Actions로 빌드 및 테스트 자동화

---

## 와이어프레임
-![와이어 프레임](images/wireframe.png)

---

## ERD & API 명세
-![ERD](images/erd.png)

-[API 명세서](https://www.notion.so/teamsparta/6-1e52dc3ef51480adbe2cc285458c44e2#1e52dc3ef514818e9226ed34c1f3563d)

---

## 기술 스택

| 항목 | 사용 기술 |
|------------|-----------|
| Backend | Spring Boot, JPA, Spring Security |
| DB | MySQL |
| Cache | Redis |
| CI/CD | GitHub Actions |
| Auth | JWT, Kakao OAuth |

---

## 시연 영상
[시연 영상 보기](#)

---

## 트러블슈팅 요약

### 1. 동시성 제어
- 문제: 같은 좌석을 여러 사용자가 동시에 예매할 경우 충돌
- 해결: Redisson 기반 분산락 + AOP 적용

### 2. Redis 캐싱 최적화
- 문제: 공연/회차 조회시 성능 저하
- 해결: Redis 캐시 도입 → 조회 시간 75% 단축

---

## 팀원 소개

| 이름 | 역할 |
|--------|------|
| 오동원 | 결제 시스템, CI 환경 구축 |
| 임지윤 | 인증/인가, 소셜 로그인 |
| 김채진 | 예매 로직 및 데이터 관리 |
| 이희망 | 캐싱, 공연 조회 API |
| 이수빈 | 좌석 및 회차별 좌석 상태, 예매 시스템 |

---

## 프로젝트 기간
2025.05.16 ~ 2025.05.26

---

## Contact
- Email: [email protected]
- Notion, Figma, Wiki 등 협업 자료 링크: [공유 필요 시 추가]

Binary file added images/erd.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/wireframe.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.