Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/f-lab-edu/yousinsa

MUSINSA 같은 온라인 편집샵 대용량 서버
https://github.com/f-lab-edu/yousinsa

e-commerce fashion michael spring

Last synced: about 3 hours ago
JSON representation

MUSINSA 같은 온라인 편집샵 대용량 서버

Awesome Lists containing this project

README

        

# [YOUSINSA](https://keydo.tistory.com/20)

MUSINSA 같은 온라인 편집샵 대용량 서버

## Mock-Up

[Main - No User (1 of 20)](https://ovenapp.io/project/PGw27rPWTmydr8mpmbRVAZYTZurQXuV6#7YCsA)

## 성능 개선

대용량 트래픽을 처리 하기 위한 성능 개선점들을 반영한 TPS 테스트 그래프입니다.


image

[개선점 리스트](#-성능-개선점)

## Design

### Database
[Table 설계에 대한 Issue](https://github.com/f-lab-edu/yousinsa/issues/5)

[Table Diagram](https://dbdiagram.io/d/626c11c695e7f23c619ca37d)

### Infra

![yousinsa-network-infra_ver3](https://user-images.githubusercontent.com/25685282/186876345-929cb9c4-dc0d-4ce2-b730-752ab8927324.png)

---
## 👕 프로젝트 중점사항

프로젝트를 진행하면서 중점적으로 도입해 볼 목록을 정리했습니다.

### Common

- Version 관리 전략
- 문서화

### Spring

- Spring 기능을 충분히 활용
- Spring 내부 동작과 구조를 숙지하면서 사용
- 글로벌 서비스 기준(미구현)

### Performance

- 서버 확장성
- 대규모 트래픽을 처리에 대한 고려
- 비동기 처리를 경험해 볼 수 있도록
- 테이블 설계에 대한 고려 사항 체험

### Code Quality

- Code Convention을 준수
- OOP와 관련된 원칙들을 준수
- 테스트가 쉽도록 설계 준수
- Layer에 대한 구분 준수

### 문제 상황 Simulation

- 한정 판매로 정해진 수량의 물품만 판매 - 수량의 제한
- 주문 데이터가 많은 경우 정산에 대한 처리 시간 문제
- 이벤트 시 한번의 트래픽이 몰리는 경우
- 어쩔 수 없이 서버가 다운되는 경우에 대한 Fail-Over 테스트(미구현)
- 비동기적인 처리를 통해 처리 속도가 향상되어야 하는 문제

---

## 👖 UseCase

필요한 정책이 추가적으로 생길 수 있습니다.

### Common

- user는 `회원 가입`을 통해 Role을 획득할 수 있다.
- user는 `회원 탈퇴`를 할 수 있다.
- user는 `로그인`을 통해 서비스를 사용할 수 있다.
- user는 `로그아웃` 을 통해 서비스 사용을 종료할 수 있다.

### Buyer

- buyer는 `물품 목록 조회`를 할 수 있다.
- buyer는 `물품 구매`를 할 수 있다.

### Store Owner

- store owner는 `입점 신청` 을 진행할 수 있다.
- store owner는 입점이 완료되면 `물품 등록` 을 진행할 수 있다.

### Admin

- admin은 `입점 신청을 수락`할 수 있다.

---

## 🩳 Version Definition

- v1 : 기획 구현과 테스트를 중점으로 개발
- Unit Test
- Integration Test

- v2 : 리팩토링(구조 개선)
- 확장에 유연하도록 개선
- 관련된 Spring Module 적용

- v3 : 성능 개선(극한 상황에 대한 테스트)
- 부하 테스트
- 쿼리 최적화
- MSA로 가기 위한 준비

- v4 : Monolithic to MSA(MicroService Architecture)
- Monolithic보다 더 유연성 있는 구조와 패턴 적용(Scale-out 고려)
- MSA와 관련된 Test
- CQRS

---

## ⛑ 성능 개선점

[[#1] Server Infra 구성 문제](https://keydo.tistory.com/21)

[[#2~#3] 쿼리 문제](https://keydo.tistory.com/24)

[[#4] Database PoolSize 최적화](https://keydo.tistory.com/26)

[[#5] Scale-Up 도입](https://keydo.tistory.com/27)

[[#6] getConnection 호출 시점 미루기 - AutoCommit 설정](https://keydo.tistory.com/28)

[[#7] getConnection 호출 시점 미루기 - LazyConnectionDataSourceProxy](https://keydo.tistory.com/29)

[[#8] DeadLock 발생 문제](https://keydo.tistory.com/30)

[[#9] Scale-Out 도입](https://keydo.tistory.com/31)

[[#10] Scale-Out 테스트 결과 분석하기](https://keydo.tistory.com/31)

[[#11] 재고 관리 Integrity 문제](https://keydo.tistory.com/34)

[[#12] Redis에서 재고 관리(feat.Lua Script)](https://keydo.tistory.com/37)

[[#13] Redis에서 재고 관리(feat.Eventually Consistency)](https://keydo.tistory.com/38)

[[#14] YOUSINSA, 이대로 괜찮은가?](https://keydo.tistory.com/39)

---

## 🦺 Project History

[2022.09.04] Version 3까지 진행 완료

- [x] 대용량 트래픽을 받기 위한 부하 테스트 후 성능 개선
- Scale-Out
- 쿼리 최적화
- Cache Layer 사용

[2022.06.10] Version에 대한 정의 추가

- [x] Version(Phase)에 대한 정의 추가
- Version 1, 2, 3, 4

- [x] v1 Schedule에 대한 부분 등록
- https://github.com/f-lab-edu/yousinsa/milestones

[2022.04.13] 시작 ReadMe 작성

- [x] Mock-Up 만들기(04/10일 내로 완료 후 취합, 4/11 멘토님에게 검토)
- [x] Naming 결정 - 마신사, 유신사
- [x] Category - 상의, 하의, 아우터 (이 안에서도 추리기)
- [x] 우리만의 프로젝트 중점 사항 정하기

**[예시]**

- Spring MVC 기능을 충분하고 잘 활용하기
- Coding Convention 정하기
- OOP와 관련된 원칙들을 준수
- 테스트가 쉬운 코드를 작성
- 백엔드 실무에서 발생할 수 있는 문제를 해결할 수 있도록 설계하기

- [x] Role 정리
- [x] 문제 상황 Simulation

**[예시]**

- 한정 판매로 정해진 수량의 물품만 판매 - 수량의 제한
- 결제 데이터가 많은 경우 정산에 대한 처리 시간 문제
- 이벤트 시 한번의 트래픽이 몰리는 경우
- 결제 도중 시스템이 다운될 경우에 대한 결제에 대한 롤백 처리
- 어쩔 수 없이 서버가 다운되는 경우에 대한 Fail-Over 테스트