글 작성자: Key Ryung

프로젝트 소개

MUSINSA, 29CM, ZIGZAG와 같은 패션 도메인의 E-commerce 서비스를 개발하는 프로젝트입니다. 웹 서비스 전반적인 개발을 진행하기보다 안정적으로 트래픽을 처리하기 위한 백엔드 개발을 중점적으로 프로젝트를 진행했습니다.

 

더 많은 트래픽을 처리하기 위한 방법을 바로 적용하는 것이 아닌 많은 트래픽이 발생했을 때 병목이 발생하는 지점들을 APM 툴을 사용하여 분석하고 이를 해결하기 위한 여러 방법 중 Trade-Off를 고려 후 프로젝트의 성격에 맞게 선택하여 Over-Engineering을 하지 않는 방법을 찾기 위해 고민하며 진행했습니다.

 

OOP 원칙들이 반영되어 있는 Spring을 사용하면서 확장 포인트들을 이해하고 활용하면서 확장성과 재사용성이 높은 코드를 작성하기 위해 노력했습니다. 확장성과 재사용성을 높이기 위한 코드를 작성하기 위해서 Unit Test를 작성하는 과정을 거쳐 기능 간의 의존도를 낮추는 방법을 적용했습니다.

 

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

 

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

MUSINSA 같은 온라인 편집샵 대용량 서버. Contribute to f-lab-edu/yousinsa development by creating an account on GitHub.

github.com

 

트래픽의 개략적인 측정

전반적인 도메인을 이해해보기 위해서 잘 알려진 패션 E-Commerce 업체들에 대한 트래픽 조사를 진행해 보았습니다.

MUSINSA 트래픽

서비스 MAU(만명) DAU(만명)
MUSINSA 1200 40
29CM 240 8
KREAM 180 6
Ably 640 21
AVG.   19

DAU를 정확히 집계한 데이터는 찾을 수 없으나 해당 그래프와 비교해보았을 때 30일 동안 접속자수가 꾸준하게 있다고 가정하고 DAU = MAU/30 정도로 추정한 결과입니다.

 

💡 추가적으로 블랙 프라이데이 같은 이벤트를 생각한다면 동시 접속자 수가 8만명 정도 될 수 있다는 것을 조사를 통해 알 수 있었습니다.

 

이렇게 많은 트래픽을 받으면 더 다양한 문제들을 만나볼 수 있겠지만 이번 프로젝트에서는 규모를 더 줄여서 국내 서비스 기준 동시 사용자 500명 정도로 목표를 선정했습니다. 동시 사용자와 TPS 사이의 상관관계 공식을 사용해서 국내 서비스 기준 응답 속도를 400ms 정도로 정한 뒤 필요 TPS를 계산한 결과표입니다.

 

사용자 수를 통한 부하량 계산

 

* 500명으로 선정한 이유는 Series A 기준, 패션 E-commerce 스타트업 트래픽이 추산식을 적용했을 때 최대 500명 정도로 계산되어 초기 서비스 런칭시 감당해야 할 최대 트래픽으로 예상했습니다.

Active User 500명 1000명 1500명
Domestic Service(~400ms) 1250TPS 2500TPS 3750TPS
Global Service(~200ms) 2500TPS 5000TPS 7500TPS


서버 인프라 구성

프로젝트를 최종적으로 개선하여 구축한 인프라 구성도입니다. 개선점과 관련된 글을 포스팅하면서 왜 도입하게 되었는지도 다룰 예정입니다.

 

프로젝트 개선 그래프

기획한 기능을 완성한 뒤 병목 지점들을 개선해나가면서 테스트한 결과 그래프입니다. 앞으로 하나씩 테스트를 진행하면서 겪은 문제들을 바탕으로 개선점과 함께 포스팅할 예정입니다.


문제점 개선 기록

기록하고 정리하고 요약하는 작업을 할 때는 내가 너를 정복하고 해결해버리겠어!! 라는 마음으로 접근했는데 막상 다 끝나고 보니 뿌듯하면서도 사랑스러운(?) 기록들로 보입니다.

60번의 테스트 기록 - 1
60번의 테스트 기록 - 2

* 기록한 테스트는 60번이지만 테스트 최적화를 위해 수행한 테스트도 많습니다.

팀원들과 테스트 결과 공유

자다가도 아이디어가 떠올라 적용해보았지만 낙담한 결과들을 공유해서 '이런 시도들을 해봤더니 잘 안되는데 어떻게 해결하면 좋을까?'와 더불어 '이런 시도들은 왜 적합하지 않을까?' 란 고민까지 공유하고 싶었습니다.

 

특히 connection 관련해서 한 고민들(중간점검[#4~#8])과 재고 관리에서의 데이터 정합성을 보장하면서 성능을 올릴 고민들(중간점검[#11~#17])의 경우 60번의 테스트 중 대부분을 차지한 주역들이기 때문에 더더욱 공유하고 싶어 정리하는 데에도 많은 시간을 쏟아부었던 기억이 새록새록 납니다.

공유한 중간 점검 자료 목록
정리해서 처음 공유한 중간 점검
Slack을 통한 공유

피드백 주시면 감사하겠습니다!🙏

 

REF

https://biz.newdaily.co.kr/site/data/html/2021/12/02/2021120200101.html

 

무신사 "블랙 프라이데이 판매액 1232억 돌파"

무신사는 ‘2021 무신사 블랙 프라이데이’ 행사에서 누적 판매액 1232억원을 돌파했다고 2일 밝혔다.지난달 25일부터 블랙 프라이데이 기간 판매된 상품 수는 약 257만 개를 넘어섰다. 하루 평균

biz.newdaily.co.kr

https://performance.tistory.com/6

 

동시사용자와 부하 분석

일반적인 Web based system을 사용하는 사용자 용어에 대해 알아보자. 아래와 같이 4가지 사용자 유형으로 구분할 수 있으며, 뜻을 잘 못 알고 사용하는 사례도 많으므로 의미를 정확하게 알고 사용

performance.tistory.com