충격과 공포...
거래내역조회 (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
[테스트] 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
'공부 > Jmeter' 카테고리의 다른 글
JMETER 테스트 자료 정리 (0) | 2022.06.03 |
---|---|
JMETER테스트하기 - 2 (0) | 2022.05.25 |
JMETER사용시 참고한 사이트 링크 (0) | 2022.05.23 |
JMETER를 이용한 거래내역 성능확인 (0) | 2022.05.20 |
Jmeter사용해보기 - 마이페이지 조회 (0) | 2022.05.10 |