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

[refactor#148] 답변 채택 API 성능 최적화 #155

Merged
merged 17 commits into from
Nov 23, 2024

Conversation

dudxo
Copy link
Collaborator

@dudxo dudxo commented Nov 21, 2024

관련 이슈

📑 작업 상세 내용

  • 성능 최적화를 위한 문제 찾기 시도
    • 쿼리 개수
    • N+1
    • 병목 등
  • 답변 채택 시 크레딧 정합성 테스트 작성
    • 정합성 테스트 성공
  • 답변 채택 비즈니스 로직 쿼리 개수 개선
    • questionPost, Answer 조회 시 fetch join을 이용한 Member를 한번에 가져와서 getMember() 시 발생하는 회원 조회 쿼리 제거
    • 기존 답변 채택 API 호출 -> 총 쿼리 개수 11개
    • V2 답변 채택 API 호출 -> 총 쿼리 개수 9개

💫 작업 요약

  • 성능 최적화를 위한 문제 찾기 시도
  • 답변 채택 시 크레딧 정합성 테스트 작성(정합성 일치)
  • 답변 채택 비즈니스 로직 쿼리 개수 개선(11개 -> 9개)

🔍 중점적으로 리뷰 할 부분

  • 기존 API와 V2 API 처리 속도가 그렇게 큰 차이는 보이지 않습니다. 다만, 크게보았을 때 네트워크 비용을 절감하거나 약간의 성능 개선 등 장점이 있다고 생각합니다.

@dudxo dudxo added ✨ feat 기능 추가 ♻️ refactor 코드 기능 유지하되 코드 변경 labels Nov 21, 2024
@dudxo dudxo self-assigned this Nov 21, 2024
@dudxo dudxo linked an issue Nov 21, 2024 that may be closed by this pull request
1 task
Copy link

github-actions bot commented Nov 21, 2024

Code Coverage

Overall Project 84.36% -1.38% 🍏
Files changed 60.8%

File Coverage
ChatInquiryController.java 100% 🍏
AnswerController.java 100% 🍏
ChatRoom.java 100% 🍏
ChatRoomService.java 95.41% 🍏
ChatInquiryService.java 90.7% 🍏
AnswerService.java 87.65% -3.09% 🍏
ChatInquiry.java 84.62% -2.56% 🍏
ChatInquiryQueryRepositoryImpl.java 73.57% 🍏
AuthService.java 65.46% -6.83%
QuestionPostSimpleQueryRepository.java 0%
AnswerSimpleQueryRepository.java 0%

Copy link

github-actions bot commented Nov 21, 2024

Test Results

 28 files   28 suites   14s ⏱️
130 tests 129 ✅ 1 💤 0 ❌
131 runs  130 ✅ 1 💤 0 ❌

Results for commit 8086fe9.

♻️ This comment has been updated with latest results.

@dudxo dudxo requested a review from hyun2371 November 21, 2024 11:58
* [refactor] JWT 생성 로직 변경

- JWT 생성시 subject에 개인정보(이메일)이 아닌 PK값이 들어가도록 변경
- 검증 토큰을 이용한 인증 객체 생성 시 subject 이메일 -> PK 변경에 따라 PK로 회원 찾도록 변경

* [refactor] : 토큰 generate 메서드 파라미터 변경으로 인한 리팩토링

* [refactor] : 토큰 generate 메서드 파라미터 변경으로 인한 리팩토링

* [refactor] : 토큰 generate 메서드 파라미터 변경으로 인한 리팩토링
@hyun2371
Copy link
Member

정합성 테스트를 하신 이유가 있을까요? 동시성 문제는 여러 사용자가 동시에 DB 데이터에 접근해서 일관성 문제가 생기는 걸로 알고 있습니다! 그런데 repository 의존성을 Mocking해서 하는게 맞는지 모르겠습니다..

Copy link
Member

@hyun2371 hyun2371 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생 많으셨습니다~! 회의에서 논의된대로 이후에 v1,v2 는 합치도록 하겠습니다

@@ -52,10 +52,21 @@ public ResponseEntity<PageResponse<AnswerDetailResponse>> getAnswersByQuestionPo
@ApiResponse(useReturnTypeSchema = true)
@PostMapping("/api/question-posts/answers/{answerId}")
public ResponseEntity<AnswerDetailResponse> getAnswersByQuestionPostId(
@PathVariable Long answerId,
@PathVariable("answerId") Long answerId,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수정 감사합니다~

@hyun2371 hyun2371 changed the title [refacotr #148] API 성능 최적화 [refactor#148] 답변 채택 API 성능 최적화 Nov 22, 2024
hyun2371 and others added 9 commits November 23, 2024 13:43
* [feat] : 채팅 요청에 createdAt 필드 추가

* [feat] : 채팅 요청 테스트 픽스쳐에 createdAt 추가

* [feat] : 채팅 파트너 구하는 로직 DTO에 추가

* [refactor] : 채팅 파트너 구하는 로직 DTO로 이동

* [style] : 코드 리포멧팅

* [test] : createdAt 포함된 testFixture 사용
* [feat] : 채팅 요청 상세 조회 응답 추가

* [feat] : 채팅 요청 상세 조회 비즈니스 로직 추가

* [feat] : 채팅 요청 상세 조회 비즈니스 로직 테스트

* [feat] : 채팅 요청 상세 조회 API 메서드 추가

* [test] : 채팅 요청 상세 조회 API 메서드 테스트

* [feat] : 채팅 요청 API pk 필드명 수정

* [rename] : memberInfo DTO 위치 이동

* [remove] : 불필요한 예외 로직 처리 삭제

* [refactor] : 채팅 파트너 구하는 로직 도메인으로 이동

* [refactor] : 채팅 파트너 구하는 로직 mapper가 아닌 서비스 내에서 호출

* [style] : 코드 리포멧팅

* [style] : 줄바꿈 취소
@hyun2371
Copy link
Member

정합성 테스트 매 CI할 때마다 돌리면 시간이 많이 소요되어서 disabled 처리했습니다.
그리고 EntityManager를 사용하기 위해 별도의 QueryRepository를 생성하지 않고, Spring Data JPA를 활용하여 기존 repository에서 호출할 수 있도록 수정하였습니다.

@dudxo dudxo merged commit 1dd4523 into dev Nov 23, 2024
3 checks passed
@dudxo dudxo deleted the refacotr/#148/mypage-optimization branch November 23, 2024 11:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ feat 기능 추가 ♻️ refactor 코드 기능 유지하되 코드 변경
Projects
None yet
Development

Successfully merging this pull request may close these issues.

♻️ 마이페이지 API 성능 최적화
2 participants