Skip to content

Commit

Permalink
docs: readme update
Browse files Browse the repository at this point in the history
  • Loading branch information
HiiWee committed Sep 1, 2024
1 parent 32f86ef commit 1b7580b
Showing 1 changed file with 32 additions and 10 deletions.
42 changes: 32 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
![우테캠-7-ELEVEN-발표자료 (1)-이미지-0](https://github.com/user-attachments/assets/820e0254-c99a-4927-90eb-4fc3a94777e0)

<br/>
<br><br>

## 📚 프로젝트 소개
> 시간이 지날수록 가격이 떨어지는 경매! 기다리면 더 싸게 살 수 있지만, 그 전에 재고가 없을지도 모릅니다!
Expand All @@ -9,7 +9,7 @@

[API-DOCS](https://woowa-techcamp-2024.github.io/Team7-ELEVEN/src/main/resources/docs/index.html)

<br/>
<br><br>

## 🔖 기능

Expand All @@ -20,42 +20,54 @@
<figcaption align="center">UI</figcaption>
</p>

<br>

### 가격 하락 전략
- 경매 시간은 최대 1시간, 가격 하락주기는 경매 시간에 나누어떨어지는 시간이어야 합니다.
- 따라서 초, 분, 시 모두 하락주기로 선정될 수 있습니다.
- 이를 동적으로 계산하기보다 클라이언트 요청이 왔을 때 정적으로 계산해 주는 방식을 채택했습니다.

<br>

### 경매 목록
> 사용자는 경매 목록을 확인한다.
- 사용자는 해당 페이지를 통해 경매 목록을 확인할 수 있습니다.
- 각 경매는 상품 이름, 시작 시각, 종료 시각, 시작 가격, 현재 상태를 가집니다.
- 시작 시각과 종료 시각을 기준으로 현재 상태와 남은 시간을 사용자에게 출력합니다.

<br>

### 경매 입찰
> 사용자는 경매를 입찰할 수 있다.
- 사용자는 상세 페이지에서 경매 재고와 할인 정책을 확인할 수 있습니다.
- 경매의 가격과 재고는 실시간으로 변화합니다.
- 사용자는 현재 가격을 기준으로 입찰을 진행할 수 있습니다.

<br>

### 구매 내역
> 사용자는 자신이 구매한 내역을 확인한다.
- 사용자는 성공적으로 입찰을 진행한 결과를 내역에 확인할 수 있습니다.
- 각 내역은 거래 단가, 수량 그리고 상태를 가집니다.
- 사용자는 경매가 종료된 이후에 구매 내역 상세 페이지에서 환불을 진행할 수 있습니다.

<br/>
<br><br>

## 🏛️ 아키텍처

### 서버 아키텍처
| [dev (초기 버전)](https://github.com/woowa-techcamp-2024/Team7-ELEVEN/tree/dev) | [dev2 (개선 버전)](https://github.com/woowa-techcamp-2024/Team7-ELEVEN/tree/dev2) |
|:-----------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------:|
|
![image](https://github.com/user-attachments/assets/36435b6d-153a-4fb2-abfa-d77d69a8d28c) | ![image](https://github.com/user-attachments/assets/ef57d280-d60d-4e3b-a0af-1d5e8fb7badd) |
**[dev (초기 버전)](https://github.com/woowa-techcamp-2024/Team7-ELEVEN/tree/dev)**
![image](https://github.com/user-attachments/assets/36435b6d-153a-4fb2-abfa-d77d69a8d28c)

**[dev2 (개선 버전)](https://github.com/woowa-techcamp-2024/Team7-ELEVEN/tree/dev2)**
![image](https://github.com/user-attachments/assets/ef57d280-d60d-4e3b-a0af-1d5e8fb7badd)

- EC2 T3.small 3대 (`Spring Boot 3.3.2` 2대, `Redis 7.2.5` 1대)
- RDS T3.small 1대 (`MySQL 8.0.35`)
- ALB

<br>

### 기술 스택
**Language** | Java 17

Expand All @@ -69,14 +81,15 @@

**Docs** | Spring REST Docs 3.0.1

<br/>
<br><br>

## 💁🏻‍♂️ 협업 전략

### 그라운드 룰
- 열린 의사소통: 하고 싶은 말이 있으면 바로 이야기하기!
- 일일 스크럼: 매일 오전 10시에 진행 (오늘의 기분, 어제 진행한 업무, 금일 진행할 업무)

<br>

### 브랜치 전략

Expand All @@ -89,18 +102,21 @@
|docs/{issue-number} | 문서 |
|chore/{issue-number} | 기타 |

<br>

### Merge 전략

- 코드 리뷰: 최소 1명 이상의 승인 필요
- 자동화된 테스트: CI/CD 파이프라인의 모든 테스트 통과 필수

<br>

### 도메인 이해: 비즈니스 로직 집중하기
- 팀 내 경매 도메인 전문성 부족을 인식했습니다.
- 이를 해결하기 위해, 프레임워크 의존성이 없는 순수 도메인 모델과 비즈니스 로직에 집중하는 환경에서 프로젝트를 시작했습니다.
- 기술적인 부분을 배제하고 개발을 진행하여, 팀 전체가 경매 도메인의 핵심 개념을 빠르게 이해할 수 있었습니다.

<br>

### 스토리 기반의 태스크 분할

Expand All @@ -123,7 +139,7 @@
- 작은 Task를 기반으로 스프린트 주기를 더 짧게 가져갈 수 있음


<br/>
<br><br>

## 🤔 기술적 고민

Expand All @@ -147,6 +163,8 @@

</details>

<br>

### ⌛️ 적절한 Lock Waiting Time & Lease Time 선택하기

- 락을 적용 한 후 입찰 로직의 평균 소요 시간은 6ms라는 것을 확인 했지만, 부하 테스트를 진행하니 실패율이 높아짐
Expand Down Expand Up @@ -179,6 +197,8 @@

</details>

<br>

### 💰 분산락과 트랜잭션을 함께 사용
- 경매 입찰 시 재고와 포인트는 차감됐지만, 간헐적으로 경매 입찰에 실패하는 현상을 발견
- 분산락의 유효시간보다 트랜잭션 실행시간이 길게 되어 임계구역이 공유됐던 것이 원인이었고 트랜잭션 타임아웃을 통해 해결함
Expand Down Expand Up @@ -209,6 +229,8 @@

</details>

<br>

### 🚪 아키텍처 변경을 통한 Throughput 개선
- 경매 특성상 가격이 떨어지는 시점에 입찰 요청이 몰릴 것으로 예상하여 순간적인 부하가 높을 것으로 예상이 됐고, 부하 테스트를 진행함
- 기존 아키텍처는 모든 입찰 요청을 동기로 처리하고 있어서 부하가 높아질 경우 더 늦은 응답을 보내는 걸 테스트 결과를 통해 발견
Expand Down Expand Up @@ -237,7 +259,7 @@

</details>

<br/>
<br><br>

## 😊 프로젝트 팀원
| 이호석 | 유동근 | 오민석 | 최현식 |
Expand Down

0 comments on commit 1b7580b

Please sign in to comment.