본문 바로가기
공부/Jmeter

JMETER테스트하기 - 2

by 고구밍 2022. 5. 25.

 

 

마이페이지 테스트 결과입니다.

 

요약)

1. 기존 JPA보다 40% 속도를 감축하였습니다.

2. 평균 Bytes는 200 감소하였습니다.

3. db에서 파싱해서 받아오는 JPQL은 DSL보다 10% 빨랐습니다.

4. JPQL은 평균 Bytes는 30 감소하였습니다.

5. DSL에비해서 오류율이 약 4% -> 6%으로 60% 증가하였습니다.

 

결과)

 오류 발생 때문에 이미지 파싱은 어플리케이션 내에서 for문을 통해서 split하는 방향으로 하기로 하였습니다. 

 

 


 

JPA : 기존 JPA문을 이용한 마이페이지 조회시의 테스트 결과입니다.

DSL 1차  : DSL을 적용하고 측정한 값입니다. 전송 KB/초 값이 이전과 달라서 처리 속도가 빨랐습니다.

DSL 2차 : DSL을 적용하고 JPA를 측정했던 시간대 (PM 07:00 ~ PM 10:00)에 실시하였고습니다.

-> DSL은 Entity로 조회하는 것이 아닌 Dto 값을 받아와서 에플리케이션에서 처리합니다.

-> DB에서 받아오는 정보가 줄어서 200 Bytes 줄어 든 것을 알 수 있습니다.

 

// 성훈 - 마이페이지 0-2상태의 아이템정보를 dto에 담는다
    @Override
    public List<ItemUserResponseDto> findByMyPageItems(Long userId) {

        return queryFactory
                .select(new QItemUserResponseDto(
                        item.id,
                        item.itemImg,
                        item.status
                ))
                .from(item)
                .where(
                        item.bag.userId.eq(userId),
                        item.status.between(0, 2))
                .fetch();
    }
private List<ItemUserResponseDto> addItemList(List<ItemUserResponseDto> ItemList) {
        List<ItemUserResponseDto> myItemList = new ArrayList<>();

        for (ItemUserResponseDto eachItem : ItemList) {
            ItemUserResponseDto Item = new ItemUserResponseDto(
                    eachItem.getItemId(),
                    eachItem.getImage().split(",")[0],
                    eachItem.getStatus()
            );
            myItemList.add(Item);
        }
        return myItemList;

 

JPQL 1차 : 어플리케이션에서 for문을통해서

조회하는 이미지 정보에서 : 파싱되어있는 여러장의 이미지 url을 ","기준으로 substring을 적용하였습니다.

queryDSL과 jpql에서는 UBSTRING_INDEX (문자가 포함되면 트림하는 메소드)를 지원하지 않아

 

 // 성훈 - 마이페이지 0-2상태의 아이템정보를 dto에 담는다
    @Override
    public List<ItemUserResponseDto> findByMyPageItems(Long userId) {
        List<ItemUserResponseDto> result = em.createQuery(
                        "select new com.sparta.mulmul.dto.item.ItemUserResponseDto(i.id,SUBSTRING(i.itemImg, 1 ,case when i.itemImg like '%,%' then (locate(',',i.itemImg)-1)\n" +
                        "else 90 end), i.status) from Item i where i.bag.userId = : userId and i.status BETWEEN  0 AND 2 ", ItemUserResponseDto.class)
                .setParameter("userId", userId)
                .getResultList();
        return result;
    }

 

->  SUBSTRING으로 case문으로 ","가 포함되어있는지 판별해서

","의 위치를 알내서 문자열을 자르고,

없으면 임의의 자릿수 90을 정해서문자열을 자르는 과정입니다.

 

@Override
public BarterHotItemListDto findByHotBarterItemsTest(Long itemId) {
    BarterHotItemListDto singleResult = em
            .createQuery(
                    "select new com.sparta.mulmul.dto.barter" +
                    ".BarterHotItemListDto(i.id, i.title,SUBSTRING(i.itemImg, 1 ,case when i.itemImg like '%,%' then (locate(',',i.itemImg)-1)\n" +
                    "           else 90 end\n), i.contents, i.status) from Item i where i.id = : itemId", BarterHotItemListDto.class)
            .setParameter("itemId", itemId)
            .getSingleResult();
    return singleResult;

 

이때 QuertDSL애 적용하기위해 시도를 해보았지만,

when 부분에서 해결이 되지 않아서 JPQL을 이용하여 만들었습니다.