From 2e69a8aeb74be44112e886f7776e6564843824cd Mon Sep 17 00:00:00 2001 From: hseong3243 Date: Sat, 31 Aug 2024 22:42:21 +0900 Subject: [PATCH 1/2] =?UTF-8?q?docs:=20=EB=A6=AC=EB=93=9C=EB=AF=B8=20?= =?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 97 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 88 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 28993646..dfa1c7c8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,21 @@ -## 우아한테크캠프 3팀 +# 우아한 티켓팅 -### 👨‍👩‍👧‍👦 팀원 소개 +## 프로젝트 소개 + +리소스가 한정된 상황에서 대량의 트래픽을 견딜 수 있는 안정적인 티켓팅 서비스입니다. + +## 프로젝트 목표 + +### 핵심 목표 + +- 좌석 선점이 동시에 이루어져도 안전한 티켓팅 시스템을 설계 +- 새로고침해도 순서가 유지되는 친절한 대기열을 시스템을 설계 + +### 부가 목표 + +- 사용자 경험을 향상시키기 위해 실시간 좌석 선점 상황을 클라이언트에 반영 + +## 👨‍👩‍👧‍👦 팀원 소개 @@ -31,21 +46,85 @@
-### 데모 +## 사용 기술 + +
+ + + + + +
+ + + + +
+ + + + + +
+
+ +## 인프라 구성 + +![인프라 구성 excalidraw](https://github.com/user-attachments/assets/06d872ef-eabe-4747-87a8-063ff0fa0e88) + +## 해결한 문제들 + +### 좌석 선점 동시성 제어를 위한 락 방식 비교 및 선정 + +### 짝 프로그래밍을 통한 대기열 시스템 설계 + +![대기열 시스템 구성](https://github.com/user-attachments/assets/4a9b35a2-1c39-47d2-af63-a23b3e649a21) + +![대기열시스템_문제1](https://github.com/user-attachments/assets/dc04c956-c1da-4ff0-bd01-9c63f0a4b873) + +![대기열 시스템 문제2](https://github.com/user-attachments/assets/3d78c90a-01f3-45f8-89b5-b9443a8362b9) + + +### 10,000명을 견딜수 있는 대기열 시스템 검증 + +- 다음 테스트 구성에 따라 부하 테스트를 진행 +- 가상 사용자 2,500명일 때, 대부분의 요청을 1초 안에 처리함을 파악 +- 최종적으로 가상 사용자 10,000명, `남은 순번 조회` 폴링 주기 5초일 때, 대기열 시스템이 안정적으로 동작할 수 있음을 검증 + +스크린샷 2024-08-31 오후 10 09 15 + +스크린샷 2024-08-31 오후 10 18 01 + +![최종 검증](https://github.com/user-attachments/assets/493831f5-01b4-49be-930d-33887efe0204) + + +### 부하 테스트에 기반한 대기열 페이지 응답 시간 개선 + +- Locust RPS, 응답시간 지표에서 그래프 이상을 인지 +- Grafana 모니터링에서 Heap 메모리의 사용과 이상 지점이 유사함을 파악 +- GC 빈도를 낮추기 위해 로직을 개선 +- 가상 사용자 2,500명, 테스트 시간 15분, 시나리오 `남은 순서 조회 API`를 1초 주기로 폴링하여 검증 + +![응답 시간 개선 excalidraw](https://github.com/user-attachments/assets/71cf70a0-622e-4177-9a89-6309e503f053) + +응답 시간 개선2 + + +## 데모 -#### 대기열 화면 +### 대기열 화면 -#### 좌석 선택 화면 +### 좌석 선택 화면 -#### 전체 시나리오 +### 전체 시나리오 https://github.com/user-attachments/assets/eb29c948-4a1c-41fd-a7b5-b6f4d167969c -### ERD +## ERD ![스키마](https://github.com/user-attachments/assets/cc43dfd9-3135-47a4-b584-5e8184f1024d) -### 📜 그라운드 룰 +## 📜 그라운드 룰 - 스크럼과 회고는 10분 이내로 한다. - 화요일에는 야근데이! 9시까지 코딩합니다. @@ -58,6 +137,6 @@ https://github.com/user-attachments/assets/eb29c948-4a1c-41fd-a7b5-b6f4d167969c - 해당 주에 완료하지 못한 개발은 주말에 마무리한다. 그 외 주말 시간은 자유롭게 사용한다. - 비판은 하되, 감정이 상할 수 있는 비난은 하지 않는다. -### 🚷 개발 컨벤션 +## 🚷 개발 컨벤션 https://github.com/woowa-techcamp-2024/Team3-rdParty/wiki/%EC%BB%A8%EB%B2%A4%EC%85%98 From 922689570bb66f483cb845dc86ad6095718cc96b Mon Sep 17 00:00:00 2001 From: hseong3243 Date: Sat, 31 Aug 2024 23:06:26 +0900 Subject: [PATCH 2/2] =?UTF-8?q?docs:=20=EC=A2=8C=EC=84=9D=20=EC=84=A0?= =?UTF-8?q?=EC=A0=90=20=EB=8F=99=EC=8B=9C=EC=84=B1=20=EC=A0=9C=EC=96=B4=20?= =?UTF-8?q?=EB=82=B4=EC=9A=A9=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index dfa1c7c8..c36a4b98 100644 --- a/README.md +++ b/README.md @@ -74,14 +74,27 @@ ## 해결한 문제들 -### 좌석 선점 동시성 제어를 위한 락 방식 비교 및 선정 +### 짝 프로그래밍을 통한 좌석 선점 동시성 제어 방식 비교 및 선정 + +- 좌석 선점을 위한 최적의 락 방식을 찾기 위해 낙관, 비관, 분산락을 구현 +- 다음 테스트 조건에 따라 부하 테스트를 진행 +- 결과에 따라 평균 응답 시간이 가장 낮은 비관락을 선정 + +스크린샷 2024-08-31 오후 10 53 58 + ### 짝 프로그래밍을 통한 대기열 시스템 설계 +#### 기본 설계 + ![대기열 시스템 구성](https://github.com/user-attachments/assets/4a9b35a2-1c39-47d2-af63-a23b3e649a21) +#### 문제1. 언제 사용자를 대기열에서 작업 공간으로 옮길까? + ![대기열시스템_문제1](https://github.com/user-attachments/assets/dc04c956-c1da-4ff0-bd01-9c63f0a4b873) +#### 문제2. 떠나간 사용자와 활성 사용자를 어떻게 구분해야 할까? + ![대기열 시스템 문제2](https://github.com/user-attachments/assets/3d78c90a-01f3-45f8-89b5-b9443a8362b9)