Code Monkey home page Code Monkey logo

yousinsa's Introduction

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

Mock-Up

Main - No User (1 of 20)

성능 개선

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

image

개선점 리스트

Design

Database

Table 설계에 대한 Issue

Table Diagram

Infra

yousinsa-network-infra_ver3


👕 프로젝트 중점사항

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

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 구성 문제

[#2~#3] 쿼리 문제

[#4] Database PoolSize 최적화

[#5] Scale-Up 도입

[#6] getConnection 호출 시점 미루기 - AutoCommit 설정

[#7] getConnection 호출 시점 미루기 - LazyConnectionDataSourceProxy

[#8] DeadLock 발생 문제

[#9] Scale-Out 도입

[#10] Scale-Out 테스트 결과 분석하기

[#11] 재고 관리 Integrity 문제

[#12] Redis에서 재고 관리(feat.Lua Script)

[#13] Redis에서 재고 관리(feat.Eventually Consistency)

[#14] YOUSINSA, 이대로 괜찮은가?


🦺 Project History

[2022.09.04] Version 3까지 진행 완료
  • 대용량 트래픽을 받기 위한 부하 테스트 후 성능 개선
    • Scale-Out
    • 쿼리 최적화
    • Cache Layer 사용
[2022.06.10] Version에 대한 정의 추가
[2022.04.13] 시작 ReadMe 작성
  • Mock-Up 만들기(04/10일 내로 완료 후 취합, 4/11 멘토님에게 검토)
  • Naming 결정 - 마신사, 유신사
  • Category - 상의, 하의, 아우터 (이 안에서도 추리기)
  • 우리만의 프로젝트 중점 사항 정하기

[예시]

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

[예시]

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

yousinsa's People

Contributors

f-lab-bot avatar f-lab-michael avatar maketheworldwise avatar namkey avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

yousinsa's Issues

[#C8] CI/CD 구축하기

개요

Cloud와 연동된 CI/CD 구축

  1. 테스트가 실패 시 관련 응답오도록
  2. 관련한 Report 생성(Spring docs)
  • Feature
  • Bug Fix
  • Setup

[#C9] API Docs Setting

개요

Swagger UI를 통하여 EndPoint 확인할 수 있도록 세팅

  • Feature
  • Bug Fix
  • Setup

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.