-
Notifications
You must be signed in to change notification settings - Fork 5
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] - 쿼리 최적화 (N+1 문제를 해결), 빌드 에러 해결 #80
Open
na0th
wants to merge
23
commits into
TaskSprints:develop
Choose a base branch
from
na0th:auction_product
base: develop
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
수정한 내용 : 1. 빌드 에러 수정 -> Clock Config (seoul ->Seoul)로 대문자로 수정 -> Jwt Config Propertiese 방식으로 수정 -> Payment Properties setter 추가 2. logging level 수정 -> debug 에서 Info로 로깅 레벨을 약하게 수정
삭제한 내용 : 1. viewCount 삭제 -> 불필요한 update 쿼리를 만들어서 추후에 더 좋은 방식으로 구현할 예정 예를 들면 redis
추가한 내용 : 1. 유효한 값 인지 검증하는 validate 추가 -> 비즈니스 로직이 아닌 유효 값 검증은 resolver에서 처리해도 되겠다고 생각함 - 경매 시작,종료 시각 범위는 함께 주어지도록 검증 - 경매 시작 시각이 종료 시각보다 이전이도록 검증 - MinPrice의 값이 MaxPrice보다 작도록 검증
변경한 내용 : 1. UserDetailResponse에서 Wallet ID 필드가 String이던 것을 Long으로 변경 -> 엔티티 필드에서 walletId는 Long 타입이라서.
수정한 내용 : - 명시적으로 모든 연관 관계를 지연 로딩으로 설정(디폴트는 toMany는 지연 로딩, toOne은 즉시 로딩) 1. getAuctionById 메서드 쿼리 최적화 - findAuctionById V2 메서드 추가 -> Auction 조회 시 User를 fetch join하여 의도치 않은 쿼리 방지 -> 쿼리 3개 => 쿼리 1개로 최적화 2. getProductByAucitonId 메서드 쿼리 최적화 - Product <-> ProductImage 간 양방향으로 매핑 관계 변경 -> 기존은 Product -> ProductImage로의 단방향 매핑으로 조인 테이블 방식이었지만, 양방향 매핑 시 외래 키 매핑 방식으로 조인 테이블을 경유하지 않아 성능이 향상 됨. - findByAuctionIdV2 메서드 추가 -> Product 조회 시 User와 컬렉션인 ProductImage까지 fetch join해서 가져 옴 -> 컬렉션은 지연 로딩 초기화 하는 방식이랑 트레이드 오프 고려 해야 함. 3. application.yml에 default batch size 설정 -> 엔티티 조회 시 지연 로딩을 in 쿼리로 묶어서 한 번에 로딩 하기 위함(쿼리 최적화) 추가한 메서드는 적용 안 했음
변경한 내용 : 1. application.yml 문법 수정 및 Redis yml 추가, build.gradle 추가, include : 아래 - jwt, - payment -> 띄어쓰기 안해서 값이 제대로 안들어가던 오류 수정 2. Session으로 결제 임시 값 저장 -> Redis에 임시 값 저장(5분 후 삭제) 3. PaymentController 세션 관련 테스트 수정 -> Redis 이용하도록 테스트 수정
추가한 내용 : Job Runr 라이브러리를 통해 경매 스케쥴링을 구현 1) 경매 시작 시각이 되면 경매 Status가 변경됨 - PENDING -> ACTIVE 2) 경매 종료 시각이 되면 경매 Status가 변경 - ACTIVE -> CLOSE 미완 : 낙찰 시 로직 구현?
수정한 내용 : 1) 결제 시 쿼리 스트링으로 userId를 전달하던 부분에서 JWT 토큰에서 userId를 추출하는 방식으로 리팩터링 2) resolver에서 refresh token의 subject를 가져오던 것을 access token으로 가져오도록 수정
수정한 내용 : 1)결제 컨트롤러에서 인증/인가 관련 테스트 오류 수정
수정한 내용 : 1) auction의 highestBidAmount 필드, highestBidderId 필드 추가 - 관련 테스트 수정 - 입찰 갱신 시 양방향 참조 맺어줌 2) auction과 bid간 mappedBy 명시하지 않아서 조인 테이블 방식이던 걸, mappedBy 명시해서 외래키 방식으로 교체 -> 성능상 조인 테이블은 매우 안좋음
추가한 내용 : 1) 입찰 시 지갑 잔액 검증 -> User 조회 시 Wallet까지 fetch join -> n+1 쿼리 방지 2) 경매 종료 검증 로직 변경 -> time을 기준으로 하다가 auctionStatus를 기준으로 하도록 변경
변경한 내용 : 1) walletService에서 잔액 체크하는 메서드 삭제 -> 도메인 모델로 옮김
추가한 내용 : 1) 조회 되지 않도록 closed_at 생성
추가한 내용 : 1) 잔액 차감을 이벤트로 처리 -> 경매 종료 시 경매 상태를 바꾸면 트랜잭션이 커밋될 때 업데이트 쿼리가 나가는데, 지갑 잔액 차감 관련 로직까지 수행하게 되면 그 중간에 동시성 문제가 생길 수 있다고 판단함 - 비동기로 처리 - 지갑 잔액을 차감 - 실패 시 로깅
[FEATURE] - 낙찰 로직을 구현합니다.
na0th
requested review from
isyoudwn,
KNU-K,
yachimiya,
world-dv and
wonjjang44
January 1, 2025 05:36
수정한 내용 : 입찰 시 auction 쪽 highest bid를 갱신할 떄, save()를 하지 않아 update되지 않던 에러
KNU-K
requested changes
Jan 2, 2025
src/main/java/com/tasksprints/auction/payment/presentation/PaymentController.java
Outdated
Show resolved
Hide resolved
src/main/java/com/tasksprints/auction/payment/infrastructure/redis/RedisService.java
Outdated
Show resolved
Hide resolved
src/main/java/com/tasksprints/auction/common/jobrunr/AuctionJob.java
Outdated
Show resolved
Hide resolved
src/main/java/com/tasksprints/auction/auction/application/service/AuctionScheduleService.java
Show resolved
Hide resolved
src/main/java/com/tasksprints/auction/auction/application/resolver/SearchConditionResolver.java
Outdated
Show resolved
Hide resolved
수정한 내용 : 가독성을 위해 간단한 수정
메서드 변경 후 이전 메서드로 테스트 해서 생긴 테스트 오류 해결
삭제한 내용 : 1) auction쪽 highest bid 관련 삭제 bid 로직은 auction당 1개의 bid만 존재 -> 여러 개의 bid가 존재하는 구조가 아니라 1개의 웹소켓 연결된 bid만 추적한다.
1) initializer에서 bidderId를 삭제한다. -> DummyBid를 추가한다. 2) Auction Job (낙찰 로직) -> 낙찰 로직 수행 시 auction.getBids로 bid를 조회하도록 수정
1) user create 시 wallet도 생성되도록 수정
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
name: Pull Request
about: '풀 리퀘스트를 제출합니다.'
title: "[FEATURE] - [기능명] 또는 [FIX] - [버그 설명]"
labels: ''
assignees: ''
🆕 기능 추가 / 🔧 버그 수정
빌드 에러 수정
📋 변경 사항
🔍 테스트 사항
📄 관련 문서
📝 추가 사항