Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/hodadako step3: 사용자 전체 정보 조회 #12

Open
wants to merge 21 commits into
base: hodadako
Choose a base branch
from

Conversation

hodadako
Copy link
Collaborator

구현사항

  • 특정 사용자의 전체 정보를 조회 하는 API를 개발합니다.
  • 해당 사용자가 개설한 모든 계좌의 정보와, 모든 거래 내역을 조회할 수 있어야 합니다.
  • 해당 API를 두 가지 방법으로 개발하고, 각각에 대해 성능 테스트를 수행해 주세요.

구현설명

  • 아래 두 가지 방식으로 구현 후 Gatling을 통해 성능을 측정해보았습니다.
  1. Account와 그에 해당하는 Transaction을 JPA 기본 메서드로 조회
  2. Account와 그에 해당하는 Transaction을 JPA 기본 메서드로 조회하되 Transaction을 조회하는 부분을 병렬 처리

##성능 테스트

  • 200 OK를 받는 응답을 체크하도록 성능테스트를 진행하였고 아래가 해당 결과입니다.

병렬 조회 시

image

  • 정상 응답의 평균 응답 시간은 약 25309 ms 입니다.
  • 에러율은 12.16 % 정도입니다.

기본 조회 시

image

  • 정상 응답의 평균 응답 시간은 약 24138 ms 입니다.
  • 에러율은 11.52 % 정도입니다.

고민 사항

  • 제가 혼자 고민해봤을 때는 병렬로 조회하는 방식이 기본 JPA 메서드를 활용하는 것보다 더 나은 성능일거라고 기대했는데 실제 지표를 보니 에러율과 평균 응답 시간 모두 반대로 기본 조회하는 방식이 더 효율적이었습니다.
  • 현재 코드에서 병렬처리를 제대로 구현했는지 검증을 할 수 있는 방법이 잘 떠오르지 않았던 것 같습니다. 어떤 방식으로 확인해볼 수 있을까요..?

- EmailRecordRequest 내부에 있던 Save DTO를 단독 레코드로 변경
- Account Entity 추가
- Transaction에 ``createdDate`` 필드 추가
- senderAccount가 아닌 senderName으로 조회하던 부분 수정
- 접근 제어자를 public으로 수정
- 회원이 갖고 있는 계좌 및 해당 계좌를 통한 모든 거래 내역을 조회
- 동기적으로 조회하는 방법과 비동기적으로 조회하는 방법 추가
- Page 관련 쿼리 스트링이 들어오지 않았을 경우를 고려하여 ``@PageableDefault`` 사용
- 기본 정렬을 transactionDate로 하여 계좌와 관계없이 거래 일자로만 순서를 정렬하도록 구현
- database와 일치하기 위해 컬럼 이름 수정
- 필드 이름도 일치하도록 수정
- 기존 Account에서 사용하던 Pageable을 transactionReader에서 사용하도록 변경
- ``@PageDefault``의 정렬이 ``transactionDate``를 기반으로 되어 있어 pageable을 사용할 수 없음
- DTO로 SELECT 할때는 entity가 아니기 때문에 JPQL fetch join 사용할 수 없음
- Gatling를 사용하여 burst와 ramp 두 가지 경우에 대한 테스트를 진행하였습니다.
@hodadako hodadako requested review from VSFe and nyh365 November 19, 2024 13:51
@hodadako hodadako self-assigned this Nov 19, 2024
@hodadako hodadako changed the base branch from main to hodadako November 19, 2024 13:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant