{"id":25123182,"url":"https://github.com/f-lab-edu/yousinsa","last_synced_at":"2025-04-23T01:13:01.072Z","repository":{"id":37003257,"uuid":"481235081","full_name":"f-lab-edu/yousinsa","owner":"f-lab-edu","description":"MUSINSA 같은 온라인 편집샵 대용량 서버","archived":false,"fork":false,"pushed_at":"2024-01-03T16:43:57.000Z","size":448,"stargazers_count":64,"open_issues_count":0,"forks_count":6,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-23T01:12:55.256Z","etag":null,"topics":["e-commerce","fashion","michael","spring"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/f-lab-edu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-04-13T13:48:57.000Z","updated_at":"2025-02-20T04:49:26.000Z","dependencies_parsed_at":"2023-01-17T12:29:35.549Z","dependency_job_id":null,"html_url":"https://github.com/f-lab-edu/yousinsa","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f-lab-edu%2Fyousinsa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f-lab-edu%2Fyousinsa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f-lab-edu%2Fyousinsa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f-lab-edu%2Fyousinsa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/f-lab-edu","download_url":"https://codeload.github.com/f-lab-edu/yousinsa/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250349060,"owners_count":21415914,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["e-commerce","fashion","michael","spring"],"created_at":"2025-02-08T07:16:09.768Z","updated_at":"2025-04-23T01:13:01.056Z","avatar_url":"https://github.com/f-lab-edu.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# [YOUSINSA](https://keydo.tistory.com/20)\n\nMUSINSA 같은 온라인 편집샵 대용량 서버\n\n## Mock-Up\n\n[Main - No User (1 of 20)](https://ovenapp.io/project/PGw27rPWTmydr8mpmbRVAZYTZurQXuV6#7YCsA)\n\n## 성능 개선\n\n대용량 트래픽을 처리 하기 위한 성능 개선점들을 반영한 TPS 테스트 그래프입니다.\n\n\u003cdiv class=\"tps_graph\" align=\"center\"\u003e\n    \u003cimg width=\"821\" alt=\"image\" src=\"https://user-images.githubusercontent.com/25685282/190669560-a25be401-8d5a-451d-b2d5-af41b9a52ee2.png\"\u003e\n\u003c/div\u003e\n\n[개선점 리스트](#-성능-개선점)\n\n## Design\n\n### Database\n[Table 설계에 대한 Issue](https://github.com/f-lab-edu/yousinsa/issues/5)\n\n[Table Diagram](https://dbdiagram.io/d/626c11c695e7f23c619ca37d)\n\n\u003cimg src=\"https://user-images.githubusercontent.com/25685282/166242241-7685315d-fc17-4bc4-abce-a65d3a71c318.png\" alt=\"\"\u003e\n\n### Infra\n\n![yousinsa-network-infra_ver3](https://user-images.githubusercontent.com/25685282/186876345-929cb9c4-dc0d-4ce2-b730-752ab8927324.png)\n\n---\n## 👕 프로젝트 중점사항\n\n프로젝트를 진행하면서 중점적으로 도입해 볼 목록을 정리했습니다.\n\n### Common\n\n- Version 관리 전략\n- 문서화\n\n### Spring\n\n- Spring 기능을 충분히 활용\n- Spring 내부 동작과 구조를 숙지하면서 사용\n- 글로벌 서비스 기준(미구현)\n\n### Performance\n\n- 서버 확장성\n- 대규모 트래픽을 처리에 대한 고려\n- 비동기 처리를 경험해 볼 수 있도록\n- 테이블 설계에 대한 고려 사항 체험\n\n### Code Quality\n\n- Code Convention을 준수\n- OOP와 관련된 원칙들을 준수\n- 테스트가 쉽도록 설계 준수\n- Layer에 대한 구분 준수\n\n### 문제 상황 Simulation\n\n- 한정 판매로 정해진 수량의 물품만 판매 - 수량의 제한\n- 주문 데이터가 많은 경우 정산에 대한 처리 시간 문제\n- 이벤트 시 한번의 트래픽이 몰리는 경우\n- 어쩔 수 없이 서버가 다운되는 경우에 대한 Fail-Over 테스트(미구현)\n- 비동기적인 처리를 통해 처리 속도가 향상되어야 하는 문제\n\n---\n\n## 👖 UseCase\n\n필요한 정책이 추가적으로 생길 수 있습니다.\n\n### Common\n\n- user는 `회원 가입`을 통해 Role을 획득할 수 있다.\n- user는 `회원 탈퇴`를 할 수 있다.\n- user는 `로그인`을 통해 서비스를 사용할 수 있다.\n- user는 `로그아웃` 을 통해 서비스 사용을 종료할 수 있다.\n\n### Buyer\n\n- buyer는 `물품 목록 조회`를 할 수 있다.\n- buyer는 `물품 구매`를 할 수 있다.\n\n### Store Owner\n\n- store owner는 `입점 신청` 을 진행할 수 있다.\n- store owner는 입점이 완료되면 `물품 등록` 을 진행할 수 있다.\n\n### Admin\n\n- admin은 `입점 신청을 수락`할 수 있다.\n\n---\n\n## 🩳 Version Definition\n\n- v1 : 기획 구현과 테스트를 중점으로 개발\n    - Unit Test\n    - Integration Test\n\n\n- v2 : 리팩토링(구조 개선)\n    - 확장에 유연하도록 개선\n    - 관련된 Spring Module 적용\n\n\n- v3 : 성능 개선(극한 상황에 대한 테스트)\n    - 부하 테스트\n    - 쿼리 최적화\n    - MSA로 가기 위한 준비\n\n\n- v4 : Monolithic to MSA(MicroService Architecture)\n    - Monolithic보다 더 유연성 있는 구조와 패턴 적용(Scale-out 고려)\n    - MSA와 관련된 Test\n    - CQRS\n\n---\n\n## ⛑ 성능 개선점\n\n[[#1] Server Infra 구성 문제](https://keydo.tistory.com/21)\n\n[[#2~#3] 쿼리 문제](https://keydo.tistory.com/24)\n\n[[#4] Database PoolSize 최적화](https://keydo.tistory.com/26)\n\n[[#5] Scale-Up 도입](https://keydo.tistory.com/27)\n\n[[#6] getConnection 호출 시점 미루기 - AutoCommit 설정](https://keydo.tistory.com/28)\n\n[[#7] getConnection 호출 시점 미루기 - LazyConnectionDataSourceProxy](https://keydo.tistory.com/29)\n\n[[#8] DeadLock 발생 문제](https://keydo.tistory.com/30)\n\n[[#9] Scale-Out 도입](https://keydo.tistory.com/31)\n\n[[#10] Scale-Out 테스트 결과 분석하기](https://keydo.tistory.com/31)\n\n[[#11] 재고 관리 Integrity 문제](https://keydo.tistory.com/34)\n\n[[#12] Redis에서 재고 관리(feat.Lua Script)](https://keydo.tistory.com/37)\n\n[[#13] Redis에서 재고 관리(feat.Eventually Consistency)](https://keydo.tistory.com/38)\n\n[[#14] YOUSINSA, 이대로 괜찮은가?](https://keydo.tistory.com/39)\n\n---\n\n## 🦺 Project History\n\n\u003cdetails\u003e\n\u003csummary\u003e[2022.09.04] Version 3까지 진행 완료\u003c/summary\u003e\n\u003cdiv markdown=\"1\"\u003e\n\n- [x] 대용량 트래픽을 받기 위한 부하 테스트 후 성능 개선\n    - Scale-Out\n    - 쿼리 최적화\n    - Cache Layer 사용\n\n\u003c/div\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e[2022.06.10] Version에 대한 정의 추가\u003c/summary\u003e\n\u003cdiv markdown=\"1\"\u003e\n\n- [x] Version(Phase)에 대한 정의 추가\n    - Version 1, 2, 3, 4\n\n\n- [x] v1 Schedule에 대한 부분 등록\n    - https://github.com/f-lab-edu/yousinsa/milestones\n\n\u003c/div\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e[2022.04.13] 시작 ReadMe 작성\u003c/summary\u003e\n\u003cdiv markdown=\"1\"\u003e\n\n- [x]  Mock-Up 만들기(04/10일 내로 완료 후 취합, 4/11 멘토님에게 검토)\n- [x]  Naming 결정 - 마신사, 유신사\n- [x]  Category - 상의, 하의, 아우터 (이 안에서도 추리기)\n- [x]  우리만의 프로젝트 중점 사항 정하기\n\n**[예시]**\n\n       - Spring MVC 기능을 충분하고 잘 활용하기\n       - Coding Convention 정하기\n       - OOP와 관련된 원칙들을 준수\n       - 테스트가 쉬운 코드를 작성\n       - 백엔드 실무에서 발생할 수 있는 문제를 해결할 수 있도록 설계하기\n\n- [x]  Role 정리\n- [x]  문제 상황 Simulation\n\n**[예시]**\n\n       - 한정 판매로 정해진 수량의 물품만 판매 - 수량의 제한\n       - 결제 데이터가 많은 경우 정산에 대한 처리 시간 문제\n       - 이벤트 시 한번의 트래픽이 몰리는 경우\n       - 결제 도중 시스템이 다운될 경우에 대한 결제에 대한 롤백 처리\n       - 어쩔 수 없이 서버가 다운되는 경우에 대한 Fail-Over 테스트\n\n\u003c/div\u003e\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ff-lab-edu%2Fyousinsa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ff-lab-edu%2Fyousinsa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ff-lab-edu%2Fyousinsa/lists"}