7주차 발표_데모 - g-market/b-shop-backend GitHub Wiki
- nGrinder란
- 네이버에서 성능 측정 목적으로 개발된 성능 부하 및 스트레스 테스트 도구
- nGrinder 적용
- local Docker환경에 nGrinder Contoller, Agent 설치
- 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))
}
}
- VM 서버로 부하 테스트 수행
- Vusers : 동시 접속하는 유저의 수 ( vuser = agent * process * thread )
- TPS(Transaction per Second) : 초당 처리수, 높을 수록 성능 좋음
- Peak TPS : 초당 처리 수의 최대치
- Mean Test Time : 응답 시간
프론트엔드에서 장바구니 페이지에서 주문 페이지로 이동할 때
상품 상세 페이지에서 주문하기 버튼을 눌러 주문 페이지로 이동할 때를 구분하였습니다.
이에 전자의 경우에만 장바구니가 지워지도록 하였습니다. (`회원의 장바구니에서 주문한 itemId, itemOptionId 만 지워지도록 변경하였습니다.)
장바구니는 현재 Hashes 자료구조를 사용하고 있습니다.
key: memberId (위 그림에서 KEY)
hashKey: itemId + '-'(Delimiter) + itemOptionId ('NAME')
hashvalue: CartDto(itemId, itemOptionId, orderCount) ('GARIM')
이에 따라 장바구니페이지에서 (주문하기 버튼을 눌러)
주문 페이지로 이동할 때,
아이템 상세 페이지에서 주문 페이지로 바로 갔을 때를 구분하였습니다.
이를 해결하는 방법으로
-
/orders
API를 하나로 사용하고 있어 이를 API를 분리 - 장바구니에 대한 id를 만들어 이를 전달하는 방식
-
/orders?delete=true
API의 @RequsetParam - 장바구니에서 시작하면 장바구니 삭제 API를 추가
이에 따라 4번 방식인 장바구니페이지에서 (주문하기 버튼을 눌러)
주문 페이지로 이동할 때만 장바구니를 지우는 방식으로 구현하였습니다.