7주차 발표_데모 - g-market/b-shop-backend GitHub Wiki

📌 동시성 제어

nGrinder를 사용하여 부하테스트

  1. nGrinder란
  • 네이버에서 성능 측정 목적으로 개발된 성능 부하 및 스트레스 테스트 도구
  1. nGrinder 적용
  • local Docker환경에 nGrinder Contoller, Agent 설치
  1. Script 작성
  • 서버 부하를 발생시킬 api 요청 스크립트 작성
  • groovy Script 작성
@RunWith(GrinderRunner)
class TestRunner {

        private String accessToken = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJBY2Nlc3NUb2tlbiIsImlhdCI6MTY3ODMzNjQ2MiwiZXhwIjoxNjc4MzQwMDYyLCJpZCI6MTEsInJvbGUiOiJBRE1JTiJ9.A_9S3Nhh_UnDNCH5dnuYLpTYD0qsywXZ0p0kZBcpzwo"
        ...
        @Test
	public void test() {
		headers["Authorization"] = "Bearer " + accessToken
		request.setHeaders(headers)
		
		def param = "{\"orderItemDtoList\":[{\"itemId\":1,\"itemOptionId\":1,\"orderCount\":1}]}"
		HTTPResponse response = request.POST("http://b-shop.com/api/orders", param.getBytes());

		if (response.statusCode == 301 || response.statusCode == 302) {
			grinder.logger.warn("Warning. The response may not be correct. The response code was {}.", response.statusCode)
		} else {
			assertThat(response.statusCode, is(201))
		}
	}
  1. VM 서버로 부하 테스트 수행 부하테스트
  • Vusers : 동시 접속하는 유저의 수 ( vuser = agent * process * thread )
  • TPS(Transaction per Second) : 초당 처리수, 높을 수록 성능 좋음
  • Peak TPS : 초당 처리 수의 최대치
  • Mean Test Time : 응답 시간




📌 장바구니

프론트엔드에서 장바구니 페이지에서 주문 페이지로 이동할 때

상품 상세 페이지에서 주문하기 버튼을 눌러 주문 페이지로 이동할 때를 구분하였습니다.

이에 전자의 경우에만 장바구니가 지워지도록 하였습니다. (`회원의 장바구니에서 주문한 itemId, itemOptionId 만 지워지도록 변경하였습니다.)


2) 구현 과정 중 고민점

장바구니는 현재 Hashes 자료구조를 사용하고 있습니다.

img

key: memberId (위 그림에서 KEY)
hashKey: itemId + '-'(Delimiter) + itemOptionId ('NAME')
hashvalue: CartDto(itemId, itemOptionId, orderCount) ('GARIM')

이에 따라 장바구니페이지에서 (주문하기 버튼을 눌러) 주문 페이지로 이동할 때,

아이템 상세 페이지에서 주문 페이지로 바로 갔을 때를 구분하였습니다.

이를 해결하는 방법으로

  1. /orders API를 하나로 사용하고 있어 이를 API를 분리
  2. 장바구니에 대한 id를 만들어 이를 전달하는 방식
  3. /orders?delete=true API의 @RequsetParam
  4. 장바구니에서 시작하면 장바구니 삭제 API를 추가

이에 따라 4번 방식인 장바구니페이지에서 (주문하기 버튼을 눌러) 주문 페이지로 이동할 때만 장바구니를 지우는 방식으로 구현하였습니다.

⚠️ **GitHub.com Fallback** ⚠️