Skip to content
김동환 edited this page Aug 20, 2024 · 18 revisions

Welcome to the Github-Action-Test wiki!

리뷰

- 캠핑장 리뷰 조회 5분 간격 - users 100
![image.png](https://prod-files-secure.s3.us-west-2.amazonaws.com/9c98bee0-7b43-4ad8-b663-b06b0420d3bc/5e0e7885-588f-4969-a816-711c92720dd8/image.png)

![image.png](https://prod-files-secure.s3.us-west-2.amazonaws.com/9c98bee0-7b43-4ad8-b663-b06b0420d3bc/41cb89fd-2d9e-416f-81b8-0301f90fbebc/image.png)

- users 200

![image.png](https://prod-files-secure.s3.us-west-2.amazonaws.com/9c98bee0-7b43-4ad8-b663-b06b0420d3bc/b3745e18-7888-4e2b-8ec4-95420f10cb3b/image.png)

![image.png](https://prod-files-secure.s3.us-west-2.amazonaws.com/9c98bee0-7b43-4ad8-b663-b06b0420d3bc/4f8ec9f2-f276-4231-95c2-efb39070a1bc/image.png)

- users 300

![image.png](https://prod-files-secure.s3.us-west-2.amazonaws.com/9c98bee0-7b43-4ad8-b663-b06b0420d3bc/a7e28260-88b8-44a0-a811-2c36f0cc8c6e/image.png)

![image.png](https://prod-files-secure.s3.us-west-2.amazonaws.com/9c98bee0-7b43-4ad8-b663-b06b0420d3bc/eeee1206-3fe9-41f4-8c19-184e3257621f/image.png)

- users 400

![image.png](https://prod-files-secure.s3.us-west-2.amazonaws.com/9c98bee0-7b43-4ad8-b663-b06b0420d3bc/7026f774-858a-41b2-b181-3ac51a09bd2c/image.png)

![image.png](https://prod-files-secure.s3.us-west-2.amazonaws.com/9c98bee0-7b43-4ad8-b663-b06b0420d3bc/8a1b2244-236f-4398-b2d8-86fab6a0869d/image.png)

- users 500

![image.png](https://prod-files-secure.s3.us-west-2.amazonaws.com/9c98bee0-7b43-4ad8-b663-b06b0420d3bc/16a2fd85-3e86-44e8-a3d8-da3d8d1fbdc6/image.png)

backend ec2

![스크린샷 2024-08-16 오후 6.10.48.png](https://prod-files-secure.s3.us-west-2.amazonaws.com/9c98bee0-7b43-4ad8-b663-b06b0420d3bc/a4766df1-f160-48fb-b22e-07bde20b15f7/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-08-16_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_6.10.48.png)

lb 대상 응답 시간

![image.png](https://prod-files-secure.s3.us-west-2.amazonaws.com/9c98bee0-7b43-4ad8-b663-b06b0420d3bc/0d9b273f-7717-4e7d-90df-4e5b168c979a/image.png)

![image.png](https://prod-files-secure.s3.us-west-2.amazonaws.com/9c98bee0-7b43-4ad8-b663-b06b0420d3bc/6081925c-47d2-4adc-9156-597890b56f72/image.png)

db ec2

![스크린샷 2024-08-16 오후 6.11.38.png](https://prod-files-secure.s3.us-west-2.amazonaws.com/9c98bee0-7b43-4ad8-b663-b06b0420d3bc/314c0f4c-f3aa-449c-9b80-7683e73b9311/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-08-16_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_6.11.38.png)

lb 요청

![image.png](https://prod-files-secure.s3.us-west-2.amazonaws.com/9c98bee0-7b43-4ad8-b663-b06b0420d3bc/ce6040d4-feb8-42d7-87aa-d0bcef9d05c0/image.png)
  • 리뷰 수정 5분 간격 (이상)

    • users 100 / 1 (10분)

    image.png

    image.png

    • users 100/ 10

    image.png

    image.png

    • users 200 / 10

    image.png

    image.png

    • users 300 / 10

    image.png

    backend ec2

    image.png

    lb 대상 응답 시간

    image.png

    image.png

    db ec2

    image.png

    • FAILURE

      image.png

      image.png

    • 이슈

      • RPS가 저조함
      • USER 200부터 실패율이 크게 증가 ( 501, 504 에러 )
      • DynamoDB 처리에 문제 발생
      • 응답 시간이 들쭉날쭉 함
    • 분석

      • 트랜잭션 어노테이션이 dynamoDB에서 온전하게 작동하지 않은 거 같음
      • 한 번의 요청에 리뷰, 마이리뷰, 별점평균 총 3개의 테이블 연산이 포함된 것도 부하의 원인인 거 같음
      • 조회 시 생성일로 정렬하는데, 생성일은 인덱스 설정이 되지 않아 조회 성능이 떨어지는 거 같음
    • 개선 방안

      • DynamoDB의 TransactWriteItems 또는 TransactGetItems 작업 등을 시도
      • existsByUserIdAndCampId 메서드 성능 개선을 위한 userId, campId 복합 인덱스 고려
      • 캐시 도입해서 캐시에서 값 변동 후 db 업데이트는 나중
      • 리뷰 수정 과정에서 실행되는 각 과정의 실행 시간을 측정하여 병목 지점 파악
      • 업데이트 요청 시 요청된 값들이 db나 캐시에 저장된 값과 일치하다면 리턴시키기
      • 리뷰 아이디와 생성일 복합 인덱스 설정
  • 나의 리뷰 조회 5분 간격

    • users 100 /10

    image.png

    image.png

    • users 200 /10

    image.png

    image.png

    • users 300 /10

    image.png

    image.png

    • users 400 /10

    image.png

    backend ec2

    image.png

    lb 대상 응답 시간

    image.png

    image.png

    db ec2

    image.png

    lb 요청 수

    image.png

    • users 500 /10

    • 이슈

      • 응답속도가 높아 rps가 저조함
      • 유저가 많아질수록 응답속도도 높아
      • cpu 모니터링 확인 결과 backend ec2의 cpu 점유율이 테스트 초반부터 100% 도달된 상태였음
    • 분석

      • 사용자에게 3988개의 캠핑장 리뷰를 작성해놔서 3988개의 reviewId로 Review 테이블에서 모든 값을 조회하여 페이징 처리를 하는 게 오래걸리는 거 같음
      • cpu 점유율이 시작부터 100%에 도달해있었다는 것도 원인인 거 같음
    • 개선 방안

      • cpu 점유율이 낮아진 거 확인 후 다시 테스트 해봐야 할듯
  • 나의 리뷰 조회 5분 간격 (cpu 점유율 확인 후 다시 진행)

    • users 100

    image.png

    backend ec2

    image.png

    lb 대상 응답 시간

    image.png

    image.png

    db ec2

    image.png

    lb 요청 수

    image.png

    • 분석
      • 테스트 실행 시 user 100명에서도 서버와 db cpu 점유율이 높은 편임이 확인 됨
      • 이게 작성된 리뷰를 조회하는 과정에서 발생하는 것인지 확인하기 위해 리뷰가 적은 유저를 대상으로 다시 한 번 테스트 진행
  • 나의 리뷰 조회 5분 간격 (작성 리뷰 1개인 유저 대상)

    • users 100

    image.png

    image.png

    • users 200

    image.png

    image.png

    • users 300

    image.png

    image.png

    • users 400

    image.png

    image.png

    • users 500

    image.png

    backend ec2

    image.png

    lb 대상 응답 시간

    image.png

    image.png

    db ec2

    image.png

    lb 요청 수

    image.png

    • 이슈
      • rps 100이 넘어가면서 응답 속도가 불안정해지고 유저수가 늘어나도 200을 못넘음
      • rps가 200에 근접하면서 응답 속도가 크게 튀기 시작하고 유저수가 500명일 떄 응답속도가 현저히 느려짐
      • cpu 점유율은 작성된 리뷰가 많은 유저에 비해 안정적임
    • 분석
      • 작성된 리뷰 수가 많을 때에 비해 cpu 점유율이 안정적인 걸로 보아 모든 리뷰를 페이징해 가져오는 현재 로직이 서버에 부하를 많이 주는 거 같음
      • 한 페이지에 필요한 것보다 훨씬 많은 데이터를 db에서 받아옴
      • 등록 리뷰가 많아지면 리뷰 테이블에서 조회 시 IN절에 사용하는 reviewId 리스트의 크기가 커짐
      • 리뷰가 하나 뿐인 유저의 리뷰를 불러오는 요청도 요청 수가 늘어나면서 응답 속도가 불안정해지는 건 보아 서버의 처리 용량이 문제인지 페이징 로직이 문제인지는 테스트를 더 진행해봐야 알 것 같음
    • 개선 방안
      • 리뷰 등록할 때마다 리스트로 저장해서 리스트 자체로 조회하는 기존 로직 개선 고려
      • 캐시 적용 고려

Clone this wiki locally