본문 바로가기
공부/Jmeter

JMeter 공부하기 - 1

by 고구밍 2022. 5. 9.

충격과 공포...

 

거래내역조회 (JPA 유저정보를 OR값으로 받아서 거래완료와 평가완료를 판별해서 보내줌 )

 

-> 100명이 1초당 10개씩 조회를 할경우

-> 최대 13초 뒤에 응답을 하였다....

-> 전기수 선배님들이 Query DSL이라는 것을 이용해서 성능 향상을 했다는데... 한번 알아봐야겠다.

 

import com.sparta.mulmul.model.Barter;
import com.sparta.mulmul.model.Item;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;

public interface BarterRepository extends JpaRepository<Barter, Long> {

    List<Barter> findAllByBuyerIdOrSellerId(Long userId, Long userId1);
}
// 성훈 - 거래내역서 보기
    public List<BarterResponseDto> showMyBarter(UserDetailsImpl userDetails) {
        User user = userRepository.findById(userDetails.getUserId()).orElseThrow(
                () -> new IllegalArgumentException("유저 정보가 없습니다.")
        );

        Long userId = userDetails.getUserId();
        // (거래 물품리스트들과 거래내역의 Id값)이 포함된 거래내역 리스트를 담을 Dto
        List<BarterResponseDto> totalList = new ArrayList<>();
        // 상대방 아이디
        Long opponentId = null;
        // 나의 포지션
        String myPosition = null;
        // 나의 거래완료 여부
        Boolean myTradeCheck;
        // 나의 평가완료 여부
        Boolean myScoreCheck;

        // 유저의 거래내역 리스트를 전부 조회한다
        List<Barter> mybarterList = barterRepository.findAllByBuyerIdOrSellerId(userId, userId);

        // 내가 거래한 거래리스트를 대입한다.
        // barterId, buyerId, SellerId를 분리한다.
        for (Barter barters : mybarterList) {
            Long barterId = barters.getId();
            LocalDateTime date = barters.getModifiedAt();
            // 거래 물품리스트를 담을 Dto -> 내것과 상대것을 담는다
            List<MyBarterDto> myBarterList = new ArrayList<>();
            List<MyBarterDto> barterList = new ArrayList<>();

            String barter = barters.getBarter();
            //barter 거래내역 id split하기 -> 파싱하여 거래항 물품의 Id값을 찾기
            String[] barterIds = barter.split(";");
            String[] buyerItemIdList = barterIds[0].split(",");
            String[] sellerItemIdList = barterIds[1].split(",");


            // 바이어(유저)의 물품을 찾아서 정보를 넣기
            for (String buyerItemId : buyerItemIdList) {
                Long itemId = Long.parseLong(buyerItemId);
                Item buyerItem = itemRepository.findById(itemId).orElseThrow(
                        () -> new IllegalArgumentException("buyerItem not found")
                );

                MyBarterDto buyerItemList = new MyBarterDto(
                        itemId,
                        buyerItem.getTitle(),
                        buyerItem.getItemImg()
                );

                //바이어가 유저라면
                if (buyerItem.getBag().getUserId().equals(userId)) {
                    myBarterList.add(buyerItemList);
                    // 바이어가 유저이기 때문에, 상대방은 셀러가 된다.
                    opponentId = barters.getSellerId();
                    myPosition = "buyer";
                } else {
                    barterList.add(buyerItemList);
                    opponentId = barters.getBuyerId();
                }
            }

            //셀러(유저)의 물품을 찾아서 정보를 넣기
            for (String sellerItemId : sellerItemIdList) {
                Long itemId = Long.parseLong(sellerItemId);
                Item sellerItem = itemRepository.findById(itemId).orElseThrow(
                        () -> new IllegalArgumentException("sellerItem not found")
                );

                MyBarterDto sellerItemList = new MyBarterDto(
                        itemId,
                        sellerItem.getTitle(),
                        sellerItem.getItemImg()
                );
                //셀러가 유저라면
                if (sellerItem.getBag().getUserId().equals(userId)) {
                    myBarterList.add(sellerItemList);
                    myPosition = "seller";
                } else {
                    barterList.add(sellerItemList);
                }
            }

            // 상대 유저 정보
            User opponentUser = userRepository.findById(opponentId).orElseThrow(
                    () -> new IllegalArgumentException("유저 정보가 없습니다.")
            );
            // 거래상태 정보 1 : 신청중 / 2 : 거래중 / 3 : 거래완료 / 4 : 평가완료
            int status = barters.getStatus();

            //내포지션이 바이어라면 거래내역의 상태 확인하기
            if (myPosition.equals("buyer")) {
                myTradeCheck = barters.getIsBuyerTrade();
                myScoreCheck = barters.getIsBuyerScore();
                //내포지션이 셀러라면 거래내역의 상태 확인하기
            } else {
                myTradeCheck = barters.getIsSellerTrade();
                myScoreCheck = barters.getIsSellerScore();
            }

            if (status == 2 || status == 1) {
                BarterNotFinDto barterNotFin = new BarterNotFinDto(
                        barterId,
                        opponentId,
                        opponentUser.getNickname(),
                        opponentUser.getProfile(),
                        status,
                        myPosition,
                        myTradeCheck,
                        myBarterList,
                        barterList
                );

                BarterResponseDto totalBarter = new BarterResponseDto(barterNotFin, null);
                totalList.add(totalBarter);
                // 거래완료, 평가완료일 경우
            } else if (status == 3 || status == 4) {
                BarterFinDto barterFin = new BarterFinDto(
                        barterId,
                        opponentId,
                        opponentUser.getNickname(),
                        opponentUser.getProfile(),
                        date,
                        status,
                        myPosition,
                        myScoreCheck,
                        myBarterList,
                        barterList
                );

                BarterResponseDto totalBarter = new BarterResponseDto(null, barterFin);
                totalList.add(totalBarter);

            }
        }
        return totalList;
    }

 

<마이페이지 조회하기>

100명이 1초당 10번 조회했을 경우 응답이 최대 3초 걸림

 

 

 

 

https://effortguy.tistory.com/164

 

[Spring] 웹 어플리케이션 성능 테스트 (1) - JMeter

웹 어플리케이션 성능 테스트를 툴은 자바 오픈 소스 Apache Bench, Apache JMeter, 네이버에서 Grinder를 이용해서 만든 nGrinder, Gatling 등등이 있습니다. 이번 포스팅에선 웹 어플리케이션 성능 테스트 오

effortguy.tistory.com

https://12bme.tistory.com/272

 

[테스트] JMeter와 성능 테스트

1.1 JMeter란 Apache JMeter는 웹 애플리케이션처럼 클라이언트-서버 구조로 된 소프트웨어의 성능 테스트를 위해서 만들어진 100% 순수 자바 프로그램입니다. 스테파노 마조끼가 개발했으며, 이는 현

12bme.tistory.com

https://hayden-archive.tistory.com/398

 

[JMeter] Apache JMeter 설치 및 트래픽 부하 테스트

참고 : www.youtube.com/watch?v=1AyxqIePusA 엄청나게 많은 트래픽을 웹 서버에게 보내서 웹 서버가 얼마나 트래픽 스트레스로부터 잘 견디는지 테스트해보고자 한다. 이를 위해 아파치에서 제공하는 제

hayden-archive.tistory.com

 

 

https://youtu.be/1AyxqIePusA