남성전용 쇼핑몰 사이트 ‘Ollsy’를 개발하는 '개인 프로젝트'
프론트엔드 부분은 별도의 프레임워크 없이 HTML, CSS, JS로 구현, 백엔드에 초점을 맞춰 백엔드 개발에 주력
단순 기능 구현이 아닌 성능, 동시성, 코드의 재사용성 유지보수를 고려하여 실제 서비스시 생길 문제에 초점을 두고 개발
사용자
- 로그인/ 로그아웃
- 회원정보 조회/ 수정(닉네임)
- 상품조회
- 상품 정렬(신상품 순, 카테고리 별)
- 장바구니 추가/ 삭제
- 주문
- 주문 조회/ 취소
관리자
- 이미지 업로드/ 삭제
- 상품 업로드/ 수정/ 삭제
- 카테고리 생성/ 수정/ 삭제
FrontEnd
BackEnd
DB
AWS, ETC
https://www.notion.so/devblog-sj/Ollsy-2162c0261ba780de8daee2cbeb83c0f4 (트러블 슈팅 및 성능 개선 모음)
데이터베이스 락을 통한 동시성 제어
인덱스를 활용한 병목지점 DB 해결 및 성능 개선
-
https://devblog-sj.notion.site/MySQL-SQL-2162c0261ba7800a8a87f714e1df9bfe?pvs=74 MySQL 성능 개선을 학습하며 작성한 블로그
메인 페이지의 신상품 순으로 데이터를 가져오는 API에서 인덱스를 사용해 성능 개선 →CREATE INDEX idx_created_at ON items (create_at) 인덱스 생성
인덱스 생성 후 부하테스트 결과
기존 Throughput 1.7TPS Latency가 10초 → Throughput 6.6TPS Latency가 3초(인덱스 활용)
임의로 개선하는게 아니라 병목지점이라고 판단이 서면 개선해야 한다.
인덱스를 사용한 이유:
인덱스를 사용하면 읽기의 성능이 좋아지지만 많은 인덱스를 가진다면 해당 테이블의 쓰기/ 수정의 성능 저하가 발생하기 때문에 쇼핑몰 특성상 쓰기/ 수정보다 읽기가 많다. 또한 트래픽이 가장 많이 몰릴 메인페이지의 API에 사용되는 테이블에 인덱스를 활용하여 성능을 개선했다.